springmvc环境搭建及实例
一. 软件环境
eclipse-jee-mars-R-win32-x86_64
jdk1.7.0_79
apache-tomcat-7.0.52
spring-framework-3.2.0.RELEASE-dist
二. 环境搭建及实例
2.1 新建动态web工程
2.2 导入jar包
2.3 配置Spring MVC前端控制器和访问的url
在web.xml中配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SpringMVC</display-name> <!-- 配置SpringMVC DispatcherServlet(前端控制器) -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定Spring MVC启动所需加载的配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <!-- 配置DispatcherServlet所要拦截的url -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> </web-app>
其中:
a) 9~13行用于指定Spring MVC启动所需加载的配置文件,这里的配置含义是指在src目录下。默认为WEB-INF目录下,名称为[servlet-name]-servlet.xml,如spring-servlet.xml
<!-- 指定Spring MVC启动所需加载的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
b) 14行含义为:标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet。
当是一个负数或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
(为什么不是true或false呢?这是因为如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序)。
c) 18~21行表示拦截的模式。这里是"/"表示对所有的请求都进行拦截,包括静态资源如js,css,jpg等。关于拦截的模式以及如何访问静态资源详细请看另一篇:SpringMVC访问静态资源的springmvc.xml配置。
2.4 既然12行指示需要加载src目录下的一个名为springmvc.xml文件,接下来创建该文件
创建springmvc.xml:
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 注解扫描(实现方式四), 通过扫描将带有@Controller注解的类交由spring容器管理并维护 -->
<context:component-scan base-package="com.pers.controller"/> <!-- 处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean> </beans>
其中:
a) 2~16行这些文件头详细介绍请看另一篇文章:XXXXXX。
b) 19行表示指定注解扫描的范围,这里是"com.pers.controller"即:扫描com.pers.controller包下的所有文件(当然,首先需要创建package:com.pers.controller)。
c)22、25行分别配置处理器映射器和处理器适配器,实际开发中,使用下面注解驱动的方式代替上面两种配置(更简洁),使用这种配置默认加载了很多需要的类型转换器,如json,还可以将自定义类型转换器添加到该配置中。
<!-- 注解驱动自动注册组件, 处理器映射器和处理器适配器通过注解驱动的方式配置代替下面的处理器映射器和处理器适配器 -->
<mvc:annotation-driven/>
c) 28~31行,配置视图解析器ViewResolver,通过配置逻辑地址(前缀和后缀),将ModelAndView对象进行拆分,将model对象渲染到视图页面。如果不配置ViewResolver,Spring MVC默认依然将org.springframework.web.servlet.view.InternalResourceViewResolver作为ViewResolver,但是prefix和suffix的value都为空。
2.5 创建index.jsp(WebContent下)
<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SpringMVC登录页面</title>
</head>
<body>
<h2>SpringMVC示例</h2>
<form action="./user/login" method="post">
username:<input type="text" id="name" name="username" /><br/>
password:<input type="password" id="password" name="password" /><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
其中:
a) 11行action="./user/login"表示请求的url,method="post"表示post请求。
2.6 创建UserController类(com.pers.controller包下)
package com.pers.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView; /**
* @author liangyadong
* @date 2017年2月28日 下午2:25:39
* @version 1.0
*/
@Controller
@RequestMapping("/user")
public class UserController { @RequestMapping(value="/login",method={RequestMethod.POST,RequestMethod.GET})
public ModelAndView login(String username, String password){
ModelAndView mv = new ModelAndView();
// 指定返回页面loginSucc.jsp
mv.setViewName("loginSucc");// 当不配置视图解析器的时候,参数loginSucc改为:/WEB-INF/jsp/loginSucc.jsp
// 设置返回信息
mv.addObject("msg", "欢迎,登录成功!");
return mv;
} }
其中:
a) 13行@Controller注解,表明自己是一个Controller。
b) 14行@RequestMapping("/user")注解,和17行@RequestMapping(value="/login")注解共同组合为/user/login作为jsp中请求的url。/user注解放在类上,/login注解放在方法上并且与方法名login()相同。之所以拆开,目的是分类化管理Controller,这一点称为“窄化请求”。
c) 14行@RequestMapping(value="/login",method={RequestMethod.POST,RequestMethod.GET})的method限定请求方法。
d) 21行指定返回的页面loginSucc.jsp,不是瞎返回的,这个jsp的位置是和springmvc.xml配置文件的视图解析器相匹配的,视图解析器前缀"/WEB-INF/jsp/",后缀".jsp",意思就是返回这个目录下的页面loginSucc.jsp。
e) 关于Controller的返回值可以参考另一篇文章:XXXXXX
2.7 创建返回成功的页面
创建loginSucc.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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SpringMVC欢迎页面</title>
</head>
<body>
返回信息:${msg}
</body>
</html>
2.8 测试
将该动态工程加入tomcat,启动tomcat,打开浏览器地址栏输入:localhost:8080/SpringMVC/index.jsp,如下图所示:
点击"登录",成功跳转到登录成功页面如下图:
三. 附图
3.1. 最终项目结构图:
四. 总结
以上是Spring MVC基于注解的实现方式,也是最常用的方式。除了注解还有非注解的实现方式,非注解的实现方式是通过实现Controller接口或HttpRequestHandler接口,但是这种方式仅仅实现了一个方法(handlerRequest()),而在实际开发中一个Controller往往代表一个模块,该模块下会有许多方法,那么非注解的实现方式显然不合适了,于是就通过注解的方式实现来解决。
默认加载的配置信息(在web.servlet中的DispatcherServlet.properties中配置了默认的各种器)详见下图:
可以看到,该文件里面加载了处理器映射器、处理器适配器、视图解析器。
SpringMVC环境搭建并不难,重要的是要看源码。
springmvc环境搭建及实例的更多相关文章
- SpringMVC环境搭建和详解
1.Spring容器和SpringMVC容器是父子容器 1.1 SpringMVC容器可以调用Spring容器中的所有内容 1.2 图示 2.SpringMVC环境搭建 1.导入jar包 2.在web ...
- springmvc环境搭建以及常见问题解决
1.新建maven工程 a) 打开eclipse,file->new->project->Maven->Maven Project b) 下一步 c) 选择创建的工程为 ...
- spring入门(五)【springMVC环境搭建】
springMVC作为spring的一个WEB组件,是一个MVC的思想,减少了WEB开发的难度,现介绍springMVC环境的搭建,具体的原理放在后面介绍.用过框架的朋友都知道要在WEB项目中使用一个 ...
- monkeyrunner之环境搭建及实例(三)
Monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器. 一.Monkeyrunner简介 1.MOnkeyrunner相对Mo ...
- SpringMvc环境搭建(配置文件)
在上面的随笔里已经把搭建springmvc环境的基本需要的包都下下来了,拉下来就是写配置文件了. 下面左图是总的结构,右图是增加包 一.最开始当然是web.xml文件了,这是一个总的宏观配置 < ...
- Struts2环境搭建及实例解析
与struts1框架的使用一样,struts2的环境搭建及使用同样分为以下几个步骤: 1. 引入jar包(这里以struts2.2.3为例),所需jar包有以下几个: a) s ...
- SpringMVC 环境搭建
SpringMVC 框架环境搭建操作步骤如下: 创建动态 Web 项目 配置 Tomcat 服务器 配置 SpringMVC 前端控制器 <?xml version="1.0" ...
- Struts2(一)---struts2的环境搭建及实例
刚刚接触struts2,有点懵懵懂懂,还是习惯于先写代码,然后慢慢来理解其中的思想. 这篇文章主要内容是strusts的环境搭建及通过一个简单的例子来理解到底是怎么使用struts来简化编程的. 1. ...
- 我的第一个MVC程序(SpringMVC的环境搭建与实例运用)
做一个完整点的mvc框架的搭建流程吧 Spring包含jar包下载 SpingMVC是基于Spring的一种关于web的解决方案,所以,使用springMVC,首先要准备有关Spring的一些jar包 ...
随机推荐
- (转)SQL Server 列转行
原文:http://www.myexception.cn/sql-server/1078985.html1,2,3,4,5以上是一个字符串或则一逗号分隔的数字. 这里希望用一条语句查询出这样的效果: ...
- 用Python语言写Hadoop MapReduce程序Writing an Hadoop MapReduce Program in Python
In this tutorial I will describe how to write a simple MapReduce program for Hadoop in the Python pr ...
- 使用Scala
1. 净资产应用实例 我们要构建这样一个应用,它会取回一份列表,其中包括用户持有的股票的代码以及股份,并告知他们在当前日期为止的这些投资的总价.这包含了几件事:获取用户输入.读文件.解析数据.写文件. ...
- Redis:ERR operation not permitted
Redis服务开启之后: D:\Redis\redis>redis-server.exe redis.conf 那么另外开一个命令窗口 D:\Redis\redis>redis-cli.e ...
- JSTORM使用笔记
安装部署 zeromq 简单快速的传输层框架,安装如下: wget http://download.zeromq.org/zeromq-2.1.7.tar.gztar zxf zeromq-2.1.7 ...
- 关于asp.net页面缓存
1,ASPX页面缓存 页面缓存的使用方法非常的简单,只需要在aspx页的顶部加一句声明<%@ OutputCache Duration="60" VaryByParam=&q ...
- [Vue warn]: Error in render: "TypeError: Cannot read property '0' of undefined、vuejs路由使用的问题Error in render function
1.[Vue warn]: Error in render: "TypeError: Cannot read property '0' of undefined 注意,只要出现Error i ...
- 使用ECharts实现数据图表分析
一.ECharts介绍 实现对统计数据的图形分析之前用过JFreeChar,但它是用纯java实现编码繁琐且效果不佳,后来又使用过Fusioncharts 报表工具,它是基于Flash的图表组件.以X ...
- fatal error C1853: '<filename>' is not a precompiled header file
当编译c和c++混合的项目时,会出现如下类似的错误 fatal error C1853: '<filename>' is not a precompiled header file 解决方 ...
- Spring 在XML中声明切面/AOP
在Spring的AOP配置命名空间中,我们能够找到声明式切面选择.看以下: <aop:config> <!-- AOP定义開始 --> <aop:pointcut/> ...