springMvc实用开发
来源:互联网 发布:战地使命召唤知乎 编辑:程序博客网 时间:2024/06/07 23:35
一、简介
springMvc是基于模型-视图-控制器(Model-View-Controller)模式的web层应用框架。
二、请求流程
1、springMvc是围绕DispacherServlet(其实也就是一个Servlet)展开的,也就是说,通常DispatcherServlet会拦截所有请求,
之后在DispatcherServlet进行请求的分发处理。
2、在DispatcherServlet中,客户端请求到响应通常需经历以下流程:
request 一> handlerMapping(request与handler的映射关系) 一> handler(handlerAdapter封装) 一>
ModelAndView(包含数据与逻辑视图名称) 一> viewResolver(逻辑视图到真实视图的解析) 一>view(使用数据渲染真实视图)。
总结下流程,客户端请求到DispatcherServlet后,通过handlerMapping查找请求对应的控制器handler,
接着控制器handler处理请求并产生数据与逻辑视图,再根据viewResolver将逻辑视图解析为真实视图(视图模板),
最后使用之前生成的数据渲染最终需要的视图,返回给客户。
三、开发流程
在基于spring的web开发中,所有的spring配置都是在web.xml文件中进行加载的。
1、在web.xml文件中,添加配置监听器org.springframework.web.context.ContextLoaderListener (实现了ServletContextListener接口)
如:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>2、在web.xml文件中,通过context-param添加配置文件
如:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config.xml</param-value></context-param>3、在web.xml文件中,添加DispathcerServlet及对应的配置文件、拦截路径(通常是/,即所有的)
如:
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcher-servlet.xml</param-value> </init-param></servlet><servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern></servlet-mapping>4、spring配置文件spring-config.xml编写,在此略过
5、在DispathcerServlet配置文件dispatcher-servlet.xml中,添加对注解的支持
即
<context:component-scan base-package="com.dragon.springmvcStudy" />
6、在DispathcerServlet配置文件dispatcher-servlet.xml中,添加映射器handlerMapping,
在这里,通过注解可以简化开发,即
<mvc:annotation-driven />里面包含了映射器注解、校验等信息。
7、在DispathcerServlet配置文件dispatcher-servlet.xml中,添加视图解析器viewResolver
如
<!--视图解析 委托给一个或多个视图解析器进行解析--><bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="viewResolvers"> <list> <!--根据前缀和后缀,在war文件中查找视图模板--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/view/" /> <property name="suffix" value=".jsp" /> </bean> </list> </property> <!--默认视图--> <property name="defaultViews"> <list> <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" /> </list> </property></bean>
其中,ContentNegotiatingViewResolver 是委托给一个或多个视图解析器进行解析
,InternalResourceViewResolver是根据前缀和后缀来查找视图模板,当然还有其它的模板,这里是通用的。
8、在DispathcerServlet配置文件dispatcher-servlet.xml中,添加静态资源访问配置
如:
<mvc:resources mapping="/static/**" location="/WEB-INF/static/" />这样,静态资源将不通过控制器,直接返回。
9、在DispathcerServlet配置文件dispatcher-servlet.xml中,如有需要,可以添加不经过控制器,直接访问页面的配置,
如
<mvc:view-controller path="/directPage" view-name="directPage" />10、在DispathcerServlet配置文件dispatcher-servlet.xml中,如有需要,可以添加拦截器配置,进而对指定请求进行拦截处理,
如
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.dragon.springmvcStudy.interceptor.HelloInterceptor" /> </mvc:interceptor></mvc:interceptors>其中拦截器需实现org.springframework.web.servlet.HandlerInterceptor接口,内部有三个方法:
preHandle:controller处理前调用,返回true,则后续接点继续处理请求,返回false,则直接返回给用户,后续接点不再处理;
postHandle:controller处理请求后(同时页面渲染前)调用
afterCompletion:页面渲染结束后调用
11、在DispathcerServlet配置文件dispatcher-servlet.xml中,如有需要,可以进行文件上传相关配置,
如:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--单位是字节--> <property name="maxUploadSize" value="10241000" /> <!--上传文件编码 默认是ISO-8859-1 --> <property name="defaultEncoding" value="utf8" /> <!--上传文件默认路径--> <property name="uploadTempDir" value="upload" /></bean>注意:文件上传需要依赖两个包,分别是commons-io和commons-fileupload这两个包,同时文件上传的url路径名称不能是upload(特别注意,这是一个坑)
四、代码实例
1、添加maven依赖
2、web.xml配置<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.4.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.4.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.4.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.4.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.4.RELEASE</version></dependency><dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version></dependency><dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope></dependency><dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> <scope>provided</scope></dependency><dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version></dependency><dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.6</version></dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version></dependency><dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-lgpl</artifactId> <version>1.8.1</version></dependency><dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version></dependency>
<?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_2_5.xsd" version="2.5"> <display-name>springMvcStudy</display-name> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config.xml</param-value> </context-param> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcher-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping></web-app>3、dispatcher-servlet.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--注解支持--> <context:component-scan base-package="com.dragon.springmvcStudy" /> <!--静态资源--> <mvc:resources mapping="/static/**" location="/WEB-INF/static/" /> <!--映射器注册,其中还包含了校验、转换等信息--> <mvc:annotation-driven /> <!--不经过控制器,直接返回视图--> <mvc:view-controller path="/directPage" view-name="directPage" /> <!--视图解析 委托给一个或多个视图解析器进行解析--> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="viewResolvers"> <list> <!--根据前缀和后缀,在war文件中查找视图模板--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/view/" /> <property name="suffix" value=".jsp" /> </bean> </list> </property> <!--默认视图--> <property name="defaultViews"> <list> <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" /> </list> </property> </bean> <!--拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.dragon.springmvcStudy.interceptor.HelloInterceptor" /> </mvc:interceptor> </mvc:interceptors> <!--文件上传解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--单位是字节--> <property name="maxUploadSize" value="10241000" /> <!--上传文件编码 默认是ISO-8859-1 --> <property name="defaultEncoding" value="utf8" /> <!--上传文件过程中的临时路径,一旦上传完成,则文件将被删除--> <property name="uploadTempDir" value="upload" /> </bean></beans>
5、拦截器interceptor实例
public class HelloInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { System.out.println("HelloInterceptor preHandle: "+new Date()); return true; } public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("HelloInterceptor postHandle: "+new Date()); } public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("HelloInterceptor afterCompletion: "+new Date()); }}6、控制器Controller实例
@Controller@RequestMapping("/")public class IndexController { @RequestMapping("index") public String index(Model model){ model.addAttribute("name","china"); return "index"; } @RequestMapping("showjson") @ResponseBody public String showJson(){ return "json string"; } @RequestMapping("myUpload") public String upload(@RequestParam MultipartFile multiFile){ try{ String fileName = multiFile.getOriginalFilename(); System.out.println("fileName: "+fileName); multiFile.transferTo(new File("E:/tmp/"+fileName)); //保存文件 }catch (Exception e){ } return "index"; }}7、页面jsp实例
<html><script type="text/javascript" src="/static/js/t.js"></script><body><h2>this is index</h2>hello,${name}<form method="post" action="/myUpload" enctype="multipart/form-data" > <input type="file" name="multiFile"> <button type="submit">submit</button></form></body></html>
上述是一些关键的代码,像spring自身配置spring-config.xml这些,在此不多述。
- springMvc实用开发
- springmvc+activeMQ简单实用
- Java Web开发SpringMVC和MyBatis框架开发环境搭建和简单实用
- springMVC开发
- SpringMVC 开发
- SpringMVC开发
- 解决乱码,Springmvc,ssh。都实用
- spring实用注解(二)--springMvc注解
- 实用EJB开发技巧
- VBA开发实用指南
- 开发实用网站
- ExtJS实用开发指南
- .net开发实用组件
- Android开发实用网站!
- ABAP开发实用快捷键
- 杂七杂八开发实用网站
- web开发实用链接
- linux开发实用操作
- 机器人技术(9)AtdRobot读取激光雷达数据教程
- Matlab连接MySQL并实现简单的数据库操作
- Spark伪分布式搭建
- 在NotePad++中安装DBGP debugger调试PHP程序
- #2 组件生命周期
- springMvc实用开发
- 常用的命令知识大全
- 关于MATLAB中imfilter函数的说明
- Javascript装饰器与转发, call/apply
- 观察者设计模式
- MySQL语法大全
- poj 1321 棋盘问题 状压dp
- 欢迎使用CSDN-markdown编辑器
- 设计模式之装饰模式