您的位置:首页 > 编程语言 > Java开发

SpringMVC(一)

2016-07-11 21:25 507 查看
SpringMVC
1.结构最清晰的MVC Model2实现
2.Controller
3.ModeAndView

处理请求流程:



框架模型:



特点:
1.清晰划分角色
2.灵活的配置功能
3.提供大量的控制器接口和实现类
4.与真正的View层实现无关(JSP,Velocity,Xslt等)
5.国际化支持
6.面向接口编程
7.Spring提供了Web应用开发的一整套流程,不仅是MVC,他们之间可以很方便的结合一起

步骤:
1.添加jar包
2.编写配置文件及其代码
a.web.xml
b.dispatherService-servlet.xml(SpringMVC的配置文件)
c.controller等代码实现
范例:
1.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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SpringMVCDemo1_ivy</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<!-- 配置SpringMVC拦截器(servlet) -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置文件的路径 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
<!-- classpath前缀名字与servlet-name一致 -->
<param-value>classpath:SpringMVC-servlet.xml</param-value>
</init-param>
<!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
<load-on-startup>1</load-on-startup>

</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>


2.SpringMVC的配置文件
a1.默认:BeanNameUrlHandlerMapping -- SpringMVC-servlet.xml

<?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:aop="http://www.springframework.org/schema/aop"
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.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
<!-- 配置SpringMVC url地址映射 -->
<!-- 配置hanldelMapping指定以何种方式实现映射 -->
<!-- 1.默认:BeanNameUrlHandlerMapping -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

<!-- 配置指定的Controller -->
<bean name="/hello" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图解释的前缀名称 -->
<!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
<property name="prefix" value="/"></property>
<!-- 视图解析的后缀名称 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>


a2.默认:BeanNameUrlHandlerMapping可省略不写 -- SpringMVC-servlet.xml

<?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:aop="http://www.springframework.org/schema/aop"
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.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
<!-- 配置SpringMVC url地址映射 -->
<!-- 配置hanldelMapping指定以何种方式实现映射 -->
<!-- 1.默认:BeanNameUrlHandlerMapping -->
<!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> -->

<!-- 配置指定的Controller -->
<bean name="/hello" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图解释的前缀名称 -->
<!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
<property name="prefix" value="/"></property>
<!-- 视图解析的后缀名称 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>


a3.常见: ControllerClassNameHandlerMapping -- SpringMVC-servlet.xml

<?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:aop="http://www.springframework.org/schema/aop"
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.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
<!-- 配置SpringMVC url地址映射 -->
<!-- 配置hanldelMapping指定以何种方式实现映射 -->
<!-- 2.常见: ControllerClassNameHandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>

<!-- 配置指定的Controller -->
<bean name="/hello" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图解释的前缀名称 -->
<!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
<property name="prefix" value="/"></property>
<!-- 视图解析的后缀名称 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>


a3.常见: ControllerClassNameHandlerMapping,name属性不写 -- SpringMVC-servlet.xml

<?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:aop="http://www.springframework.org/schema/aop"
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.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
<!-- 配置SpringMVC url地址映射 -->
<!-- 配置hanldelMapping指定以何种方式实现映射 -->
<!-- 2.常见: ControllerClassNameHandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>

<!-- 配置指定的Controller -->
<bean class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图解释的前缀名称 -->
<!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
<property name="prefix" value="/"></property>
<!-- 视图解析的后缀名称 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>


a4.常见: ControllerClassNameHandlerMapping,name="/test" -- SpringMVC-servlet.xml

<?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:aop="http://www.springframework.org/schema/aop"
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.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
<!-- 配置SpringMVC url地址映射 -->
<!-- 配置hanldelMapping指定以何种方式实现映射 -->
<!-- 2.常见: ControllerClassNameHandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>

<!-- 配置指定的Controller -->
<bean name="/test" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图解释的前缀名称 -->
<!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
<property name="prefix" value="/"></property>
<!-- 视图解析的后缀名称 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>


