一、需要的jar包
二、编写web.xml容器
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!--
注册web容器启动时负责加载spring mvc的中央控制器
DispatcherServlet
功能1 : DispatcherServlet初始化之后,根据其提供的名为contextConfigLocation初始化参数
加载spring-mvc的配置文件【ioc容器】
功能2 : 为spring-mvc设置其允许处理的请求格式
-->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>com.etoak.util.MyDispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- /WEB-INF/[servlet-name]-servlet.xml -->
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
三、applicationContext.xml容器配置,配置为自动扫描
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!--
请求解析器
spring-mvc为解析请求提供了两种请求解析器 :
字符请求解析器
HandlerMapping接口
实现类中提供了两个默认的请求解析器 :
BeanNameUrlHandlerMapping - 非注解环境
DefaultAnnotationHandlerMapping - 注解环境
字节请求解析器
MultipartResolver接口
解析完请求,获取表示请求的字符串 "/hello.do" 或者 "/hello"
-->
<context:component-scan base-package="com"/>
<!--
请求解析完毕之后,会在ioc容器中查找一个请求处理器处理 "/hello"
1 请求处理器 implements Controller
2 将处理器配置在ioc容器中 bean
@Controller
被该注解标注了之后,会自动实现Controller接口,成为spring-mvc请求处理器
-->
</beans>
四、覆盖中央处理器对编码格式进行规范
package com.etoak.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.DispatcherServlet;
public class MyDispatcherServlet extends DispatcherServlet {
@Override
protected void doService(HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
super.doService(request, response);
}
}
五、编写简单UserBean
package com.etoak.bean;
public class User {
private String loginname;
private String password;
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
六、编写controller
package com.etoak.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
import com.etoak.bean.User;
/**
* 业务逻辑对象 [请求处理器]
* servlet - XxServlet com.etoak.servlet
* struts - XxAction com.etoak.action
* spring-mvc - XxController com.etoak.controller
*
*/
@Controller
@SessionAttributes({"address"})
public class HelloController {
/** 请求 "/hello" 和处理方法 hello() 之间的映射关系
* @RequestMapping(path)
* 该注解用于标注请求处理器中的一个方法
* 使用被标注的方法处理path指向的请求
*/
@RequestMapping("/hello")
public String hello(){
System.out.println("处理客户端提交的hello.do请求");
/**
* 为客户端返回 'success.jsp'视图
* 重定向 redirect
* 转发 forward
*/
return "redirect:success.jsp";
// return "forward:/success.jsp";
}
/**
* 使用一个第三方的javaBean封装请求中的表单项
* 表单项封装完毕之后,会将封装表单项的javaBean添加到request范围中
* *** spring-mvc提供了特殊的封装方式 :
* 当提交请求中的表单项有且只有一个;并且该表单项的类型为基本数据类型或者String类型时
* 直接在处理请求方法的第一个参数中对表单项进行封装!
*/
@RequestMapping("/login")
public String login(User user , ModelMap map){
// 使用User类型的user封装当前请求中的表单项
String loginname = user.getLoginname();
/*try {
loginname = new String(loginname.getBytes("iso-8859-1") , "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
System.out.println("loginname--"+loginname);
System.out.println("password--"+user.getPassword());
// List request
String address = "趵突泉北路";
map.put("address", address);
/**
* 直接调用ModelMap.put(key,value)添加一条数据
* 默认 将该数据存储在request范围中
*/
return "redirect:success.jsp";
}
@RequestMapping("/delUserById") // id 1
public String delUserById(Integer id){
// 定义和表单项匹配的参数
System.out.println("id---"+id);
return "forward:success.jsp";
}
/*
@RequestMapping("/hello")
public ModelAndView hello2(){
//return
}
*/
}
七、编写index.jsp,login.jsp,success.jsp三个页面,分别为
(1)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>spring-mvc请求处理基本流程</title>
</head>
<body>
<a href="hello.do">helloworld</a>
</body>
</html>
(2)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>spring-mvc表单项封装</title>
</head>
<body>
<form action="login.do" method="post">
登录名:<input type="text" name="loginname"/><br/>
密码:<input type="password" name="loginname"/><br/>
<input type="submit" value="登录"/>
</form>
<a href="delUserById.do?id=1">删除</a>
</body>
</html>
(3)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>成功视图</title>
</head>
<body>
请求处理完毕!
获取loginname password值?
<%
String loginname = request.getParameter("loginname");
%>
${param.loginname }
<br/>
${requestScope.user.loginname }
${requestScope.address }
${sessionScope.address }
</body>