zoukankan      html  css  js  c++  java
  • SpringMVC(一)

    SpringMVC

    Spring 提供的构建 Web 应用程序的全功能 MVC 模块,从而在使用Spring进行WEB开发时,可以选择使用 Spring 的 Spring MVC 框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。    

    处理请求流程:

     特点:

    1、清晰的角色划分。

    2、和Spring 其他框架无缝集成,是其它Web框架所不具备的。

    3、面向接口编程。

    4、本地化、主题的解析的支持,利于国际化和主题的切换。

    5、强大的JSP标签库,使JSP编写更容易,与真正的View层实现无关。 

    6、还有比如RESTful风格的支持。

    7、约定大于配置的契约式编程支持,基于注解的零配置支持,灵活的配置功能。

        
    步骤:
        1.添加jar包
        2.编写配置文件及其代码
            a.web.xml
            b.dispatherService-servlet.xml(SpringMVC的配置文件)
            c.controller等代码实现
        范例:
        1.web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2     <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">
     3       <display-name>SpringMVCDemo1_ivy</display-name>
     4       <welcome-file-list>
     5         <welcome-file>index.html</welcome-file>
     6         <welcome-file>index.htm</welcome-file>
     7         <welcome-file>index.jsp</welcome-file>
     8         <welcome-file>default.html</welcome-file>
     9         <welcome-file>default.htm</welcome-file>
    10         <welcome-file>default.jsp</welcome-file>
    11       </welcome-file-list>
    12       
    13       <!-- 配置SpringMVC拦截器(servlet) -->
    14       <servlet>
    15         <servlet-name>SpringMVC</servlet-name>
    16         <!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
    17         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    18         <!-- 指定SpringMVC配置文件的路径 -->
    19         <init-param>
    20             <param-name>contextConfigLocation</param-name>
    21             <!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
    22             <!-- classpath前缀名字与servlet-name一致 -->
    23             <param-value>classpath:SpringMVC-servlet.xml</param-value>
    24         </init-param>
    25         <!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
    26         <load-on-startup>1</load-on-startup>
    27         
    28       </servlet>
    29       <servlet-mapping>
    30         <servlet-name>SpringMVC</servlet-name>
    31         <!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
    32         <url-pattern>/</url-pattern>
    33       </servlet-mapping>
    34     </web-app>


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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2     <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     7         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     8         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
     9 
    10     <!-- 配置SpringMVC url地址映射 -->
    11     <!-- 配置hanldelMapping指定以何种方式实现映射 -->
    12     <!-- 1.默认:BeanNameUrlHandlerMapping -->
    13     <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    14 
    15     <!-- 配置指定的Controller -->
    16     <bean name="/hello" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>
    17 
    18     <!-- 配置视图解析器 -->
    19     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    20         <!-- 视图解释的前缀名称 -->
    21         <!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
    22         <property name="prefix" value="/"></property>
    23         <!-- 视图解析的后缀名称 -->
    24         <property name="suffix" value=".jsp"></property>
    25     </bean>
    26     </beans>

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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2     <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     7         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     8         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
     9 
    10     <!-- 配置SpringMVC url地址映射 -->
    11     <!-- 配置hanldelMapping指定以何种方式实现映射 -->
    12     <!-- 1.默认:BeanNameUrlHandlerMapping -->
    13     <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> -->
    14 
    15     <!-- 配置指定的Controller -->
    16     <bean name="/hello" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>
    17 
    18     <!-- 配置视图解析器 -->
    19     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    20         <!-- 视图解释的前缀名称 -->
    21         <!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
    22         <property name="prefix" value="/"></property>
    23         <!-- 视图解析的后缀名称 -->
    24         <property name="suffix" value=".jsp"></property>
    25     </bean>
    26     </beans>    


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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2     <beans xmlns="http://www.springframework.org/schema/beans"
     3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4         xmlns:aop="http://www.springframework.org/schema/aop"
     5         xmlns:mvc="http://www.springframework.org/schema/mvc"
     6         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     7             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     8             http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
     9 
    10         <!-- 配置SpringMVC url地址映射 -->
    11         <!-- 配置hanldelMapping指定以何种方式实现映射 -->
    12         <!-- 2.常见: ControllerClassNameHandlerMapping -->
    13         <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
    14         
    15         <!-- 配置指定的Controller -->
    16         <bean name="/hello" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>
    17         
    18         <!-- 配置视图解析器 -->
    19         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    20             <!-- 视图解释的前缀名称 -->
    21             <!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
    22             <property name="prefix" value="/"></property>
    23             <!-- 视图解析的后缀名称 -->
    24             <property name="suffix" value=".jsp"></property>
    25         </bean>
    26     </beans>


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

     1  <?xml version="1.0" encoding="UTF-8"?>
     2     <beans xmlns="http://www.springframework.org/schema/beans"
     3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4         xmlns:aop="http://www.springframework.org/schema/aop"
     5         xmlns:mvc="http://www.springframework.org/schema/mvc"
     6         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     7             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     8             http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
     9 
    10         <!-- 配置SpringMVC url地址映射 -->
    11         <!-- 配置hanldelMapping指定以何种方式实现映射 -->
    12         <!-- 2.常见: ControllerClassNameHandlerMapping -->
    13         <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
    14         
    15         <!-- 配置指定的Controller -->
    16         <bean class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>
    17         
    18         <!-- 配置视图解析器 -->
    19         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    20             <!-- 视图解释的前缀名称 -->
    21             <!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
    22             <property name="prefix" value="/"></property>
    23             <!-- 视图解析的后缀名称 -->
    24             <property name="suffix" value=".jsp"></property>
    25         </bean>
    26     </beans>

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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2     <beans xmlns="http://www.springframework.org/schema/beans"
     3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4         xmlns:aop="http://www.springframework.org/schema/aop"
     5         xmlns:mvc="http://www.springframework.org/schema/mvc"
     6         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     7             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     8             http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
     9 
    10         <!-- 配置SpringMVC url地址映射 -->
    11         <!-- 配置hanldelMapping指定以何种方式实现映射 -->
    12         <!-- 2.常见: ControllerClassNameHandlerMapping -->
    13         <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
    14         
    15         <!-- 配置指定的Controller -->
    16         <bean name="/test" class="com.Elastic.SpringMVCDemo1.ivy.controller.HelloController"></bean>
    17         
    18         <!-- 配置视图解析器 -->
    19         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    20             <!-- 视图解释的前缀名称 -->
    21             <!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
    22             <property name="prefix" value="/"></property>
    23             <!-- 视图解析的后缀名称 -->
    24             <property name="suffix" value=".jsp"></property>
    25         </bean>
    26     </beans>


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

     1 package com.Elastic.SpringMVCDemo1.ivy.controller;
     2 
     3     import javax.servlet.http.HttpServletRequest;
     4     import javax.servlet.http.HttpServletResponse;
     5 
     6     import org.springframework.web.servlet.ModelAndView;
     7     import org.springframework.web.servlet.mvc.AbstractController;
     8 
     9     //相当于struts中的Action,用于接收用户的请求并响应结果
    10     public class HelloController extends AbstractController{
    11 
    12         // 相当于struts中的execute
    13         @Override
    14         protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    15             System.out.println("进入了HelloController");
    16             
    17             // 返回模型和试图
    18             /*设置响应请求对应的页面
    19             参数hello是一个逻辑视图名称
    20             通过视图解析器指定真正的页面
    21             */
    22             return new ModelAndView("jsp/hello");
    23         }
    24 
    25     }


    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    
        范例:

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

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

     1 public class LoginController extends AbstractController {
     2 
     3         @Override
     4         protected ModelAndView handleRequestInternal(HttpServletRequest request,
     5                 HttpServletResponse response) throws Exception {
     6             String name = request.getParameter("loginName");
     7             String pass = request.getParameter("loginPass");
     8             if (name.equals("admin") && pass.equals("123456")) {
     9                 return new ModelAndView("index");
    10             }
    11             return new ModelAndView("error");
    12         }
    13 
    14 }


        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
            范例:  

     1 public class UserController extends MultiActionController {
     2     
     3             public ModelAndView login(HttpServletRequest request,
     4                     HttpServletResponse response) {
     5                 //绑定请求的参数到user对象中,表单元素:<input name="name">对应user中的name属性
     6                 User user = (User) newCommandObject(User.class);
     7                 bind(request, user);
     8                 // 省略登录部分代码
     9                 ……
    10             }
    11   }


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

     1      <!-- SpringMVC默认的地址映射,可以省略 -->
     2         <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
     3         
     4         <!-- MultiActionController默认使用InternalPathMethodNameResolver映射Controller中的方法,可以省略 -->
     5         <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"></bean>
     6         
     7         <!-- 对应Controller中的login方法 -->
     8         <bean name="/login" class="com.xuetang9.demo.controller.UserController">
     9             <property name="methodNameResolver" ref="methodNameResolver"></property>
    10         </bean>


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

     1 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     2             <property name="mappings">
     3                 <props>
     4                     <!-- 以/user/开头的URL地址都访问id为userController的控制器,*--指定Controller中需要调用的方法 -->
     5                     <prop key="/user/*">userController</prop>
     6                 </props>
     7             </property>
     8 </bean>
     9 
    10 <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)方法 -- 实现验证逻辑
                    范例:              

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

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

     1          <!-- 配置验证器 -->
     2                 <bean id="userValidator" class="com.xuetang9.demo.validator.UserValidator"></bean>
     3 
     4                 <!-- 配置Controller-->
     5                 <bean id="userController" class="com.xuetang9.demo.controller.UserController">
     6                     <property name="validators">
     7                         <list>
     8                             <!-- 注入验证器 -->
     9                             <ref bean="userValidator"/>
    10                         </list>
    11                     </property>
    12                 </bean>


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

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


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

    1                 <fm:form action="user/login" method="post">
    2                     <input name="name" type="text">
    3                     <fm:errors path="name"></fm:errors>
    4                     <input name="pass" type="password">
    5                     <fm:errors path="pass"></fm:errors>
    6                     <input type="submit" value="登陆">
    7                 </fm:form>

    范例:
    1.entity包
    a.User

     1 package com.Elastic.SpringMVCDemo1.ivy.entity;
     2 
     3 import java.io.Serializable;
     4 
     5 public class User implements Serializable {
     6     private String name;
     7     private String pass;
     8     public String getName() {
     9         return name;
    10     }
    11     public void setName(String name) {
    12         this.name = name;
    13     }
    14     public String getPass() {
    15         return pass;
    16     }
    17     public void setPass(String pass) {
    18         this.pass = pass;
    19     }
    20 
    21 }


    2.controller包
    a.UserController

     1 package com.Elastic.SpringMVCDemo1.ivy.controller;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import javax.servlet.http.HttpServletResponse;
     5 
     6 import org.springframework.web.servlet.ModelAndView;
     7 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
     8 
     9 import com.Elastic.SpringMVCDemo1.ivy.entity.User;
    10 
    11 public class UserController extends MultiActionController {
    12     public ModelAndView login(HttpServletRequest request, HttpServletResponse response,User user) {
    13         System.out.println("登录功能");
    14         System.out.println(user.getName());
    15         return new ModelAndView("index");
    16     }
    17     
    18     public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
    19         System.out.println("注册功能");
    20         System.out.println(user.getName());
    21         return new ModelAndView("index");
    22     }
    23 }


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

     1 package com.Elastic.SpringMVCDemo1.ivy.controller;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 import org.springframework.web.servlet.ModelAndView;
    10 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
    11 
    12 import com.Elastic.SpringMVCDemo1.ivy.entity.User;
    13 
    14 public class UserController extends MultiActionController {
    15     private User user;
    16     private String code;
    17     
    18     public User getUser() {
    19         return user;
    20     }
    21 
    22     public void setUser(User user) {
    23         this.user = user;
    24     }
    25 
    26     public String getCode() {
    27         return code;
    28     }
    29 
    30     public void setCode(String code) {
    31         this.code = code;
    32     }
    33 
    34     public ModelAndView login(HttpServletRequest request, HttpServletResponse response, UserController controller) {
    35         System.out.println("登录功能");
    36         System.out.println(this.hashCode());
    37         System.out.println(controller.hashCode());
    38         System.out.println(controller.code);
    39         System.out.println(controller.user.getName());
    40         return new ModelAndView("index");
    41     }
    42     
    43     public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
    44         System.out.println("注册功能");
    45         System.out.println(user.getName());
    46         return new ModelAndView("index");
    47     }
    48 }


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

     1 package com.Elastic.SpringMVCDemo1.ivy.controller;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 import org.springframework.web.servlet.ModelAndView;
    10 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
    11 
    12 import com.Elastic.SpringMVCDemo1.ivy.entity.User;
    13 
    14 public class UserController extends MultiActionController {
    15     private User user;
    16     private String code;
    17     
    18     public User getUser() {
    19         return user;
    20     }
    21 
    22     public void setUser(User user) {
    23         this.user = user;
    24     }
    25 
    26     public String getCode() {
    27         return code;
    28     }
    29 
    30     public void setCode(String code) {
    31         this.code = code;
    32     }
    33 
    34     public ModelAndView login(HttpServletRequest request, HttpServletResponse response) {
    35         //手动绑定参数
    36         try {
    37             this.bind(request, this);
    38             
    39          } catch (Exception e) {
    40             e.printStackTrace();
    41         }
    42         System.out.println("登录功能");
    43         System.out.println(this.hashCode());
    44 //        System.out.println(controller.hashCode());
    45         System.out.println(this.code);
    46         System.out.println(user.getName());
    47         return new ModelAndView("index");
    48     }
    49     
    50     public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
    51         System.out.println("注册功能");
    52         System.out.println(user.getName());
    53         return new ModelAndView("index");
    54     }
    55 }


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

     1 package com.Elastic.SpringMVCDemo1.ivy.controller;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 import org.springframework.web.servlet.ModelAndView;
    10 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
    11 
    12 import com.Elastic.SpringMVCDemo1.ivy.entity.User;
    13 
    14 public class UserController extends MultiActionController {
    15     private User user;
    16     private String code;
    17     
    18     public User getUser() {
    19         return user;
    20     }
    21 
    22     public void setUser(User user) {
    23         this.user = user;
    24     }
    25 
    26     public String getCode() {
    27         return code;
    28     }
    29 
    30     public void setCode(String code) {
    31         this.code = code;
    32     }
    33 
    34     public ModelAndView login(HttpServletRequest request, HttpServletResponse response) {
    35         //手动绑定参数
    36         try {
    37             this.bind(request, this);
    38             user = new User();
    39             this.bind(request, user);
    40             
    41          } catch (Exception e) {
    42             e.printStackTrace();
    43         }
    44         System.out.println("登录功能");
    45         System.out.println(this.hashCode());
    46 //        System.out.println(controller.hashCode());
    47         System.out.println(this.code);
    48         System.out.println(this.user.getName());
    49         return new ModelAndView("index");
    50     }
    51     
    52     public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
    53         System.out.println("注册功能");
    54         System.out.println(user.getName());
    55         return new ModelAndView("index");
    56     }
    57 }


    a4.

     1 package com.Elastic.SpringMVCDemo1.ivy.controller;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import javax.servlet.http.HttpServletResponse;
     5 
     6 import org.springframework.validation.BindException;
     7 import org.springframework.validation.Errors;
     8 import org.springframework.validation.ValidationUtils;
     9 import org.springframework.validation.Validator;
    10 import org.springframework.web.bind.ServletRequestBindingException;
    11 import org.springframework.web.servlet.ModelAndView;
    12 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
    13 
    14 import com.Elastic.SpringMVCDemo1.ivy.entity.User;
    15 
    16 public class UserController extends MultiActionController implements Validator{
    17     private User user;
    18     private String code;
    19     
    20     public User getUser() {
    21         return user;
    22     }
    23 
    24     public void setUser(User user) {
    25         this.user = user;
    26     }
    27 
    28     public String getCode() {
    29         return code;
    30     }
    31 
    32     public void setCode(String code) {
    33         this.code = code;
    34     }
    35 
    36     public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception{
    37         //手动绑定参数
    38         try {
    39             this.bind(request, this);
    40             //捕获绑定异常
    41          } catch (ServletRequestBindingException e) {
    42              BindException bindException = (BindException) e.getCause();
    43              System.out.println(bindException);
    44             //方法一
    45 //            return new ModelAndView("login",bindException.getModel());
    46             //方法二
    47              ModelAndView mv = new ModelAndView();
    48              mv.setViewName("login");
    49              mv.addAllObjects(bindException.getModel());
    50              return mv;
    51         }
    52         System.out.println("登录功能");
    53         System.out.println(this.hashCode());
    54         System.out.println(user.getName());
    55         System.out.println(this.code);
    56         return new ModelAndView("index");
    57     }
    58     
    59     public ModelAndView registe(HttpServletRequest request, HttpServletResponse response,User user) {
    60         System.out.println("注册功能");
    61         System.out.println(user.getName());
    62         return new ModelAndView("index");
    63     }
    64 
    65     @Override
    66     public boolean supports(Class<?> clazz) {
    67         return clazz == this.getClass();
    68     }
    69 
    70     @Override
    71     public void validate(Object target, Errors errors) {
    72         UserController userController = (UserController) target;
    73         ValidationUtils.rejectIfEmptyOrWhitespace(errors, "code", null, "验证码必填");
    74         ValidationUtils.rejectIfEmptyOrWhitespace(errors, "user.name", null, "用户名必填");
    75         ValidationUtils.rejectIfEmpty(errors, "user.pass", null, "密码必填");
    76         
    77     }
    78 }


    3.动态工程的配置文件
    a1.web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <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">
     3   <display-name>SpringMVCDemo1_ivy</display-name>
     4   <welcome-file-list>
     5     <welcome-file>index.html</welcome-file>
     6     <welcome-file>index.htm</welcome-file>
     7     <welcome-file>index.jsp</welcome-file>
     8     <welcome-file>default.html</welcome-file>
     9     <welcome-file>default.htm</welcome-file>
    10     <welcome-file>default.jsp</welcome-file>
    11   </welcome-file-list>
    12  
    13   <!-- 配置SpringMVC拦截器(servlet) -->
    14   <servlet>
    15       <servlet-name>SpringMVC</servlet-name>
    16       <!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
    17       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    18       <!-- 指定SpringMVC配置文件的路径 -->
    19       <init-param>
    20           <param-name>contextConfigLocation</param-name>
    21           <!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
    22           <!-- classpath前缀名字与servlet-name一致 -->
    23           <param-value>classpath:SpringMVC-servlet.xml</param-value>
    24       </init-param>
    25       <!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
    26       <load-on-startup>1</load-on-startup>
    27       
    28   </servlet>
    29   <servlet-mapping>
    30       <servlet-name>SpringMVC</servlet-name>
    31       <!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
    32       <url-pattern>/</url-pattern>
    33   </servlet-mapping>
    34 </web-app>


    a2.验证 -- web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <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">
     3   <display-name>SpringMVCDemo1_ivy</display-name>
     4   <welcome-file-list>
     5     <welcome-file>index.html</welcome-file>
     6     <welcome-file>index.htm</welcome-file>
     7     <welcome-file>index.jsp</welcome-file>
     8     <welcome-file>default.html</welcome-file>
     9     <welcome-file>default.htm</welcome-file>
    10     <welcome-file>default.jsp</welcome-file>
    11   </welcome-file-list>
    12   <context-param>
    13       <param-name>contextConfigLocation</param-name>
    14       <param-value>classpath:applicationContext.xml</param-value>
    15   </context-param>
    16  
    17   <!-- 配置Spring的监听器 -->
    18   <listener>
    19       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    20   </listener>
    21  
    22   <!-- 配置SpringMVC拦截器(servlet) -->
    23   <servlet>
    24       <servlet-name>SpringMVC</servlet-name>
    25       <!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
    26       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    27       <!-- 指定SpringMVC配置文件的路径 -->
    28       <init-param>
    29           <param-name>contextConfigLocation</param-name>
    30           <!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
    31           <!-- classpath前缀名字与servlet-name一致 -->
    32           <param-value>classpath:SpringMVC-servlet.xml</param-value>
    33       </init-param>
    34       <!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
    35       <load-on-startup>1</load-on-startup>
    36       
    37   </servlet>
    38   <servlet-mapping>
    39       <servlet-name>SpringMVC</servlet-name>
    40       <!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
    41       <url-pattern>/</url-pattern>
    42   </servlet-mapping>
    43 </web-app>


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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     7         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
     8         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
     9 
    10     <!-- 配置SpringMVC url地址映射 -->
    11     <!-- 配置hanldelMapping指定以何种方式实现映射 -->
    12     <!-- 3.controller类中有多个方法:SimpleUrl映射 -->
    13     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    14         <property name="mappings">
    15             <props>
    16                 <prop key="/user/*">userController</prop>
    17             </props>
    18         </property>
    19     </bean>
    20     
    21     <!-- 配置指定的Controller -->
    22     <!-- login:UserController的方法 -->
    23     <!-- <bean name="/login" class="com.Elastic.SpringMVCDemo1.ivy.controller.UserController"></bean> -->
    24     <bean id="userController" name="/login" class="com.Elastic.SpringMVCDemo1.ivy.controller.UserController"></bean>
    25     
    26     <!-- 配置视图解析器 -->
    27     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    28         <!-- 视图解释的前缀名称 -->
    29         <!-- /:项目根目录。加在HelloController的逻辑视图名称。 -->
    30         <property name="prefix" value="/"></property>
    31         <!-- 视图解析的后缀名称 -->
    32         <property name="suffix" value=".jsp"></property>
    33     </bean>
    34 </beans>


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

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <beans xmlns="http://www.springframework.org/schema/beans"
    3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    5 
    6 </beans>


    6.jsp
    a.login.jsp

     1 <%--引入JSP页面PAGE指令 --%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     3 <%-- 引入JSTL标签指令 --%>
     4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     5 <!DOCTYPE html>
     6 <html language="zh-CN">
     7 <head>
     8     <meta charset="utf-8">
     9     <!-- 设置浏览器渲染的引擎  -->
    10     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    11     <!-- 设置支持移动设备  -->
    12     <meta name="viewport" content="width=device-width, initial-scale=1">
    13     <title>网页标题</title>
    14     <!-- 引入bootstrap的样式 -->
    15     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
    16 </head>
    17 <body>
    18     <div class="container">
    19         <div class="panel panel-primary center-block">
    20             <div class="panel-heading">登录</div>
    21             <div class="panel-body">
    22                 <form class="form-horizontal" action="user/login" method="post">
    23                     <div class="form-group">
    24                         <label class="col-md-3 control-label" for="loginName">用户名:</label>
    25                         <div class="col-md-6" >
    26                             <input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/>
    27                         </div>
    28                         <div class="col-md-3">
    29                         </div>
    30                     </div>
    31                     <div class="form-group">
    32                         <label class="col-md-3 control-label" for="loginPass">密码:</label>
    33                         <div class="col-md-6" >
    34                             <input class="form-control" id="loginPass" name="pass" type="password"/>
    35                         </div>
    36                         <div class="col-md-3">
    37                             
    38                         </div>
    39                     </div>
    40                     
    41                     <div class="form-group">
    42                         <div class="col-md-offset-3 col-md-6">
    43                             <input class="btn btn-primary btn-block" type="submit" value="登录" />
    44                         </div>
    45                     </div>
    46                 </form>
    47             </div>
    48         </div>
    49     </div>
    50     
    51     <!-- 引入JS的样式  -->
    52     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
    53     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
    54     
    55 </body>
    56 </html>


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

     1 <%--引入JSP页面PAGE指令 --%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     3 <%-- 引入JSTL标签指令 --%>
     4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     5 <!DOCTYPE html>
     6 <html language="zh-CN">
     7 <head>
     8     <meta charset="utf-8">
     9     <!-- 设置浏览器渲染的引擎  -->
    10     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    11     <!-- 设置支持移动设备  -->
    12     <meta name="viewport" content="width=device-width, initial-scale=1">
    13     <title>网页标题</title>
    14     <!-- 引入bootstrap的样式 -->
    15     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
    16 </head>
    17 <body>
    18     <div class="container">
    19         <div class="panel panel-primary center-block">
    20             <div class="panel-heading">登录</div>
    21             <div class="panel-body">
    22                 <form class="form-horizontal" action="user/login" method="post">
    23                     <div class="form-group">
    24                         <label class="col-md-3 control-label" for="loginName">用户名:</label>
    25                         <div class="col-md-6" >
    26                             <input class="form-control" id="loginName" name="name" type="text" autocomplete="off"/>
    27                         </div>
    28                         <div class="col-md-3">
    29                         </div>
    30                     </div>
    31                     <div class="form-group">
    32                         <label class="col-md-3 control-label" for="loginPass">密码:</label>
    33                         <div class="col-md-6" >
    34                             <input class="form-control" id="loginPass" name="pass" type="password"/>
    35                         </div>
    36                         <div class="col-md-3">
    37                             
    38                         </div>
    39                     </div>
    40                     <div class="form-group">
    41                         <label class="col-md-3 control-label" for="code">验证码:</label>
    42                         <div class="col-md-6" >
    43                             <input class="form-control" id="code" name="code" type="text"/>
    44                         </div>
    45                         <div class="col-md-3">
    46                             
    47                         </div>
    48                     </div>
    49                     
    50                     <div class="form-group">
    51                         <div class="col-md-offset-3 col-md-6">
    52                             <input class="btn btn-primary btn-block" type="submit" value="登录" />
    53                         </div>
    54                     </div>
    55                 </form>
    56             </div>
    57         </div>
    58     </div>
    59     
    60     <!-- 引入JS的样式  -->
    61     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
    62     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
    63     
    64 </body>
    65 </html>


    a3.Spring标签 -- login.jsp

     1 <%--引入JSP页面PAGE指令 --%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
     3 <%-- 引入JSTL标签指令 --%>
     4 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     5 <%-- 引入Spring标签指令 --%>
     6 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="fm" %>
     7 <!DOCTYPE html>
     8 <html language="zh-CN">
     9 <head>
    10     <meta charset="utf-8">
    11     <!-- 设置浏览器渲染的引擎  -->
    12     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    13     <!-- 设置支持移动设备  -->
    14     <meta name="viewport" content="width=device-width, initial-scale=1">
    15     <title>网页标题</title>
    16     <!-- 引入bootstrap的样式 -->
    17     <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.min.css">
    18 </head>
    19 <body>
    20     <div class="container">
    21         <div class="panel panel-primary center-block">
    22             <div class="panel-heading">登录</div>
    23             <div class="panel-body">
    24                 <fm:form action="user/login" method="post">
    25                     <div class="form-group">
    26                         <label class="col-md-3 control-label" for="loginName">用户名:</label>
    27                         <div class="col-md-6" >
    28                             <input class="form-control" id="loginName" name="user.name" type="text" autocomplete="off"/>
    29                         </div>
    30                         <div class="col-md-3">
    31                             <fm:errors path="user.name"></fm:errors>
    32                         </div>
    33                     </div>
    34                     <div class="form-group">
    35                         <label class="col-md-3 control-label" for="loginPass">密码:</label>
    36                         <div class="col-md-6" >
    37                             <input class="form-control" id="loginPass" name="user.pass" type="password"/>
    38                         </div>
    39                         <div class="col-md-3">
    40                             <fm:errors path="user.pass"></fm:errors>
    41                         </div>
    42                     </div>
    43                     <div class="form-group">
    44                         <label class="col-md-3 control-label" for="code">验证码:</label>
    45                         <div class="col-md-6" >
    46                             <input class="form-control" id="code" name="code" type="text"/>
    47                         </div>
    48                         <div class="col-md-3">
    49                             <fm:errors path="code"></fm:errors>
    50                         </div>
    51                     </div>
    52                     
    53                     <div class="form-group">
    54                         <div class="col-md-offset-3 col-md-6">
    55                             <input class="btn btn-primary btn-block" type="submit" value="登录" />
    56                         </div>
    57                     </div>
    58                 </fm:form>
    59             </div>
    60         </div>
    61     </div>
    62     
    63     <!-- 引入JS的样式  -->
    64     <script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-2.2.4.js"></script>
    65     <script type="text/javascript" src="<%=request.getContextPath() %>/js/bootstrap.min.js"></script>
    66     
    67 </body>
    68 </html>


    b.reg.jsp

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <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">
     3   <display-name>SpringMVCDemo1_ivy</display-name>
     4   <welcome-file-list>
     5     <welcome-file>index.html</welcome-file>
     6     <welcome-file>index.htm</welcome-file>
     7     <welcome-file>index.jsp</welcome-file>
     8     <welcome-file>default.html</welcome-file>
     9     <welcome-file>default.htm</welcome-file>
    10     <welcome-file>default.jsp</welcome-file>
    11   </welcome-file-list>
    12  
    13   <!-- 配置SpringMVC拦截器(servlet) -->
    14   <servlet>
    15       <servlet-name>SpringMVC</servlet-name>
    16       <!-- 配置SpringMVC的前置拦截器,用于拦截匹配的请求 -->
    17       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    18       <!-- 指定SpringMVC配置文件的路径 -->
    19       <init-param>
    20           <param-name>contextConfigLocation</param-name>
    21           <!-- 指定SpringMVC的配置文件.默认读取在/WEB-INF/目录下的以DispatcherServlet的servlet-name拼接-servlet.xml的文件 -->
    22           <!-- classpath前缀名字与servlet-name一致 -->
    23           <param-value>classpath:SpringMVC-servlet.xml</param-value>
    24       </init-param>
    25       <!--  启动web容器时,加载servlet并初始化。数字越小,启动速度越快 -->
    26       <load-on-startup>1</load-on-startup>
    27       
    28   </servlet>
    29   <servlet-mapping>
    30       <servlet-name>SpringMVC</servlet-name>
    31       <!-- 指定需要拦截的URL地址。/:根路径下所有的文件 -->
    32       <url-pattern>/</url-pattern>
    33   </servlet-mapping>
    34 </web-app>



        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
       

  • 相关阅读:
    变形金刚还有一个星期!
    SQLSERVER中日期显示样式(网络收集)
    美国《商业周刊》网站提前公布的2007年度世界最有价值品牌
    昨天论文被录 开心
    怎样用javascript操作ftb编辑区内容
    c#中 @的用处
    图片滚动代码。
    一段实现分页的存储过程
    下拉列表控制文本框的个数思路
    什么是ERP (转载自百度知道)
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/5661677.html
Copyright © 2011-2022 走看看