★★注意:当用了ControllerClassNameHandlerMapping时,页面找到的是Controller类,与name属性无关
1.hello(后缀没有controller),那么SpringMVC会自动补全
2.helloController,SpringMVC会先寻找是否有匹配的controller类,再自动显示页面

3.controller包
a.HelloController

package com.Elastic.SpringMVCDemo1.ivy.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

//相当于struts中的Action,用于接收用户的请求并响应结果
public class HelloController extends AbstractController{

// 相当于struts中的execute
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("进入了HelloController");

// 返回模型和试图
/*设置响应请求对应的页面
参数hello是一个逻辑视图名称
通过视图解析器指定真正的页面
*/
return new ModelAndView("jsp/hello");
}

}


HandlerMapping:
a.BeanNameUrlHandlerMapping
根据控制器Bean的名字将控制器映射到URL
b.ControllerBeanNameHandlerMapping
c.ControllerClassNameHandlerMapping
d.SimpleUrlHandlerMapping
e.DefaultAnnotationHandlerMapping
将请求映射给使用@RequestMapping注解的控制器和控制方法

视图解析器:
1.将逻辑视图的名字与JSP等视图技术进行匹配
2.InternalResourceViewResolver
a.在Web应用程序的WAR文件中查找视图模板,视图模板的路径根据加完前缀和后缀的逻辑视图名称来确定
b.prefix
c.suffix
范例:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>


使用SpringMVC实现登录功能
1.步骤:
1).controller类继承AbstractController重写handleRequestInternal方法
2).通过request获取参数
3).判断用户登录是否成功

范例:

public class LoginController extends AbstractController {

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String name = request.getParameter("loginName");
String pass = request.getParameter("loginPass");
if (name.equals("admin") && pass.equals("123456")) {
return new ModelAndView("index");
}
return new ModelAndView("error");
}

}


2.优化登陆
1)Spring提供了多功能控制器和地址解析器来处理
a.MultiActionController
a.支持多请求处理
b.可以自定义处理请求的方法
c.语法:public ModelAndView actionName(HttpServletRequest request, HttpServletResponse response, [,HttpSession session] [,AnyObject]);
actionName: 请求的方法名,可以和URL地址对应
request: 自动注入的HttpServletRequest对象
response: 自动注入的HttpServletResponse对象
session: 自动注入的HttpSession对象,可选参数
AnyObject: 可选参数,一般用于参数注入
b.InternalPathMethodNameResolver
c.ParameterMethodNameResolver

2)编写UserController -- 继承MultiActionController
范例:

public class UserController extends MultiActionController {

public ModelAndView login(HttpServletRequest request,
HttpServletResponse response) {
//绑定请求的参数到user对象中,表单元素:<input name="name">对应user中的name属性
User user = (User) newCommandObject(User.class);
bind(request, user);
// 省略登录部分代码
……
}
}


3)使用默认设置配置bean
范例:

     <!-- SpringMVC默认的地址映射,可以省略 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

<!-- MultiActionController默认使用InternalPathMethodNameResolver映射Controller中的方法,可以省略 -->
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"></bean>

<!-- 对应Controller中的login方法 -->
<bean name="/login" class="com.xuetang9.demo.controller.UserController">
<property name="methodNameResolver" ref="methodNameResolver"></property>
</bean>


4)使用SimpleUrlHandlerMapping映射
a.映射Controller
b.映射Controller中的方法
范例:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- 以/user/开头的URL地址都访问id为userController的控制器,*--指定Controller中需要调用的方法 -->
<prop key="/user/*">userController</prop>
</props>
</property>
</bean>

<bean id="userController" class="com.xuetang9.demo.controller.UserController"></bean>


5)实现服务器端的验证
a.SpringMVC提供的Validator接口来实现验证
1.编写实现Validator接口验证器代码
2.注入验证器到MultiActionController中的validators属性中
b.实现自定义验证器
1.验证器中的方法
a.重写supports方法 -- 检查验证器是否匹配需要验证的实体
b.重写validate(Object target, Errors errors)方法 -- 实现验证逻辑
范例:

