这里用springmvc实现了最简单的页面型增删改查,表单验证,文件上传,异常处理以及返回json的方法,只粘贴代码
具体项目图如下:
1,添加所需jar包
2,在web.xml里配置DispatcherServlet,接收所有的请求,顺带配置字符集过滤器
<filter>
<description>字符集过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集编码</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3,根据DispatcherServlet配置相应的xml文件(这里应该为hello-servlet.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 使用注释的方法进行配置 -->
<context:component-scan base-package="ndy.quantgroup.controller"/>
<mvc:annotation-driven/>
<!-- 将静态文件指定到某个特殊的文件夹中统一处理 -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 引入jstl标签库 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<!-- 配置前缀和后缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 设置multipartResolver才能完成文件的上传 -->
<bean name="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"></property>
</bean>
<!-- 异常的处理 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="ndy.quantgroup.exception.UserException">error</prop>
<!-- 出现空指针异常时,跳转到error.jsp页面 -->
<prop key="java.lang.NullPointerException">error</prop>
<prop key="java.io.IOException">error</prop>
<prop key="java.lang.NoSuchMethodException">error</prop>
</props>
</property>
</bean>
</beans>
4,UserController.java
package ndy.quantgroup.controller;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import ndy.quantgroup.exception.UserException;
import ndy.quantgroup.model.User;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
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.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
/**
* @author nidayu
* @date 2014-12-9
* @Description xxx
* @version V1.0
*/
@Controller
@RequestMapping("/user")
public class UserController {
private Map<String, User> userMap = new HashMap<String, User>();
public UserController() {
userMap.put("ndy1", new User("ndy1", "123", "ndy", "1dayu.ni@quantgroup.cn"));
userMap.put("ndy2", new User("ndy2", "123", "ndy", "2dayu.ni@quantgroup.cn"));
userMap.put("ndy3", new User("ndy3", "123", "ndy", "3dayu.ni@quantgroup.cn"));
userMap.put("ndy4", new User("ndy4", "123", "ndy", "4dayu.ni@quantgroup.cn"));
userMap.put("ndy5", new User("ndy5", "123", "ndy", "5dayu.ni@quantgroup.cn"));
}
// 显示所有
@RequestMapping(value = "/users", method = RequestMethod.GET)
public String list(Model model) {
model.addAttribute("users", userMap);
return "user/list";
}
// 链接到add页面时,是get请求,会访问这段代码
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add(Model model) {
model.addAttribute(new User());
return "user/add";
}
// 在具体添加用户时,是post请求,会访问这段代码
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(@Validated User user, BindingResult br, @RequestParam("attachs")MultipartFile[] attachs, HttpServletRequest req) throws IOException {// 绑定的结果一定要紧跟验证的实体
if (br.hasErrors()) {
return "user/add";
}
String realPath = req.getSession().getServletContext().getRealPath("/resources/upload");
for (MultipartFile attach : attachs) {
if(attach.isEmpty()){
continue;
}
File f = new File(realPath + "/" + attach.getOriginalFilename());
FileUtils.copyInputStreamToFile(attach.getInputStream(), f);
System.out.println(attach.getName() + " " + attach.getOriginalFilename() + " " + attach.getContentType());
}
userMap.put(user.getUsername(), user);
// 客户端跳转
return "redirect:/user/users";
}
// 显示单条信息
@RequestMapping(value = "/{username}", method = RequestMethod.GET)
public String show(@PathVariable String username, Model model) {
model.addAttribute(userMap.get(username));
return "user/show";
}
// 显示单条信息,返回Json数据,例:http://localhost:8080/springmvc/user/ndy3?json
@RequestMapping(value = "/{username}", method = RequestMethod.GET, params = "json")
@ResponseBody
public User show(@PathVariable String username) {
return userMap.get(username);
}
// 修改
@RequestMapping(value = "/{username}/update", method = RequestMethod.GET)
public String update(@PathVariable String username, Model model) {
model.addAttribute(userMap.get(username));
return "user/update";
}
// 修改
@RequestMapping(value = "/{username}/update", method = RequestMethod.POST)
public String update(@Validated User user, BindingResult br, @PathVariable String username) {
if (br.hasErrors()) {
return "user/update";
}
userMap.put(username, user);
return "redirect:/user/users";
}
// 删除
@RequestMapping(value = "/{username}/delete", method = RequestMethod.GET)
public String delete(@PathVariable String username) {
userMap.remove(username);
return "redirect:/user/users";
}
// 删除
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(String username, String password, HttpSession session) {
if (!userMap.containsKey(username)) {
throw new UserException("用户名不存在");
}
User u = userMap.get(username);
if (!u.getPassword().equals(password)) {
throw new UserException("密码不正确");
}
session.setAttribute("user", u);
return "redirect:/user/users";
}
// 局部异常处理,仅仅只能处理这个控制器中的异常
// @ExceptionHandler(value={UserException.class})
// public String handleException(UserException ue, HttpServletRequest req){
// req.setAttribute("ue", ue);
// return "error";
// }
}
User.java
package ndy.quantgroup.model;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
/**
* @author nidayu
* @date 2014-12-9
* @Description xxx
* @version V1.0
*/
public class User {
private String username;
private String password;
private String nickname;
private String email;
public User() {
super();
}
public User(String username, String password, String nickname, String email) {
super();
this.username = username;
this.password = password;
this.nickname = nickname;
this.email = email;
}
@NotEmpty(message="用户名不能为空")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Size(min=6,max=18,message="密码长度应该为6到18个字符")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Email(message="邮箱格式不正确")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>用户列表</title>
<link rel="stylesheet" href="<%=request.getContextPath() %>/resources/css/main.css" type="text/css"></link>
</head>
<body>
<a href="add">添加</a>-->${user.nickname }
<br>
<c:forEach items="${users }" var="user">
<a href="${user.value.username }">${user.value.username }</a>----${user.value.password }
----${user.value.nickname }----${user.value.email }----
<a href="${user.value.username }/update">修改</a>
<a href="${user.value.username }/delete">删除</a><br>
</c:forEach>
</body>
</html>
add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'add.jsp' starting page</title>
</head>
<body>
<h1>添加用户</h1>
<sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
username:<sf:input path="username"/><sf:errors path="username"></sf:errors><br>
password:<sf:password path="password"/><sf:errors path="password"></sf:errors><br>
nickname:<sf:input path="nickname"/><br>
email:<sf:input path="email"/><sf:errors path="email"></sf:errors><br>
attach:<input type="file" name="attachs"/><input type="file" name="attachs"/><br>
<input type="submit" value="添加用户"/><a href="users">返回</a>
</sf:form>
</body>
</html>
show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'show.jsp' starting page</title>
</head>
<body>
username:${user.username }
<br> password:${user.password }
<br> nickname:${user.nickname }
<br> email:${user.email }
<br><a href="users">返回</a>
</body>
</html>
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'update.jsp' starting page</title>
</head>
<body>
<h1>修改用户</h1>
<sf:form method="post" modelAttribute="user">
username:<sf:input path="username"/><sf:errors path="username"></sf:errors><br>
password:<sf:password path="password"/><sf:errors path="password"></sf:errors><br>
nickname:<sf:input path="nickname"/><br>
email:<sf:input path="email"/><sf:errors path="email"></sf:errors><br>
<input type="submit" value="修改用户"/><a href="../users">返回</a>
</sf:form>
</body>
</html>
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'login.jsp' starting page</title>
</head>
<body>
<form action="user/login" method="post">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="登陆">
</form>
</body>
</html>
直接访问路径
http://localhost:8080/springmvc/login.jsp
或http://localhost:8080/springmvc/user/users即可