#java #spring
Вопрос:
Я не знаю, почему всегда, когда я запускаю приложение, консоль говорит мне, что есть некоторые ошибки. Я в этом деле нищий.
java.io.FileNotFoundException
at java.util.zip.ZipFile.open(Native Method) ~[na:1.8.0_111]
at java.util.zip.ZipFile.<init>(ZipFile.java:219) ~[na:1.8.0_111]
at java.util.zip.ZipFile.<init>(ZipFile.java:149) ~[na:1.8.0_111]
at java.util.jar.JarFile.<init>(JarFile.java:166) ~[na:1.8.0_111]
at java.util.jar.JarFile.<init>(JarFile.java:130) ~[na:1.8.0_111]
at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:241) ~[tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.tomcat.util.scan.JarFileUrlJar.<init>(JarFileUrlJar.java:65) ~[tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:49) ~[tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.tomcat.util.scan.StandardJarScanner.process(StandardJarScanner.java:383) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.tomcat.util.scan.StandardJarScanner.processURLs(StandardJarScanner.java:318) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:270) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:233) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.jasper.servlet.TldScanner.scanJars(TldScanner.java:262) [tomcat-embed-jasper-9.0.46.jar:9.0.46]
at org.apache.jasper.servlet.TldScanner.scan(TldScanner.java:104) [tomcat-embed-jasper-9.0.46.jar:9.0.46]
at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:83) [tomcat-embed-jasper-9.0.46.jar:9.0.46]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) [tomcat-embed-core-9.0.46.jar:9.0.46]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_111]
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-embed-core-9.0.46.jar:9.0.46]
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) [na:1.8.0_111]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:829) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) [tomcat-embed-core-9.0.46.jar:9.0.46]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) [tomcat-embed-core-9.0.46.jar:9.0.46]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_111]
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-embed-core-9.0.46.jar:9.0.46]
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) [na:1.8.0_111]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) [tomcat-embed-core-9.0.46.jar:9.0.46]
Я управляю путями с помощью своего класса контроллера, в котором есть путь для/, /editar и всего остального, что вы можете увидеть в коде:
package com.example.segundoparcial19_20.controller;
package com.example.segundoparcial19_20.controller;
import com.example.segundoparcial19_20.dao.CategoriaRepository;
import com.example.segundoparcial19_20.dao.PeliculaRepository;
import com.example.segundoparcial19_20.entity.Categoria;
import com.example.segundoparcial19_20.entity.Pelicula;
import com.example.segundoparcial19_20.entity.PeliculaDTO;
import com.example.segundoparcial19_20.vo.Filtro;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Controller
public class mainController {
private PeliculaRepository peliculaRepository;
private CategoriaRepository categoriaRepository;
public CategoriaRepository getCategoriaRepository(){return categoriaRepository;}
@Autowired
public void setCategoriaRepository(CategoriaRepository categoriaRepository){
this.categoriaRepository=categoriaRepository;
}
public PeliculaRepository getPeliculaRepository(){
return peliculaRepository;
}
@Autowired
public void setPeliculaRepository(PeliculaRepository peliculaRepository){
this.peliculaRepository=peliculaRepository;
}
@GetMapping("/")
public String doGet(Model model){
Filtro filtro = new Filtro();
model.addAttribute("filtro", filtro);
List<Categoria> listaCategorias = categoriaRepository.findAll();
model.addAttribute("listaCategorias", listaCategorias);
return doFiltrar(filtro, model);
}
@PostMapping("/filtrar")
public String doFiltrar(Filtro filtro, Model model){
List<Pelicula> listaPeliculas = null;
if(filtro.getListaCategorias().isEmpty()){
listaPeliculas = peliculaRepository.findAll();
}else{
List<Pelicula> lista = new ArrayList<>();
listaPeliculas = peliculaRepository.findByCategoria(filtro.getListaCategorias());
listaPeliculas.addAll(lista);
}
model.addAttribute("categorias", categoriaRepository.findAll());
model.addAttribute("listaPeliculas", listaPeliculas);
return "listaPeliculas";
}
@GetMapping("/pelicula/{id}/editar")
public String editarPeli(Model model, @PathVariable("id") Short id){
Optional<Pelicula> peliculaOpt = peliculaRepository.findById(id);
if(peliculaOpt.isPresent()){
Pelicula pelicula = peliculaOpt.get();
PeliculaDTO pel = new PeliculaDTO(pelicula);
model.addAttribute("pel", pel);
}
List<Categoria> listaCategorias = categoriaRepository.findAll();
model.addAttribute("listaCategorias", listaCategorias);
return "editar";
}
@PostMapping("/pelicula/editar")
public String editarInfo(Model model, @ModelAttribute("pel") @Validated PeliculaDTO pelicula){
PeliculaDTO pel1 = pelicula;
Optional<Pelicula> peliculaOpt = peliculaRepository.findById(pelicula.getPeliculaId());
if(peliculaOpt.isPresent()){
Pelicula peli = peliculaOpt.get();
peli.setTitulo(pelicula.getTitulo());
peli.setDescripcion(pelicula.getDescripcion());
peli.setAnyoEstreno(pelicula.getAnyoEstreno());
peli.setDuracion(pelicula.getDuracion());
peli.setPresupuesto(pelicula.getPresupuesto());
peli.setCategoriaList(pelicula.getCategoriaList());
//peli.setIdiomaId(pelicula.getIdiomaId());
model.addAttribute("pelicula", peli);
peliculaRepository.save(peli);
}
List<Categoria> listaCategorias = categoriaRepository.findAll();
model.addAttribute("listaCategorias", listaCategorias);
return "redirect:/pelicula/" pelicula.getPeliculaId() "/editar";
}
@GetMapping("/pelicula/{id}/actores")
public String actores(Model model, @PathVariable("id") Short id){
Optional<Pelicula> peliculaOpt = peliculaRepository.findById(id);
if(peliculaOpt.isPresent()){
Pelicula pelicula = peliculaOpt.get();
model.addAttribute("pelicula", pelicula);
}
return "actores";
}
}
I filter by category with my FilterClass which isnt mine, i copied it from a friend and I think that it works because my friends doesnt have the problem:
package com.example.segundoparcial19_20.vo;
import com.example.segundoparcial19_20.entity.Categoria;
import java.util.ArrayList;
import java.util.List;
public class Filtro {
private List<Categoria> listaCategorias;
public Filtro(){
this.listaCategorias = new ArrayList<>();
}
public void setListaCategorias(List<Categoria> listaCategorias) {
this.listaCategorias = listaCategorias;
}
public List<Categoria> getListaCategorias() {
return listaCategorias;
}
}
My list jsp:
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page import="com.example.segundoparcial19_20.entity.Pelicula" %>
<%@ page import="java.util.List" %>
<%@ page import="com.example.segundoparcial19_20.entity.Categoria" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Lista de Peliculas</title>
</head>
<%
List<Pelicula> peliculas = (List)request.getAttribute("listaPeliculas");
List<Categoria> categorias = (List) request.getAttribute("categorias");
%>
<body>
<h1>Listado de Peliculas</h1>
<form:form method="post" action="/filtrar" modelAttribute="filtro">
<form:checkboxes path="listaCategorias" items="${categorias}" itemLabel="nombre"/>
<input type="submit" value="Filtrar">
</form:form>
<table border="1">
<%
for (Pelicula p: peliculas) {
%>
<tr>
<td><%=p.getTitulo() %></td>
<td><%= p.getAnyoEstreno()%></td>
<td><%= p.getDuracion()%></td>
<td><%= p.getValoracionId().getDescripcion() %></td>
<td><%= p.getIdiomaId().getNombre() %></td>
<td><%= p.getPresupuesto() %></td>
<td><a href="/pelicula/<%= p.getPeliculaId()%>/actores">Actores</a></td>
<td><a href="/pelicula/<%= p.getPeliculaId()%>/editar">Editar</a></td>
</tr>
<%
}
%>
</table>
</body>
</html>
My DTO class:
package com.example.segundoparcial19_20.entity;
import java.util.List;
public class PeliculaDTO {
private Short peliculaId;
private String titulo;
private String descripcion;
private Integer anyoEstreno;
private short duracion;
private double presupuesto;
private List<Categoria> categoriaList;
//private Idioma idiomaId;
/*
* título, descripción (textarea), año de estreno, duración,
* presupuesto, categorías a las que pertenece e idioma.
* */
public PeliculaDTO() {
}
public PeliculaDTO(Short peliculaId, String titulo, String descripcion,
Integer anyoEstreno, short duracion,
double presupuesto, List<Categoria> categoriaList
//,Idioma idiomaId
) {
this.peliculaId = peliculaId;
this.titulo = titulo;
this.descripcion = descripcion;
this.anyoEstreno = anyoEstreno;
this.duracion = duracion;
this.presupuesto = presupuesto;
this.categoriaList = categoriaList;
//this.idiomaId = idiomaId;
}
public PeliculaDTO (Pelicula pelicula){
this.peliculaId=pelicula.getPeliculaId();
this.titulo=pelicula.getTitulo();
this.descripcion=pelicula.getDescripcion();
this.anyoEstreno=pelicula.getAnyoEstreno();
this.duracion=pelicula.getDuracion();
this.presupuesto=pelicula.getPresupuesto();
this.categoriaList= pelicula.getCategoriaList();
//this.idiomaId= pelicula.getIdiomaId();
}
public Short getPeliculaId() {
return peliculaId;
}
public void setPeliculaId(Short peliculaId) {
this.peliculaId = peliculaId;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Integer getAnyoEstreno() {
return anyoEstreno;
}
public void setAnyoEstreno(Integer anyoEstreno) {
this.anyoEstreno = anyoEstreno;
}
public short getDuracion() {
return duracion;
}
public void setDuracion(short duracion) {
this.duracion = duracion;
}
public double getPresupuesto() {
return presupuesto;
}
public void setPresupuesto(double presupuesto) {
this.presupuesto = presupuesto;
}
public List<Categoria> getCategoriaList() {
return categoriaList;
}
public void setCategoriaList(List<Categoria> categoriaList) {
this.categoriaList = categoriaList;
}
/*public Idioma getIdiomaId() {
return idiomaId;
}
public void setIdiomaId(Idioma idiomaId) {
this.idiomaId = idiomaId;
}*/
}
My Repository Class:
package com.example.segundoparcial19_20.dao;
import com.example.segundoparcial19_20.entity.Categoria;
import com.example.segundoparcial19_20.entity.Pelicula;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface PeliculaRepository extends JpaRepository<Pelicula, Short> {
@Query("SELECT DISTINCT p FROM Pelicula p JOIN p.categoriaList c WHERE c IN :categorias")
public List<Pelicula> findByCategoria(@Param("categorias") List<Categoria> categorias);
}
My edit JSP page:
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ page import="com.example.segundoparcial19_20.entity.Pelicula" %>
<%@ page import="com.example.segundoparcial19_20.entity.PeliculaDTO" %>
<%@ page import="java.util.List" %>
<%@ page import="com.example.segundoparcial19_20.entity.Categoria" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<%
PeliculaDTO pelicula = (PeliculaDTO) request.getAttribute("pel");
List<Categoria> listaCategorias = (List) request.getAttribute("listaCategorias");
%>
<title><%=pelicula.getTitulo()%></title>
</head>
<body>
<h1><%=pelicula.getTitulo()%></h1>
<form:form action="/pelicula/editar" method="post" modelAttribute="pel">
<br>
<form:label path="peliculaId">peliculaId</form:label>
<form:input path="peliculaId" type="text" value='<%=pelicula.getPeliculaId()%>' readonly="true"/>
<br>
<form:label path="titulo">Titulo</form:label>
<form:input path="titulo" type="text" value='<%=pelicula.getTitulo()%>'/>
<br>
<form:label path="descripcion">descripcion</form:label>
<form:textarea path="descripcion" type="text" value='<%=pelicula.getDescripcion()%>'/>
<br>
<form:label path="anyoEstreno">anyoEstreno</form:label>
<form:input path="anyoEstreno" type="text" value='<%=pelicula.getAnyoEstreno()%>'/>
<br>
<form:label path="duracion">duracion</form:label>
<form:input path="duracion" type="text" value='<%=pelicula.getDuracion()%>'/>
<br>
<form:label path="presupuesto">presupuesto</form:label>
<form:input path="presupuesto" type="text" value='<%=pelicula.getPresupuesto()%>'/>
<br>
<form:select path="categoriaList" class="form-control">
<form:options items="${listaCategorias}" />
</form:select>
<input type="submit" value="Editar">
</form:form>
</body>
</html>
The filter my prof does:
package es.taw.sampletaw.vo;
import es.taw.sampletaw.entity.MicroMarket;
import java.util.ArrayList;
import java.util.List;
public class Filtro {
private String nombre;
private List<MicroMarket> listaSupermercado;
public Filtro() {
this.nombre = "";
this.listaSupermercado = new ArrayList<>();
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public List<MicroMarket> getListaSupermercado() {
return listaSupermercado;
}
public void setListaSupermercado(List<MicroMarket> listaSupermercado) {
this.listaSupermercado = listaSupermercado;
}
}
The repository my profesor does:
package es.taw.sampletaw.dao;
import es.taw.sampletaw.entity.Customer;
import es.taw.sampletaw.entity.MicroMarket;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface CustomerRepository extends JpaRepository<Customer, Integer> {
@Query("SELECT c FROM Customer c WHERE c.name LIKE CONCAT('%',:nombre, '%') OR c.microMarketByZip IN :supermercado")
public List<Customer> findBySimilarNameOrMicroMarket (@Param("nombre") String nombre,
@Param("supermercado") List<MicroMarket> supermercado);
@Query("SELECT c FROM Customer c WHERE c.name LIKE CONCAT('%', :nombre, '%')")
public List<Customer> findBySimilarName (@Param("nombre") String nombre);
@Query("SELECT c FROM Customer c WHERE c.microMarketByZip IN :supermercado")
public List<Customer> findByMicroMarket (@Param("supermercado") List<MicroMarket> filtroSuper);
}