public class UserValidator implements Validator {

//用于SpringMVC检查是否是指定类型的验证器
//返回true执行后续验证,返回false跳过验证
@Override
public boolean supports(Class<?> clazz) {
return clazz == User.class;
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;    //需要验证的对象需要强转类型
/*
Spring提供用于非空验证的工具类
4个参数依次是:
保存验证信息的对象,验证的字段名, 验证信息的键值,验证信息的内容
*/
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name",
"name.required", "用户名不能为空");
ValidationUtils.rejectIfEmpty(errors, "pass", "pass.required", "密码不能为空");
if (user.getPass().length() < 6 || user.getPass().length() > 12) {
//将验证信息放入到errors对象中
errors.rejectValue("pass", "pass.length", "密码长度必须在6-12位之间");
}
}
}


2.注入验证器
a.将验证器注入到Controller -- Validators是一个数组
范例:

         <!-- 配置验证器 -->
<bean id="userValidator" class="com.xuetang9.demo.validator.UserValidator"></bean>

<!-- 配置Controller-->
<bean id="userController" class="com.xuetang9.demo.controller.UserController">
<property name="validators">
<list>
<!-- 注入验证器 -->
<ref bean="userValidator"/>
</list>
</property>
</bean>


6)显示错误验证信息
1.处理绑定异常
范例:

User user = (User) newCommandObject(User.class);
try {
bind(request, user);
} catch (ServletRequestBindingException e) {
BindException bindException = (BindException) e.getCause();
return new ModelAndView("login").addAllObjects(bindException.getModel());
}


2.页面使用SpringMVC标签显示错误信息 -- 引入spring表单标签
a.<%@ taglib uri="http://www.springframework.org/tags/form" prefix="fm" %>
b.使用spring的form标签创建提交的表单
c.使用errors标签显示验证信息
范例:

<fm:form action="user/login" method="post">
<input name="name" type="text">
<fm:errors path="name"></fm:errors>
<input name="pass" type="password">
<fm:errors path="pass"></fm:errors>
<input type="submit" value="登陆">
</fm:form>


范例:
1.entity包
a.User

package com.Elastic.SpringMVCDemo1.ivy.entity;

import java.io.Serializable;

public class User implements Serializable {
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}

}


2.controller包
a.UserController

package com.Elastic.SpringMVCDemo1.ivy.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.Elastic.SpringMVCDemo1.ivy.entity.User;

public class UserController extends MultiActionController {
public ModelAndView login(HttpServletRequest request, HttpServletResponse response,User user) {
System.out.println("登录功能");
System.out.println(user.getName());
return new ModelAndView("index");
}

public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
System.out.println("注册功能");
System.out.println(user.getName());
return new ModelAndView("index");
}
}


a1.添加对象外的属性 -- UserController

package com.Elastic.SpringMVCDemo1.ivy.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.Elastic.SpringMVCDemo1.ivy.entity.User;

public class UserController extends MultiActionController {
private User user;
private String code;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public ModelAndView login(HttpServletRequest request, HttpServletResponse response, UserController controller) {
System.out.println("登录功能");
System.out.println(this.hashCode());
System.out.println(controller.hashCode());
System.out.println(controller.code);
System.out.println(controller.user.getName());
return new ModelAndView("index");
}

public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
System.out.println("注册功能");
System.out.println(user.getName());
return new ModelAndView("index");
}
}


a2.添加对象外的属性(手动绑定参数) -- UserController

package com.Elastic.SpringMVCDemo1.ivy.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.Elastic.SpringMVCDemo1.ivy.entity.User;

public class UserController extends MultiActionController {
private User user;
private String code;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public ModelAndView login(HttpServletRequest request, HttpServletResponse response) {
//手动绑定参数
try {
this.bind(request, this);

} catch (Exception e) {
e.printStackTrace();
}
System.out.println("登录功能");
System.out.println(this.hashCode());
//        System.out.println(controller.hashCode());
System.out.println(this.code);
System.out.println(user.getName());
return new ModelAndView("index");
}

public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
System.out.println("注册功能");
System.out.println(user.getName());
return new ModelAndView("index");
}
}


a3.添加对象外的属性(两次调用bind()方法) -- UserController

