SpringMVC是一个十分好用的mvc框架,多余的介绍在此不表。下面来看一个快速上手的案例。通过这个简单的案例你可以快速了解SpringMVC的使用。

这个案例是模拟简单的登录过程。分为以下几个步骤:

1、首先建立一个web项目并引入SpringMVC的相应jar包。


2、在web.xml中设置DispatcherServlet,如下:

<servlet>
<span style="white-space:pre">	</span><servlet-name>DispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
	<span style="white-space:pre">	</span><param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/http.xml</param-value>
	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>DispatcherServlet</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

说明:DispatcherServlet是SpringMVC的请求分发控制器。这里我们将以.do结尾的请求交给spring容器来分发给对应的逻辑处理。这里我们为其设置了初始化参数。http.xml是SpringMVC的配置文件,我们需要将相应的处理的bean配置在这个文件中,后面将详解。配置文件的名称可以是任意的合法的命名。


3、建立一个jsp页面,包含最简单的登录功能。

<form action="login.do" method="post">
<span style="white-space:pre">	</span><input type="text" name="username"/><br>
	<input type="password" name="password"><br>
	<input type="submit" value="login">
</form>

说明:这里我们将用户名和密码这两个字段以post方式发送给后台,在后台接收以login.do发来的这个请求。


4、在http.xml中开始配置各个bean对象。如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-3.0.xsd 
			http://www.springframework.org/schema/aop 
			http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
			http://www.springframework.org/schema/tx 
			http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
			http://www.springframework.org/schema/mvc
			http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

	<!-- 这里配置的是视图的解析。当前采用的是jsp视图,所以viewClass是JstlView。还有其他的视图模式,例如PDF,xml等 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass">
			<value>org.springframework.web.servlet.view.JstlView</value>
		</property>
		<!-- 这里的prefix和suffix是用来和返回的视图名进行拼接得到完整的视图的路径 -->
		<property name="prefix">
			<value>/WEB-INF/jsp/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>

	<!-- 这里配置的是当请求发来时如何将其转发到相应的处理上 -->
	<bean id="urlMapping"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/toLogin.do">toLoginAction</prop>
				<prop key="/login.do">loginAction</prop>
			</props>
		</property>
	</bean>

	<bean id="loginAction" class="com.earl.spring.day02.practice.LoginAction" />
	<bean id="toLoginAction" class="com.earl.spring.day02.practice.ToLoginAction" />
</beans>

说明:抛开根标签先不看,固定格式必须那样写。我们看配置文件有3大部分:

第一部分是一个id为viewResolver的bean,它是视图的解析。也就是当逻辑处理完成后以什么样的形式展现。当前我们使用的是jsp显示,也就是返回一个jsp页面。我们如何得到这个jsp页面呢?我们在逻辑处理完成后会返回一个视图名,spring容器会根据这个视图名和上面配置文件中prefix和suffix来拼接出一个jsp文件的路径,之后就可以根据这个路径找到对应的页面并加以展示。

第二部分是一个id为urlMapping的bean,这个bean的作用是根据发来的请求将请求转发到相应的逻辑处理类。这里我们可以看到login.do的请求可以被转发到loginAction。

第三部分就是配置的各个逻辑处理的具体的类。


5、实现登录功能的逻辑。这里是简单的实现。如下:

public class LoginAction implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String username=request.getParameter("username");
		String password=request.getParameter("password");
	
		if("zhangsan".equalsIgnoreCase(username)&&"123".equalsIgnoreCase(password)){
			return new ModelAndView("loginSuccess");
		}
		return new ModelAndView("loginFail");
	}	
}

说明:逻辑处理的类需要实现Controller接口,并实现其handleRequest方法。通过方法的参数我们可以获取到请求中的参数。这里简单实现一下登录的验证。验证成功后我们返回了一个ModelAndView对象,它携带一个参数,这个参数就是用来与http.xml中的prefix和suffix拼接的jsp文件的文件名。验证成功我们返回loginSuccess,验证失败返回loginFail,那么当逻辑处理完成,就会返回相应的jsp页面。


6、为了确保系统的安全,将所有的jsp页面放在WEB-INF下,这个路径是不能直接访问的,所以还需要一个跳转的Action。

public class ToLoginAction implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		return new ModelAndView("login");
	}	
}



接下来就可以部署项目,通过http://localhost:8080/项目名/toLogin.do访问了。