Программа не видит .jsp, ошибка 404
Не хотел чтобы мой первый вопрос на этом сайте был таким глупым, но я уже второй день туплю над этой проблемой. В рамках своего самообучения делаю нубский crud-проектик, опираясь на это. Maven, Spring, Hibernate, DAO, TomCat. Понимаю, что метод устаревший, но для начала мне норм. В моем варианте делаю телефонную книгу. Проблема всплыла в самом конце - кнопка "edit" ведет на 404 вот с таким сообщением:
JSP file [/edit/WEB-INF/views/editPage.jsp] not found
При том, что кнопка "add" (страничка которой находится в той же директории) работает корректно и ведет куда надо. Изначально я пробовал делать как автор гайда - сделать одну страничку и на add, и на edit, а уже потом разделил на две разных, чтобы быть уверенным, что проблема не в ней.
Ниже немного кода.
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>borkaugroups</groupId>
<artifactId>phoneDirectory</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>14</release>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>9.0.37</version>
</dependency>
</dependencies>
</project>
Контроллер:
package borkaugroup.phonedirectory.controller;
import borkaugroup.phonedirectory.model.Subscriber;
import borkaugroup.phonedirectory.service.SubscriberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
public class SubscriberController {
private SubscriberService subscriberService;
@Autowired
public void setSubscriberService(SubscriberService subscriberService) {
this.subscriberService = subscriberService;
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView allSubs() {
List<Subscriber> subscribers = subscriberService.allSubs();
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("subscribers");
modelAndView.addObject("subscriberList", subscribers);
return modelAndView;
}
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
public ModelAndView editPage(@PathVariable int id) {
Subscriber subscriber = subscriberService.getById(id);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("editPage");
modelAndView.addObject("subscriber", subscriber);
return modelAndView;
}
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public ModelAndView editSubscriber(@ModelAttribute("subscriber") Subscriber subscriber) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("redirect:/");
subscriberService.edit(subscriber);
return modelAndView;
}
@RequestMapping(value = "/add", method = RequestMethod.GET)
public ModelAndView addPage() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("addPage");
return modelAndView;
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView addSubscriber(@ModelAttribute("subscriber") Subscriber subscriber) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("redirect:/");
subscriberService.add(subscriber);
return modelAndView;
}
@RequestMapping(value="/delete/{id}", method = RequestMethod.GET)
public ModelAndView deleteSubscriber(@PathVariable("id") int id) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("redirect:/");
Subscriber film = subscriberService.getById(id);
subscriberService.delete(film);
return modelAndView;
}
}
Вебконфиг:
package borkaugroup.phonedirectory.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@ComponentScan("borkaugroup.phonedirectory")
public class WebConfig {
@Bean
ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
Глагна:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>Subscribers</title>
</head>
<body>
<h2>Subscribers</h2>
<form method="get" action="search">
<input type="text" name="keyword" />
<input type="submit" value="Search" />
</form>
<table>
<tr>
<th>id</th>
<th>phone</th>
<th>name</th>
</tr>
<c:forEach var="subscriber" items="${subscriberList}">
<tr>
<td>${subscriber.id}</td>
<td>${subscriber.phone}</td>
<td>${subscriber.name}</td>
<td>
<a href="/edit/${subscriber.id}">edit</a>
<a href="/delete/${subscriber.id}">delete</a>
</td>
</tr>
</c:forEach>
</table>
<h2>Add</h2>
<c:url value="/add" var="add"/>
<a href="${add}">Add new subscriber</a>
</body>
</html>
И сам editPage.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Edit subscriber</title>
</head>
<body>
<c:url value="/edit" var="var"/>
<form action="${var}" method="POST">
<input type="hidden" name="id" value="${subscriber.id}">
<label for="phone">Phone</label>
<input type="text" name="phone" id="phone">
<label for="name">Name</label>
<input type="text" name="name" id="name">
<input type="submit" value="Edit subscriber">
</form>
</body>
</html>
Ответы (1 шт):
Может ошибка тут
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET)
Когда работает
@RequestMapping(value = "/edit", method = RequestMethod.POST)
Можно попробовать
@RequestMapping(value = "/edit/{id}", method = RequestMethod.POST)
Разница а методе запроса GET и POST
