Spring MVC Web简单入门实例

本文通过一个简单的用户登录例子带你入门Spring MVC Web开发。

开发环境

1、STS 3.7.3(Spring Tool Suit),下载。STS其实是一个包装过的Eclipse,由Spring小组开发的,专门用于Spring项目的开发。老规矩,安装之前先要安装jdk,并配置好环境变量。

2、Tomcat 7,下载Tomcat 7。sts已经集成了一个叫Pivotal tc Server的web服务器,不过我们一般都使用Tomcat作为我们的Web服务器。Tomcat配置

创建项目

1、新建Spring Legancy Project。


2、填写项目名称:SpringMVCLoginDemo,项目模板选择:Spring MVC Project


3、设置包名:com.xxx.logindemo,然后点击finish。


4、新建工程完成后,工程目录大概是下面这个样子


目前只需要关注src目录就行了,最重要的部分已经用红色下划线标出来了,下面进行简单的解释:

web.xml:项目配置文件

root-context.xml:Web通用上下文环境配置文件。

servlet-context.xml:Spring MVC上下文环境配置文件,其中最重要的包括前端控制器DispachServlet的配置。

home.jsp:home视图

HomeController.java:控制器

请求的处理流程

为了能够继续下去,我们应该先了解一下一个请求的处理流程。每当用户点击链接或者提交表单的时候,一个请求就开始了。请求到达web服务器后,第一个接收的就是一个叫DispacherServlet的总管家,它是一个集中处理并分派请求的人,通过它请求被分派到具体的某个控制器。每个web请求必须通过DispacherServlet,以便它能够管理整个请求的生命周期。

      当请求被DispacherServlet派发到具体的控制器后,控制器便马不停蹄的开始工作,处理完成后,便将数据(model)和视图名字(viewname)打包一起返回给总管家,告诉它用这些数据去渲染叫这个名字的视图就OK了(为什么不直接给视图,而是给个视图名字?当然是为了解耦啦!)。管家拿到视图名字后,需要请教一个叫视图解析器的家伙,让他告诉自己这个视图名字对应的视图到底是谁。视图解析器告诉管家,这个视图指的就是home.jsp这个家伙,然后管家把数据就交给home.jsp去渲染,然后再返回给用户。具体流程可以参考下面这个图(盗来的 #^_^):



项目配置

1、DispacherServlet配置

       通过上面的流程,我们知道了DispacherServlet的重要性,那么如何配置这个总管家呢?打开web.xml,里面有如下配置:

<!-- 处理用户请求 -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
       没错,这就是DispacherServlet的配置部分。里面配置了一个叫appServlet的DispacherServlet,并在初始化参数中给出了MVC上下文的详细配置的文件路径。load-on-startup=1表明DispacherServlet在应用启动后就先加载(这是必须的,不然谁来第一个接收请求)。

       然后我们需要告诉DispacherServlet需要拦截什么样的请求:

<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

url-pattern="/"表明DispacherServlet来者不拒,所有请求都接收,除了静态资源。因为静态资源的特殊性,不用处理,可以直接交给用户,所以不希望被DispacherServlet拦截,那么可以在servlet-context.xml配置一个单独的处理静态资源的控制器:

<resources mapping="/resources/**" location="/resources/" />
这样所有包含/reources/的链接,web服务器都会去根下resources目录寻找该资源。具体可以参考:SpringMVC访问静态资源

2、控制器配置

      项目使用的Spring版本是3.1,采用的是基于注解的控制器配置,省去了大量xml配置的麻烦。要使得基于注解的控制器配置模式生效,需要在servlet-context.xml中说明:

<annotation-driven />
然后告诉控制器在哪个包里面:

<context:component-scan base-package="com.xxx.logindemo" />
如上所示,我们项目中的HomeController控制器就在com.xxx.logindemo包里面。如何判断一个JavaBean是一个控制器呢?
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}
HomeController类使用了@Controller注解,这就表明了HomeController是一个控制器。

3、请求映射

       请求到达DispacherServlet后是如何被派发到具体的控制器呢?这个要通过@RequestMapping注解来实现。@RequestMapping可用于方法和类上,有两个重要属性,value指定哪些路由的请求会进入该方法被处理,例如上面表示所有请求都会进入home方法;method指定接收何种请求方式,例如上面代码表示home方法只接收GET请求。@RequestMapping具体内容可以参考:@RequestMapping用法详解

4、视图解析器配置

       视图解析器作用上面已经说了,就是将视图名称映射到具体的视图,在servlet-context.xml中配置如下:

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
</beans:bean>
       视图解析器有多种,最简单的是这个叫InternalResourceViewResolver的视图解析器,表示在视图名字加上/WEB-INF/views/前缀和.jsp后缀形成路径,然后在该路径下寻找具体视图,如/WEB-INF/views/home.jsp。

登录例子

       好,现在再回到我们的登录例子中来。具体功能是用户输入用户名和密码,登录成功后在新页面展示用户输入的用户名和密码。

1、编写控制器

在HomeController中设置home方法响应所对"/"下的请求,并返回到登录视图login。

@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home() {
		return "login";
	}
2、编写登录页面

在views目录下添加login.jsp,在表单form中添加动作目的地址login,请求方法为post。

<h1>
	你好!请输入账号和密码!  
</h1>
<form action="login" method="post"> 
账号:<input type="text" name="username" required="required"/>
密码:<input type="password" name="password"  required="required"/>
<input type="submit" value="登录"/>
</form>
3、编写响应login路由的方法

在HomeController中编写响应login路由的方法,验证用户名密码,成功则返回结果视图result.jsp,否则返回login.jsp。

/*
	 * 拦截对login路由的访问
	 * */
	@RequestMapping(value = "login", method = RequestMethod.POST)
	public String login(String username,String password,Model model) {
		        //验证传递过来的参数是否正确,否则返回到登陆页面。
				if(username.equals("gameloft9")&&password.equals("123")){
					model.addAttribute("username", username);//往数据模型中添加数据
					model.addAttribute("password", password);
					return "result";//返回视图名称"result"
				}
				return "login";//返回登录页面
	}
3、编写结果页面

在views目录下添加result.jsp,显示传递过来的模型数据(这里是用户名及密码)。

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>结果</title>
</head>
<body>
<h2>登陆成功!</h2>   
用户名:${username }  
<p>  
密码:${password }  
</body>
</html>


运行截图



从上面可以看到访问localhost:8080/logindemo/,跳转到了login.jsp页面。



输入错误的用户名和密码,跳转到了localhost:8080/logindemo/login路由,这个是form表单的action指定的,由于用户名密码错误,所以还是返回的登录页面login.jsp。



如果用户名密码正确,则返回的是结果页面result.jsp。请注意目的路由仍然是localhost:8080/logindemo/login。也就是说路由与视图页面没有确定的一对一关系。


好了,这就是一个简单的Spring MVC登录例子,希望能帮助你入门。


工程源码已经上传到GitHub:https://github.com/gameloft9/SpringMVCLoginDemo。

另外也在CSDN上留存的一份:http://download.csdn.net/detail/gameloft9/9582346。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值