java NOTAS / APUNTES SPRING MVC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java NOTAS / APUNTES SPRING MVC相关的知识,希望对你有一定的参考价值。

NOTAS/APUNTES SPRING MVC:

@Component => la Anotacion generica
@Controller => Componente para atender peticiones Web
@Service => Componente para la lógica del negocio
@Repository => Componente de acceso a la Base de datos
@Configuration => Componente que participará en la construcción del application context

COMPONENT-SCAN => Scanea todo el proyecto buscando las anotaciones descritas arriba,
  empieza desde el package que contiene la la anotación @SpringBootAplication
  
@Autowired => Al encontrar @Autowired Spring buscara el bean asignado en todo el proyecto
 y lo asignara a la variable, Esto se conoce como Field Injection, ejm:

FIELD INJECTION:
@Autowired
private RepositorioAlumnos repositorio; 

SETTER INJECTION
@Autowired
public void setRepositorio(RepositorioAlumnos repositorio) {
  this.repositorio = repositorio;
}

METHOD INJECTION
@Autowired
public void inicializa(RepositorioAlumonos repositorio) {
  this.repositorio = repositorio;
}

CONSTRUCTOR INJECTION
@Autowired
public Utilidad(RepositorioAlumonos repositorio) {
  this.repositorio = repositorio;
}

@PostConstruct:
Sirve para que se ejecute una vez un metodo

@PostConstruct
public void init() {
  mediaDiaria = integrador.obtenMediaDiariaCotizaciones();
}

REQUESTMAPPING:
COMO SE DEFINE EL REQUESTMAPPING?
GET:
@RequestMapping(path="/info", method=RequestMethod.GET)
GET & POST:
@RequestMapping(path="/info", method={RequestMethod.GET, RequestMethod.POST})
GENERAR UNA RUTA POR CONTROLLER
@Controller
@RequestMapping("/calc");
public class MisRutas {
  
  @Requestmapping(path="/info")
  @ResponseBody
  public String info() {
    return "Calculadoras Online";
  }
}

OPCIONES DE PETICIONES MEDIANTE REQUESTMAPPING:
@RequestMapping(path="/suma")
@ResponseBody (OPCIONAL)
public int suma(int a, int b) {
  return a + b;
}
PETICION URL:
http://localhost:8080/calc/suma?a=1&b=2

@RequestParam:
@RequestMapping(path="/suma")
@ResposeBody (OPCIONAL)
public int suma(int a, @RequestParam(name="op2", required=false, defaultValue="0") Integer b) {
  return a + b;
}
PETICION URL:
http://localhost:8080/calc/suma?a=1&op2=2 => 3
http://localhost:8080/calc/suma?a=1 => 1

@PathVariable:
@RequesMapping(path="/next/{original}")
@ResponseBody (OPCIONAL)
public int segment(@PathVariable int original) {
  return original + 1;
}
PETICION URL:
http://localhost:8080/calc/next/5 => 6

CONFIGURAR LOS TIPO DE RESPUESTAS (JSON, XML):
@RequestMapping(path="/persona", produces={MediaType.APPLICATION_XML_VALUE})
@ResposeBody
public Persona obtenPersona() {
  return new Persona("Pedro", "Selva");
}

MODIFICAR LA RESPUESTA DE UN JSON
public class Persona {
  private String nombre;
  
  @JsonProperty("localidad")
  private String municipio
  @JsonFormat(shape=JsonFormat.Shape.STRING,pattern="dd-MM-yyyy")
  private Date fechanacimiento;
  @JsonIgnore
  private String password;
}

VIEWS AND CONTROLLER:
Se accede al controller mediante @RequestMapping(path="/lista") y este metodo devuelve
el nombre de la vista a retornar. Tambien, se pueden crear subcarpetars para organizar 
de una mejor manera las vistas @RequestMapping(path="directorio/nombre_vista").
Si la vista tiene el mismo nombre que el @RequestMapping no es necesario que el metodo
retorne la vista, es decir, el metodo puede ser void y al tener el mismo nombre de la vista
esta sera buscada de esa forma

MODEL AND CONTROLLER:
Para agregarle atributos a las vistas:
@Requestmapping(path="/lista")
public String estado(Model model) {
  //CLAVE: STRING, VALOR: CUALQUIER OBJECT. NO DEVUELVE NADA, SOLO AGREGA INFORMACION ADICIONAL
  //A LA VISTA
  model.addAttribute("nombre", "Lista de nombres");
  return "lista";
}
Para acceder al valor en la vista:
<h2 th:text="${nombre}">
EJEMPLO DE OBJECT:
@Requestmapping(path="/persona/{id}")
public String persona(Model model) {
  model.addAttribute("usuario", new Persona("Manuel " +id, "Queretaro"));
  return "lista";
}
VISTA:
<p>Nombre: <span th:text="${usuario.nombre}"> </p>
<p>Municipio: <span th:text="${usuario.municipio}"> </p> 
EJEMPLO DE UNA LISTA:
private final List<String> valores = Array.asList(...);

@Requestmapping(path="/lista")
public String lista(Model model) {
  model.addAttribute("titulo", "lista de nombres");
  model.addAttribute("lista", valores);
  return "lista";
}
EN LA VISTA:
<li th:each="fila: ${lista}" th:text="${fila}"><li>
COMO HACER UN REDIRECT DESDE EL CONTROLLER:
@Requestmapping(path="/add", method=RequestMethod.POST)
public String add(String nuevo, Model model) {
  valores.add(nuevo);
  return "redirect:/lista";
}

COMANDOS PARA COMPILAR LA APLICACION (Maven Wrapper):
EN EL DIRECTORIO DEL PROYECTO
./mvnw.cmd (Windows) ./mvnw (Para sistemas UNIX)
Y aparace directorio target con el jar de la aplicacion
EJECUTAR APLICACION DESDE CONSOLA:
java -jar target/nombre del jar
CONSTRUCCION Y EJECUCION CON MAVEN:
./mvnw spring-boot:run

CAMBIARLE EL NOMBRE QUE SE USA POR DEFECTO:
En el pom.xml, buscamos la etiqueta "build"
y agregamos la etiqueta "finalName"
<finalName>aplicacion</finalName>
./mvnw clean package (UNIX), ./mvnw.cmd clean package (WINDOWS)

CREACION DE WAR (WEBARCHIVE)
En el pom.xml se cambia la etiqueta "packaging" por "war"
En la etiqueta "dependency" buscamos la dependencia de Tomcat y se agrega la etiqueta "scope"
esto con el fin de que todos los jar necesarios para que la aplicacion funcione sean provided y
no genere conflicto
<scope>provided</scope>

Y en el metodo principal:
extendemos de => extends SpringBootServletInitializer
y sobreescribimos su metodo:
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  return application.sources(WarApplication.class);
}
COMPILAMOS: ./mvnw clean package (UNIX), ./mvnw.cmd clean package (WINDOWS)
y para acceder desde tomcat:
./catalina.sh start
./catalina.sh stop

y URL: http://localhost:8080/app/saludo
app => nombre del war generado






以上是关于java NOTAS / APUNTES SPRING MVC的主要内容,如果未能解决你的问题,请参考以下文章

javascript NOTAS JS

markdown Notas Spring

markdown algunas notas de CSS

css NOTAS CSS

markdown Notas paraorientaciónprofesionalcomo programador

java ssm 后台框架平台 项目源码 websocket 即时通讯 IM quartz spri