package com.Elastic.SpringMVCDemo1.ivy.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.Elastic.SpringMVCDemo1.ivy.entity.User;

public class UserController extends MultiActionController {
private User user;
private String code;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public ModelAndView login(HttpServletRequest request, HttpServletResponse response) {
//手动绑定参数
try {
this.bind(request, this);
user = new User();
this.bind(request, user);

} catch (Exception e) {
e.printStackTrace();
}
System.out.println("登录功能");
System.out.println(this.hashCode());
//        System.out.println(controller.hashCode());
System.out.println(this.code);
System.out.println(this.user.getName());
return new ModelAndView("index");
}

public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
System.out.println("注册功能");
System.out.println(user.getName());
return new ModelAndView("index");
}
}


a4.

package com.Elastic.SpringMVCDemo1.ivy.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import com.Elastic.SpringMVCDemo1.ivy.entity.User;

public class UserController extends MultiActionController implements Validator{
private User user;
private String code;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception{
//手动绑定参数
try {
this.bind(request, this);
//捕获绑定异常
} catch (ServletRequestBindingException e) {
BindException bindException = (BindException) e.getCause();
System.out.println(bindException);
//方法一
//            return new ModelAndView("login",bindException.getModel());
//方法二
ModelAndView mv = new ModelAndView();
mv.setViewName("login");
mv.addAllObjects(bindException.getModel());
return mv;
}
System.out.println("登录功能");
System.out.println(this.hashCode());
System.out.println(user.getName());
System.out.println(this.code);
return new ModelAndView("index");
}

public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
System.out.println("注册功能");
System.out.println(user.getName());
return new ModelAndView("index");
}

@Override
public boolean supports(Class<?> clazz) {
return clazz == this.getClass();
}

@Override
public void validate(Object target, Errors errors) {
UserController userController = (UserController) target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "code", null, "验证码必填");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "user.name", null, "用户名必填");
ValidationUtils.rejectIfEmpty(errors, "user.pass", null, "密码必填");

}
}


3.动态工程的配置文件
a1.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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SpringMVCDemo1_ivy</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<!-- 配置SpringMVC拦截器(servlet) -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置文件的路径 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
<!-- classpath前缀名字与servlet-name一致 -->
<param-value>classpath:SpringMVC-servlet.xml</param-value>
</init-param>
<!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
<load-on-startup>1</load-on-startup>

</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>


a2.验证 -- 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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SpringMVCDemo1_ivy</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- 配置Spring的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 配置SpringMVC拦截器(servlet) -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置文件的路径 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
<!-- classpath前缀名字与servlet-name一致 -->
<param-value>classpath:SpringMVC-servlet.xml</param-value>
</init-param>
<!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
<load-on-startup>1</load-on-startup>

</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>


4.SpringMVC的配置文件
a1.SimpleUrl映射 -- SpringMVC-servlet.xml

