zoukankan      html  css  js  c++  java
  • SpringMVC入门实例及详细讲解

         Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
      Spring 的 Web MVC 框架是围绕 DispatcherServlet 设计的,它把请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上载文件支持。默认的处理程序是非常简单的 Controller 接口,只有一个方法 ModelAndView handleRequest(request, response)。Spring 提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,那么可以继承 AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承 AbstractWizardFormController。

         Spring MVC对于现在较成熟的Model-View-Control框架而言,其解决的主要问题无外乎下面几部分:
         1》将web页面中的输入元素封装为一个(请求)数据对象。
         2》根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
         3》逻辑处理单元完成运算后,返回一个结果数据对象。
         4》将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。
    开发步骤:

     首先新建web Project项目:MySpringMvc

    1.加载项目所需要的jar包;
       spring.jar -------------------------这个在spring2.5.6资源包的dist下面
       spring-webmvc.jar---------------这个在spring2.5.6资源包的dist/module下面

    2.配置web.xml文件

     <?xml version="1.0" encoding="UTF-8"?>

    Xml代码  收藏代码
    1. <span style="font-size: large;"><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    3.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    4.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    5.     <servlet>  
    6.         <servlet-name>dd</servlet-name>  
    7.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    8.         <!--     <init-param>-->  
    9.         <!--         <param-name>contextConfigLocation</param-name>-->  
    10.         <!--         <param-value>/WEB-INF/applicationContext.xml</param-value>-->  
    11.         <!--             </init-param>-->  
    12.     </servlet>  
    13.     <!--  
    14.         applicationContext.xml文件代表示应用程序服务的配置和 bean 配置。如果想装入多个配置文件,可以在  
    15.         <param-value>标记中用逗号作分隔符。  
    16.         springmvc配置文件与spring配置的servlet名称有关[如本配置中是dd]  
    17.         通常springmvc配置文件名称结构为:[servlet-name]-servlet.xml,  
    18.         如果你没有指定init-param里面contextCofigLocation的值中对应的XML文件的话  
    19.         (也就是applicationContext全局配置文件没有配置在web.xml中的话),那么像本  
    20.         段代码对应在springmvc中的配置文件就应该是/WEB-INF/dipatcher-servlet.xml这样的文件,  
    21.         否则如果配置了applicaitonContext.xml这样的spring全局配置文件,如本配置那么就必须为/WEB-INF/dd-servlet.xml  
    22.     -->  
    23.     <servlet-mapping>  
    24.         <servlet-name>dd</servlet-name>  
    25.         <url-pattern>*.do</url-pattern>  
    26.     </servlet-mapping>  
    27. </web-app></span>  

     

     

    2.由于上面的初始化参数中没有指定名字的XML文件,因此在WEB-INF下面建立

      dispatcher-servlet.xml 

    Xml代码  收藏代码
    1. <span style="font-size: medium;"><span style="font-size: large;"><?xml version="1.0" encoding="UTF-8"?>  
    2. <!--看到下面的beans这个元素标签没有,必须有标签的声明-->  
    3. <beans  
    4.     xmlns="http://www.springframework.org/schema/beans"  
    5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
    7.   
    8. <!-- URL Mapping -->  
    9. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
    10.     <property name="mappings">  
    11.         <props>  
    12.             <prop key="/regAction.do">regAction</prop>  
    13.         </props>  
    14.     </property>  
    15. </bean>  
    16.   
    17. <!-- definition of View Resolver -->  
    18. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    19.     <property name="viewClass">  
    20.         <value>org.springframework.web.servlet.view.JstlView</value>  
    21.     </property>  
    22.     <property name="prefix">  
    23.         <value>/view/</value>  
    24.     </property>  
    25.     <property name="suffix">  
    26.         <value>.jsp</value>  
    27.     </property>  
    28. </bean>  
    29. <!-- formController ,这个formController可以配置也可以不配置-->  
    30.  <bean id="formController"  
    31.  class="org.springframework.web.servlet.mvc.ParameterizableViewController">  
    32.   <property name="viewName">  
    33.    <value>form</value>  
    34.   </property>  
    35.  </bean>  
    36.   
    37. <!-- Action Definition -->  
    38. <bean id="regAction" class="org.lee.springmvc.demo.RegAction">  
    39. <!--在MySpringMvc这个项目中就没有配置这个commandClass,  
    40. 因为它提前调用了setCommandClass(LoginForm.class)这个方法;这样跟下面效果一样  
    41. 不过还是建议配成下面这样的更好  
    42. -->  
    43.     <property name="commandClass">  
    44.         <value>org.lee.springmvc.demo.RegInfo</value>  
    45.     </property>  
    46.     <property name="error_view">  
    47.         <value>error</value>  
    48.     </property>  
    49.     <property name="success_view">  
    50.         <value>success</value>  
    51.     </property>  
    52.     <property name="commandName">  
    53.         <value>myCommand</value>  
    54.     </property>  
    55. </bean>  
    56. </beans></span></span>  

      

     3.建立JSP文件

    form.jsp

    Html代码  收藏代码
    1. <span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>  
    2. <%@page pageEncoding="UTF-8"%>  
    3. <%@taglib prefix="spring"   
    4.                  uri="http://www.springframework.org/tags"%>  
    5.                    
    6. <%@taglib prefix="c"   
    7.                  uri="http://java.sun.com/jsp/jstl/core"%>  
    8. <html>  
    9.     <head>  
    10.         <meta http-equiv="Content-Type"   
    11.               content="text/html; charset=UTF-8">  
    12.         <title>Login Form</title>  
    13.     </head>  
    14.     <body>  
    15.     <h1>登入表单</h1>  
    16.     <spring:bind path="command.*">   
    17.         <font color="red">  
    18.             <b>${status.errorMessage}</b>  
    19.         </font><br>   
    20.     </spring:bind>   
    21.       
    22.     请输入使用者名称与密码:<p>   
    23.     <form name="loginform" action="login.do" method="post">   
    24.       
    25.         <spring:bind path="command.userName">   
    26.         名称 <input type="text" name="${status.expression}" value="${status.value}"/>  
    27.             <font color="red"><c:out value="${status.errorMessage}" /></font><br/>  
    28.           
    29.         </spring:bind>   
    30.       
    31.         <spring:bind path="command.password">   
    32.         密码 <input type="password" name="${status.expression}" value="${status.value}"/>  
    33.          <font color="red"><c:out value="${status.errorMessage}" /></font><br/>  
    34.         </spring:bind>   
    35.       
    36.         <input type="submit" value="确定"/>   
    37.     </form>   
    38.     注意:输入错误会再回到这个页面中。        
    39.     </body>  
    40. </html></span></span>  

     

     4.建立jsp文件
    success.jsp

    Html代码  收藏代码
    1. <span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>  
    2. <%@page pageEncoding="GBK"%>  
    3.   
    4. <html>  
    5.     <head>  
    6.         <meta http-equiv="Content-Type" content="text/html; charset=GBK">  
    7.         <title>登入成功</title>  
    8.     </head>  
    9.     <body>  
    10.         <H1>哈啰! ${welcomeuser}!!</H1>   
    11.         这是您的神秘礼物!^o^<a href="login.do">退出登录</a>  
    12.     </body>  
    13. </html></span></span>  

     5.建立一个java bean LoginForm.java

    Java代码  收藏代码
    1. <span style="font-size: medium;"><span style="font-size: large;">package zz.it.beans;  
    2.   
    3. public class LoginForm {  
    4.     private String userName;  
    5.     private String password;  
    6.   
    7.     public String getPassword() {  
    8.         return password;  
    9.     }  
    10.   
    11.     public void setPassword(String password) {  
    12.         this.password = password;  
    13.     }  
    14.   
    15.     public String getUserName() {  
    16.         return userName;  
    17.     }  
    18.   
    19.     public void setUserName(String userName) {  
    20.         this.userName = userName;  
    21.     }  
    22.   
    23.       
    24. }  
    25. </span></span>  

     

    6.建立controller LoginController.java

    Java代码  收藏代码
    1. <span style="font-size: medium;"><span style="font-size: large;">package zz.it.controller;  
    2.   
    3.   
    4. import org.springframework.validation.BindException;  
    5. import org.springframework.web.servlet.ModelAndView;  
    6. import org.springframework.web.servlet.mvc.SimpleFormController;  
    7.   
    8. import zz.it.beans.LoginForm;  
    9.   
    10. public class LoginController extends SimpleFormController {  
    11.     /** 
    12.      * 构造方法 
    13.      */  
    14.     public LoginController() {  
    15.         // TODO Auto-generated constructor stub  
    16.         //setCommandClass(LoginForm.class);   
    17.         //这句话要是不写的话,那么在dd-servlet.xml中的loginController里面配置上如下:  
    18.         // <property name="commandClass">  
    19.         //<value>zz.it.beans.LoginForm</value>  
    20.         //</property>  
    21.         //这样效果也是一样的  
    22.     }  
    23.   
    24.     public ModelAndView onSubmit(Object cmd, BindException errors) {  
    25.         LoginForm loginForm = (LoginForm) cmd;  
    26.         if (loginForm.getUserName().equals("test")  
    27.                 && loginForm.getPassword().equals("test")) {  
    28.             return new ModelAndView(getSuccessView(), "welcomeuser", loginForm  
    29.                     .getUserName());  
    30.         } else {  
    31.             errors.reject("ccc""用户名或密码有误!");  
    32.             errors.rejectValue("userName""nameErr"null"用户名错误");  
    33.             errors.rejectValue("password""passErr"null"密码错误");  
    34.             return new ModelAndView(getFormView(), errors.getModel());  
    35.         }  
    36.     }  
    37. }  
    38. </span></span>  

     

    7.最后,整合部署,访问http://localhost:1234/MySpringMvc/login.do  

     效果图

     初始登录界面



     

     登录成功页面



     

       
     登录失败页面



     

     

    我估计初学者,最关心的大都有这两个问题

     1.这个controller是怎样像struts那样进行封装数据的

     2.<spring:bind>为什么这么用,为什么取值只能是command.xxx

  • 相关阅读:
    许昌 地图。满屏的饭馆。
    Python中的math和保留小数位数方法
    Python中的math和保留小数位数方法
    python对XML 操作
    python对XML 操作
    python的enumerate()函数
    python的enumerate()函数
    [COJ0989]WZJ的数据结构(负十一)
    [OpenJudge 3066]随机序列
    [OpenJudge 3064]坠落的蚂蚁
  • 原文地址:https://www.cnblogs.com/htys/p/3768478.html
Copyright © 2011-2022 走看看