`

SpringMVC入门实例

阅读更多
    昨天调试了半下午也没有调出的SpringMVC,今天下午继续调试,终于跑通了。SpringMVC具有很多Struts2不具备的有点,目前来说我知道的地方就是非侵入式,低耦合。
    与struts2相比,Spring将对象细分成了更多不同的角色。控制器( Controller)、可选的命令对象(Command Object)或表单对象(Form Object), 以及传递到视图的模型(Model),而且粒度更细,为方法级,而struts2为类级,在Struts2中,后面接受的参数均为成员边栏,也就是说除了execute方法外,类中的其他方法也可以对该变量进行调用,这其实是不合理的,而在springMVC中就不会存在这样的问题,可以直接使用注解,从而将参数直接赋值给对应的方法,这样一来安全性更好,而且Struts通过的是Filter过滤,而Spring是Servlet,有牛人对SpringMVC和Struts2MVC的性能进行了测试,测试结果显示,SpringMVC的性能要好于Struts2MVC的性能。
    下面重点说下springMVC的运行流程,程序是在DispacherServlet中运行的
    request->HanderlerMapping(相当于struts2中的配置文件)->Controller(相当于struts2中的Action,但是要比Action更简洁,非侵入式,对html表单传送的数据无需写相应的成员变量)->ModelAndView(给出指定的页面名,也可以返回一些参数对象)->response
   首先,建立建立一个Web工程,工程名为SpringMVC,加入jar包,springMVC需要的jar包有以下几个(我这里使用的是spring2.5),
                 1.commons-loggin-1.0.4.jar
                 2.spring.jar
                 3.spring-webmvc.jar。
   工程建好后,第一步,配置web.xml文件,如下:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="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">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
  <servlet-name>SpringMVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring-schema.xml</param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
  <servlet-name>SpringMVC</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app> 
第二步,写界面,WebRoot下建立jsp文件夹,在jsp文件夹中建立两个jsp界面,login.jsp和welcome.jsp,并修改index.jsp,界面如下:
login.jsp:
<%@ page language="java" import="java.util.*" isELIgnored="false" pageEncoding="utf8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>login</title>
  </head>
 
  <body>
  <h4>登录操作</h4>
  <h3><font color="red">${error }</font></h3>
    <form action="/springMVCDemo/login.do" method="post">
    <input type="text" name="name" id="name">
    <input type="password" name="password" id="password">
    <input type="submit" value="登录">
    </form>
  </body>
</html>
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>welcome</title>
  </head>
 
  <body>
    <h2>欢迎${user.name }登录</h2>
  </body>
</html>

index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
 
  <body>
    <a href="/springMVCDemo/toLogin.do">SpringMVC</a>
  </body>
</html>
第三步:编写bean和Controller
User.java
package com.bean;

public class User {
private String name;
private String password;

public User() {}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}


}

ToLoginAction
package com.action;

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

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

/**
* 跳转到登录页面
*
* @author XiaoYun 2013-07-18
*/
public class ToLoginAction implements Controller {

public ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse res) throws Exception {
ModelAndView model = new ModelAndView("login");
return model;
}

}

LoginAction
package com.action;

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

import org.springframework.ui.ModelMap;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

import com.bean.User;

/**
* 登录处理逻辑
*
* @author XiaoYun 2013-07-18
*/
public class LoginAction extends SimpleFormController{ //需要对前台的表单数据进行封装,故要继承SimpleFormController,继承哪一个Controller根据需要而定
@Override
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response,
Object command,//接受前台传来的表单参数值
BindException errors)
throws Exception {
User user = (User)command;
ModelMap modelMap = null;
if ("xiaoyun".equals(user.getName()) && "123".equals(user.getPassword())) {
modelMap = new ModelMap("user", user);
return new ModelAndView("welcome", modelMap);
}
modelMap = new ModelMap("error", "用户名或密码错误!");
return new ModelAndView("login", modelMap);
}
}

第四步,也是关键的一步,写后端控制器,包含处理器映射,视图解析器等
spring-schema.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-1.5.xsd">
    <!-- 配置控制器的映射 -->
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
    <props>
    <prop key="login.do">loginAction</prop>
    <prop key="toLogin.do">toLoginAction</prop>
    </props>
    </property>
    </bean>
    <!-- 配置视图 -->
    <!-- 视图扩展名解析器 对模型视图名称的解析,即给视图名称添加前缀和后缀 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    <!-- 前缀 -->
    <property name="prefix" value="jsp/"></property>
        <!-- spring查找页面的方式为  前缀 + ModelAndView的名字(通过Controller返回) + 后缀 -->
    <!-- 后缀 -->
    <property name="suffix" value=".jsp"></property>
    </bean>
   
    <!-- Action -->
    <!-- 登录验证 -->
    <bean id="loginAction" class="com.action.LoginAction">
    <!-- 工程中表单对应的pojo类 -->
    <property name="commandClass" value="com.bean.User"></property>   
    </bean>
    <!-- 跳转到登录页面 -->
    <bean id="toLoginAction" class="com.action.ToLoginAction"></bean>
       
</beans>

好,到现在为止,一个springMVC最基本,也是最简单的Demo就完成了,在本人的机器上运行OK,我的环境是JDK1.6,tomcat5.5。我也是刚刚入门,写的不好的地方还请多多指教,后期
会继续学习。欢迎跟我交流,我的邮箱是391720181@qq.com。
   附件中有该工程需要的jar包,需要的下载下来就能用了。

谢谢
登录名和密码为xiaoyun和123.
      
  
  • 大小: 27.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics