初学springmvc

这里用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即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值