spring mvc框架的搭建

Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还是Struts这样的Web框架。通过策略接口,Spring框架是高度可配置的,而且包含多种视图技术,例如JavaServerPages(JSP)技术、Velocity、Tiles、iText和POI。SpringMVC框架并不知道使用的视图,所以不会强迫您只使用JSP技术。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring的WebMVC框架是围绕DispatcherServlet设计的,它把请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上载文件支持。默认的处理程序是非常简单的Controller接口,只有一个方法ModelAndViewhandleRequest(request,response)。Spring提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,那么可以继承AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承AbstractWizardFormController。

SpringMVC对于现在较成熟的Model-View-Control框架而言,其解决的主要问题无外乎下面几部分:

1》将web页面中的输入元素封装为一个(请求)数据对象。

2》根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。

3》逻辑处理单元完成运算后,返回一个结果数据对象。

4》将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。

开发步骤:

首先新建webProject项目:MySpringMvc

1.加载项目所需要的jar包;

spring.jar-------------------------这个在spring2.5.6资源包的dist下面

spring-webmvc.jar---------------这个在spring2.5.6资源包的dist/module下面

2.配置web.xml文件

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>

<servlet-name>dd</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!--<init-param>-->

<!--<param-name>contextConfigLocation</param-name>-->

<!--<param-value>/WEB-INF/applicationContext.xml</param-value>-->

<!--</init-param>-->

</servlet>

<!--

applicationContext.xml文件代表示应用程序服务的配置和bean配置。如果想装入多个配置文件,可以在

<param-value>标记中用逗号作分隔符。

springmvc配置文件与spring配置的servlet名称有关[如本配置中是dd]

通常springmvc配置文件名称结构为:[servlet-name]-servlet.xml,

如果你没有指定init-param里面contextCofigLocation的值中对应的XML文件的话

(也就是applicationContext全局配置文件没有配置在web.xml中的话),那么像本

段代码对应在springmvc中的配置文件就应该是/WEB-INF/dipatcher-servlet.xml这样的文件,

否则如果配置了applicaitonContext.xml这样的spring全局配置文件,如本配置那么就必须为/WEB-INF/dd-servlet.xml

-->

<servlet-mapping>

<servlet-name>dd</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

</web-app>

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

dispatcher-servlet.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!--看到下面的beans这个元素标签没有,必须有标签的声明-->

<beans

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<!--URLMapping-->

<beanid="urlMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<propertyname="mappings">

<props>

<propkey="/regAction.do">regAction</prop>

</props>

</property>

</bean>

<!--definitionofViewResolver-->

<beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="viewClass">

<value>org.springframework.web.servlet.view.JstlView</value>

</property>

<propertyname="prefix">

<value>/view/</value>

</property>

<propertyname="suffix">

<value>.jsp</value>

</property>

</bean>

<!--formController,这个formController可以配置也可以不配置-->

<beanid="formController"

class="org.springframework.web.servlet.mvc.ParameterizableViewController">

<propertyname="viewName">

<value>form</value>

</property>

</bean>

<!--ActionDefinition-->

<beanid="regAction"class="org.lee.springmvc.demo.RegAction">

<!--在MySpringMvc这个项目中就没有配置这个commandClass,

因为它提前调用了setCommandClass(LoginForm.class)这个方法;这样跟下面效果一样

不过还是建议配成下面这样的更好

-->

<propertyname="commandClass">

<value>org.lee.springmvc.demo.RegInfo</value>

</property>

<propertyname="error_view">

<value>error</value>

</property>

<propertyname="success_view">

<value>success</value>

</property>

<propertyname="commandName">

<value>myCommand</value>

</property>

</bean>

</beans>

3.建立JSP文件

form.jsp

<%@pagecontentType="text/html"%>

<%@pagepageEncoding="UTF-8"%>

<%@taglibprefix="spring"

uri="http://www.springframework.org/tags"%>

<%@taglibprefix="c"

uri="http://java.sun.com/jsp/jstl/core"%>

<html>

<head>

<metahttp-equiv="Content-Type"

content="text/html;charset=UTF-8">

<title>LoginForm</title>

</head>

<body>

<h1>登入表单</h1>

<spring:bindpath="command.*">

<fontcolor="red">

<b>${status.errorMessage}</b>

</font><br>

</spring:bind>

请输入使用者名称与密码:<p>

<formname="loginform"action="login.do"method="post">

<spring:bindpath="command.userName">

名称<inputtype="text"name="${status.expression}"value="${status.value}"/>

<fontcolor="red"><c:outvalue="${status.errorMessage}"/></font><br/>

</spring:bind>

<spring:bindpath="command.password">

密码<inputtype="password"name="${status.expression}"value="${status.value}"/>

<fontcolor="red"><c:outvalue="${status.errorMessage}"/></font><br/>

</spring:bind>

<inputtype="submit"value="确定"/>

</form>

注意:输入错误会再回到这个页面中。

</body>

</html>

4.建立jsp文件

success.jsp

<%@pagecontentType="text/html"%>

<%@pagepageEncoding="GBK"%>

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=GBK">

<title>登入成功</title>

</head>

<body>

<H1>哈啰!${welcomeuser}!!</H1>

这是您的神秘礼物!^o^<ahref="login.do">退出登录</a>

</body>

</html>

5.建立一个javabeanLoginForm.java

packagezz.it.beans;

publicclassLoginForm{

privateStringuserName;

privateStringpassword;

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

publicStringgetUserName(){

returnuserName;

}

publicvoidsetUserName(StringuserName){

this.userName=userName;

}

}

6.建立controllerLoginController.java

packagezz.it.controller;

importorg.springframework.validation.BindException;

importorg.springframework.web.servlet.ModelAndView;

importorg.springframework.web.servlet.mvc.SimpleFormController;

importzz.it.beans.LoginForm;

publicclassLoginControllerextendsSimpleFormController{

/**

*构造方法

*/

publicLoginController(){

//TODOAuto-generatedconstructorstub

//setCommandClass(LoginForm.class);

//这句话要是不写的话,那么在dd-servlet.xml中的loginController里面配置上如下:

//<propertyname="commandClass">

//<value>zz.it.beans.LoginForm</value>

//</property>

//这样效果也是一样的

}

publicModelAndViewonSubmit(Objectcmd,BindExceptionerrors){

LoginFormloginForm=(LoginForm)cmd;

if(loginForm.getUserName().equals("test")

&&loginForm.getPassword().equals("test")){

returnnewModelAndView(getSuccessView(),"welcomeuser",loginForm

.getUserName());

}else{

errors.reject("ccc","用户名或密码有误!");

errors.rejectValue("userName","nameErr",null,"用户名错误");

errors.rejectValue("password","passErr",null,"密码错误");

returnnewModelAndView(getFormView(),errors.getModel());

}

}

}

相关推荐