<?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:aop="http://www.springframework.org/schema/aop"
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.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
<!-- 配置SpringMVC url地址映射 -->
<!-- 配置hanldelMapping指定以何种方式实现映射 -->
<!-- 3.controller类中有多个方法:SimpleUrl映射 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/user/*">userController</prop>
</props>
</property>
</bean>

<!-- 配置指定的Controller -->
<!-- login:UserController的方法 -->
<!-- <bean name="/login" class="com.Elastic.SpringMVCDemo1.ivy.controller.UserController"></bean> -->
<bean id="userController" name="/login" class="com.Elastic.SpringMVCDemo1.ivy.controller.UserController"></bean>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图解释的前缀名称 -->
<!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
<property name="prefix" value="/"></property>
<!-- 视图解析的后缀名称 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>


5.Spring的配置文件
a.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd"> 
</beans>


6.jsp
a.login.jsp

<%--引入JSP页面PAGE指令 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- 引入JSTL标签指令 --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html language="zh-CN">
<head>
<meta charset="utf-8">
<!-- 设置浏览器渲染的引擎  -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 设置支持移动设备  -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>网页标题</title>
<!-- 引入bootstrap的样式 -->
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="panel panel-primary center-block">
<div class="panel-heading">登录</div>
<div class="panel-body">
<form class="form-horizontal" action="user/login" method="post">
<div class="form-group">
<label class="col-md-3 control-label" for="loginName">用户名:</label>
<div class="col-md-6" >
<input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/>
</div>
<div class="col-md-3">
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="loginPass">密码:</label>
<div class="col-md-6" >
<input class="form-control" id="loginPass" name="pass" type="password"/>
</div>
<div class="col-md-3">

</div>
</div>

<div class="form-group">
<div class="col-md-offset-3 col-md-6">
<input class="btn btn-primary btn-block" type="submit" value="登录" />
</div>
</div>
</form>
</div>
</div>
</div>

<!-- 引入JS的样式  -->
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>

</body>
</html>


a2.调用两次bind()方法 -- login.jsp

<%--引入JSP页面PAGE指令 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- 引入JSTL标签指令 --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html language="zh-CN">
<head>
<meta charset="utf-8">
<!-- 设置浏览器渲染的引擎  -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 设置支持移动设备  -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>网页标题</title>
<!-- 引入bootstrap的样式 -->
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="panel panel-primary center-block">
<div class="panel-heading">登录</div>
<div class="panel-body">
<form class="form-horizontal" action="user/login" method="post">
<div class="form-group">
<label class="col-md-3 control-label" for="loginName">用户名:</label>
<div class="col-md-6" >
<input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/>
</div>
<div class="col-md-3">
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="loginPass">密码:</label>
<div class="col-md-6" >
<input class="form-control" id="loginPass" name="pass" type="password"/>
</div>
<div class="col-md-3">

</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="code">验证码:</label>
<div class="col-md-6" >
<input class="form-control" id="code" name="code" type="text"/>
</div>
<div class="col-md-3">

</div>
</div>

<div class="form-group">
<div class="col-md-offset-3 col-md-6">
<input class="btn btn-primary btn-block" type="submit" value="登录" />
</div>
</div>
</form>
</div>
</div>
</div>

<!-- 引入JS的样式  -->
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>

</body>
</html>


a3.Spring标签 -- login.jsp

<%--引入JSP页面PAGE指令 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- 引入JSTL标签指令 --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%-- 引入Spring标签指令 --%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="fm" %>
<!DOCTYPE html>
<html language="zh-CN">
<head>
<meta charset="utf-8">
<!-- 设置浏览器渲染的引擎  -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 设置支持移动设备  -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>网页标题</title>
<!-- 引入bootstrap的样式 -->
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="panel panel-primary center-block">
<div class="panel-heading">登录</div>
<div class="panel-body">
<fm:form action="user/login" method="post">
<div class="form-group">
<label class="col-md-3 control-label" for="loginName">用户名:</label>
<div class="col-md-6" >
<input class="form-control" id="loginName" name="user.name" type="text" autocomplete="off"/>
</div>
<div class="col-md-3">
<fm:errors path="user.name"></fm:errors>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="loginPass">密码:</label>
<div class="col-md-6" >
<input class="form-control" id="loginPass" name="user.pass" type="password"/>
</div>
<div class="col-md-3">
<fm:errors path="user.pass"></fm:errors>
</div>
</div>
<div class="form-group">
<label class="col-md-3 control-label" for="code">验证码:</label>
<div class="col-md-6" >
<input class="form-control" id="code" name="code" type="text"/>
</div>
<div class="col-md-3">
<fm:errors path="code"></fm:errors>
</div>
</div>

<div class="form-group">
<div class="col-md-offset-3 col-md-6">
<input class="btn btn-primary btn-block" type="submit" value="登录" />
</div>
</div>
</fm:form>
</div>
</div>
</div>

<!-- 引入JS的样式  -->
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>

</body>
</html>


b.reg.jsp

<?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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SpringMVCDemo1_ivy</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<!-- 配置SpringMVC拦截器(servlet) -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置文件的路径 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
<!-- classpath前缀名字与servlet-name一致 -->
<param-value>classpath:SpringMVC-servlet.xml</param-value>
</init-param>
<!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
<load-on-startup>1</load-on-startup>

</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: