spring3.2-core
spring3.2-web
User.java
package pojo;
public class User {
private String userName;
private String pwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [userName=" + userName + ", pwd=" + pwd + "]";
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>springMVCdemo</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
spring-mvc.xml
(1)
<context:component-scan>详解:https://www.cnblogs.com/fightingcoding/p/component-scan.html
默认情况下,<context:component-scan>查找使用构造型(stereotype)注解所标注的类,如@Component(组件),@Service(服务),@Controller(控制器),@Repository(数据仓库)。
(2)
<mvc:annotation-driven>注解的作用:https://www.cnblogs.com/helloup/articles/6736127.html
<mvc:annotation-driven>会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能。
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"
>
<!-- ——————————————————————————————————————————————————————————————————————————基本配置——————————————————————————————————————————————————————————————————————— -->
<!-- 添加控制器信息 -->
<!-- <bean name="/userController.action" class="controller.UserController" /> -->
<!-- 声明 BeanNameUrlHandlerMapping,使用名称映射-->
<!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> -->
<!-- 扫描包中的被构造型注解所标记的类,取代了上面的控制器信息加上名称映射 -->
<context:component-scan base-package="controller"></context:component-scan>
<!-- <bean class="org.springframework.web.servlet.mvc.annotation. DefaultAnnotationHandlerMapping "></bean>
<bean class="org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter "></bean> -->
<!-- 基于annotation-driven的注解,取代了上面的两个bean -->
<mvc:annotation-driven />
<!-- 支持servlet与jsp视图解析,可进行进一步处理,此步可省略, -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 可以加前缀或后缀 -->
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>index</title>
</head>
<body>
<form action="userController/save.action" method="post">
姓名:<input name="userName" type="text"/><br>
密码:<input name="pwd" type="password"/><br>
<input type="submit"/>
</form>
</body>
ModelMap和ModelAndView的作用:https://blog.csdn.net/baple/article/details/16876979
userController.java
package controller;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
import pojo.User;
@Controller
@RequestMapping("/userController")
@SessionAttributes("user")/*将ModelMap里的属性"user"装进session(该注解用于所有方法所共享的属性)*/
public class UserController{
/*
* 如何获取request,session,application
* 下边是其中的方式之一。
*/
@Autowired
ServletContext appliContext;
/*返回ModelAndView*/
/*ModelMap:将其属性装进request里*/
@RequestMapping("/save")
public ModelAndView fromRequest(User user,ModelMap map){
System.out.println("save:"+user);
map.addAttribute("user", user);
return new ModelAndView("forward:/WEB-INF/view/user.jsp");
}
/*返回String*/
/*@ModelAttribute("user"):将session里的属性"user"装进ModelMap即request*/
@RequestMapping("/update")
public String fromSession(@ModelAttribute("user")User user){
System.out.println("update:"+user);
user.setUserName("adm");
return "forward:/WEB-INF/view/user.jsp";
}
}
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>user</title>
</head>
<body>
ModelMap:将其属性"user"装进request里: ${requestScope.user}<br>
将ModelMap里的属性"user"装进session: ${sessionScope.user}<br>
<a href="/springMVCdemo/userController/update.action">将session中的属性"user"装进ModelMap</a>
</body>
</html>