Я пытаюсь добавить пользователей в базу данных mysql с формой, но я получаю:
HTTP Status 400 Запрос, отправленный клиентом, был синтаксически неправильным.
мои коды
User.java
public class User {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int id;
private String name;
}
UserDAO.java
public class UserDAO {
public void insert(User u) throws SQLException, ClassNotFoundException {
Connection conn=Database.newDatabase().getConnection();
PreparedStatement ps=conn.prepareStatement("insert into user values (?)");
ps.setString(1,u.getName());
ps.execute();
ps.close();
conn.close();
}
public List<User> getUsers() throws SQLException, ClassNotFoundException {
List<User> list=new ArrayList<User>();
Connection conn=Database.newDatabase().getConnection();
PreparedStatement ps=conn.prepareStatement("select *from user");
ResultSet rs=ps.executeQuery();
while (rs.next()){
User u=new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
list.add(u);
}
rs.close();
ps.close();
conn.close();
return list;
}
}
UserController.java
package com.springapp.mvc.Controller;
import java.sql.SQLException;
import com.springapp.mvc.Model.User;
import com.springapp.mvc.Service.UserDAO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UserController {
@RequestMapping(value = "user",method = RequestMethod.GET)
public ModelAndView getUser() throws ClassNotFoundException, SQLException {
UserDAO udao=new UserDAO();
ModelAndView mav=new ModelAndView();
mav.setViewName("userControl");
mav.addObject("userList",udao.getUsers());
return mav;
}
@RequestMapping(value = "save", method = RequestMethod.POST)
public String createUser(@ModelAttribute(value = "user") User u) throws SQLException, ClassNotFoundException {
UserDAO udao=new UserDAO();
udao.insert(u);
return "redirect:user.html" ;
}
}
userControl.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<title>User</title>
</head>
<body>
<h1>
Users
</h1>
<form:form action="save.html" method="post" commandName="user">
<input type="hidden" name="id">
<label for="name">User Name</label>
<input type="text" id="name" name="name"/>
<input type="submit" value="Submit"/>
</form:form>
<table border="1">
<c:forEach var="user" items="${userList}">
<tr>
<td>${user.name}</td><td>${user.id}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
web.xml
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>hello.jsp</welcome-file>
</welcome-file-list>
</web-app>
MVC-диспетчерская-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.springapp.mvc.Controller,com.springapp.mvc.Service"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
Я предполагаю, что проблема в вашем JSP в этой строке:
<input type="hidden" name="id">
Ваш id
не имеет значения, поэтому при попытке конвертировать пустую строку в int
будет NumberFormatException
.
+ Изменить
<form:form action="save.html" method="post" commandName="user">
использовать:
<form:form action="save" method="post" commandName="user">
Потому @RequestMapping
значение @RequestMapping
- это формат URL.
Внесите изменения в контроллер:
@RequestMapping(value = "save", method = RequestMethod.POST) public String createUser(@ModelAttribute(value = "user") User u) throws SQLException, ClassNotFoundException { UserDAO udao=new UserDAO(); udao.insert(u); return "redirect:user.html" ;
Return View Имя только не расширение:
return "redirect:user" ;
@RequestMapping(value = "save", method = RequestMethod.POST)
Я думаю, что "save.html" следует изменить, чтобы просто "сохранить".