昨天调试了半下午也没有调出的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
分享到:
相关推荐
maven + springmvc 入门实例,安装好maven之后导入myeclipse即可运行。maven安装方法请自行百度
Springmvc入门实例
spring mvc经典入门实例,帮你快速掌握spring mvc架构
关于SpringMVC入门级的实例demo
springMVC入门实例,对员工增删改查操作,员工关联部门,代码简单易懂。(员工系统-Mysql)
Maven+SpringMVC的入门级HelloWorld实例,简单了解Maven和SpringMVC整合
此工程为spring mvc的入门级例子,有助于刚入门spring mvc的开发人员了解spring mvc。
eclipse dynamic工程 非常精简的配置 特别适合入门
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含...
手把手教你搭建SpringMVC,史上最详细的搭建教程,附赠jar和项目源码
这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...
Spring MVC入门实例