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的主要内容,如果未能解决你的问题,请参考以下文章