`

spring mvc简单总结

    博客分类:
  • java
阅读更多
请求上来之后导到DispatcherServlet控制器,

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml,classpath:action-servlet.xml,classpath:applicationContext-security.xml</param-value>
  </context-param>


 
1、控制器Controller【多种可选,比如常用的AbstractController、AbstractCommonController等等,详细查看spring in action那本书】
2、处理器DispatcherServlet
3、上下文加载器ContextLoadListener
4、默认处理器映射Bean【可同时用多个,使用多个时候,优先级由order决定】
a)、BeanNameUrlHandlerMapping,默认(默认不用声明),直接按照名称查找(可选的有四种)
b)、SimpleUrlHandlerMapping  上下文配置文件中的定义的属性集合将控制器映射到URL
c)、ControllerCalssNameHandlerMapping  通过控制器的类名作为URL的基础将控制器映射到URL
d)、CommonsPathMapHandlerMapping 
5、视图解析器Bean 将ModelAndView的第一个参数对应到具体的jsp,比如InternalResourceViewResolver使用比较简单

提问
1、怎么知道在HomePageController里就执行handleRequestInternal这个方法
2、如何对请求里的参数进行校验
3、提


默认情况下,和DispatcherServlet绑定的spring的配置文件例如springMVC.xml都
是在WEB-INF目录下,但是我们实际开发中不可能都放在这个目录下,所以需要配置
一下和DispatcherServlet绑定的spring的配置文件,这样开发更好更方便,怎么
配置呢,在配置DispatcherServlet的时候加一个参数init-param
  <servlet>
  	<servlet-name>roadrantz</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  		<init-param>
  			<param-name>contextConfigLocation</param-name>
  			<param-value>classpath*:/config/roadrantz-servlet.xml</param-value>
  		</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>roadrantz</servlet-name>
  	<url-pattern>*.htm</url-pattern>
  </servlet-mapping>

 
同一个Controller里书写多个方法,想要调用不同方法,就需要配置方法名称解析器,
例如:
	<bean id="paramMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
		<property name="paramName" value="action"></property>
	</bean>

然后在相应的Controller里面引入该方法名称解析器,例如:
	<bean name="/muti.htm" class="com.test.controller.MultiController">
		<!-- 配置方法名称解析器 -->
		<property name="methodNameResolver">
			<ref bean="paramMethodResolver"/>
		</property>
	</bean>

请求的时候通过action参数来传递方法名称来指定调用的具体方法,例如:
http://localhost:8000/SpringMVC_Test2/muti.htm?action=add

spring mvc访问静态文件的时候,假如DispatcherServlet配置的访问路径匹配符为
/(匹配所有请求),那么这时spring mvc访问静态文件(Js、图片等)会有问题,访问
不到。需要在spring mvc的配置文件里加一段代码:
<mvc:resources location="/img/" mapping="/img/**"/>
这段代码告诉spring mvc  img这个下面所有的文件直接访问就可以了,不要拦截了,
不要再去spring mvc的配置文件里去找相匹配的请求处理器了,直接访问就行了。
或者另一种解决方案是不要把DispatcherServlet配置的请求访问路径设置成全部


spring mvc最方便还是使用它的注解

如何开启注解:
    <!-- spring mvc配置注解扫描包 -->
   	<context:component-scan base-package=""></context:component-scan>
   	<!-- 下面两个是spring mvc 注解的两个启动类(开启注解) -->
   	<!-- 注解查找方法映射 -->
   	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
   	<!-- 注解查找类映射 -->
   	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

  
spring mvc常用注解:
@Controller【配置类】
@RequestMapping(value="/user/delUser.htm", method=RequestMethod.GET)【配置方法】
在类上面也可以配置@RequestMapping(value="/user"),这样访问某个方法的时候请求地址是类的加上方法的RequestMapping配置

更简洁的写法是:@RequestMapping("/user")

Controller里面的方法代码模板一般是这样的:
	@RequestMapping(value="/user/delUser.htm", method=RequestMethod.GET)
	public ModelAndView delUser() {
		String result = "this is delUser-----------";
		return new ModelAndView("annotation", "result", result);
	}

但是其实还可以更简洁:
	@RequestMapping(value="/user/delUser.htm")
	public String delUser(HttpServletRequest request) {
		String result = "this is delUser-----------";
		request.setAttribute("result",result);
		return "annotation";
	}

这样岂不是变的更简单。


重点:spring 3.0里面提出了对开启注解的优化,可以通过如下配置来替换注解的两个启动类
<mvc:annotation-driven/>
配置上面这个之后,就不需要配置spring mvc注解的两个穷类了。

spring mvc传递参数:
在jsp标签里面的name名称和Controller里面的参数名称相同,然后就自动赋值了,想要在Controller里的方法返回的时候还带着
参数,那么就需要在Controller里的方法里将需要携带的参数放到request里面(每个方法里都可以有HttpServletRequest request
参数,方法返回时需要携带参数的时候就在此方法的参数列表里把此参数加上即可)。
下面讲解传递参数一些规则,例如:
	public String addUser(String userName, String age, HttpServletRequest request) {
		
		request.setAttribute("userName", userName);
		request.setAttribute("age", age);
		
		return "/userManager";
	}

这就是上面描述的传参方式;
	public String addUser2(User user, HttpServletRequest request) {
		request.setAttribute("userName", user.getUserName());
		request.setAttribute("age", user.getAge());
		return "/userManager";
	}

这种是针对参数个数比较多的情况下的时候直接定义一个实体,参数直接以实体形式传递(像这里就定义了一个User实体,
实体里面有String userName,String age两个参数),这种传参方式就简化了。只要jsp页面上有name为userNamen和age这两个名称
的标签即可。

下面讲解json格式传递参数:

下面讲解spring mvc文件上传功能:
上传文件解析器配置:
<bean id="mutipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="defaultEncoding" value="utf-8"/>
	<property name="maxUploadSize" value="10485760000"/>
	<property name="maxInMemorySize" value="40960"/>
</bean>

这篇文章描述了一些文件上传的相关知识:
http://blog.sina.com.cn/s/blog_8fb83eec0100wm1r.html

另外在文件上传的页面上的form表单里一定要标注出enctype="multipart/form-data"此属性。
并且也必须设置method="post",文件上传必须设置method属性。
(enctype属性表示在表单提交之前要对提交内容怎样编码,在上传文件的情况下一定要设成multipart/form-data)
<input type="file" name="file">

Spring通过对Servlet API的HttpServletRequest接口进行扩展,使其能够很好地处理文件上传。扩展后的接口名为
org.springframework.web.multipart.MultipartHttpServletRequest

interface MultipartHttpServletRequest extends HttpServletRequest{
	public MultipartFile getFile(String name);
	public Map getFileMap();
	public Iterator getFileName();
}


上传文件相关事例见SpringMVC_Test4项目(这种方式上传文件比较慢,这里面自己读取文件,而spring又提供了一种
另一种更快的上传方式,spring帮助我们读取文件,这种的会使上传速度变的更快,下面介绍这种更快的上传方式)
http://blog.csdn.net/a1314517love/article/details/24183273

上传更快的方式也是在SpringMVC_Test4项目里


下面讲解spring mvc和spring的集成:

web容器的启动顺序:
1、第一个加载context-param元素,表示根目录的参数,负责xml里边的一些文件的加载。
2、第二个启动Listener。
3、然后启动filter。
4、最后启动Servlet。


配置spring启动监听器org.springframework.web.context.ContextLoaderListener的时候,默认是自动去WEB-INF目录下去找
applicationContext.xml配置文件并加载,怎么修改这种默认规则呢?(我就不想把配置文件放在WEB-INF目录下,怎么办呢?)
在web.xml文件里采用下面这种方式配置,
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath*:config/applicationContext.xml</param-value>
</context-param>

然后web容器就会到指定的目录下去加载applicationContext.xml配置文件,而不会在默认的去WEB-INF目录下找相应的配置文件。

在servlet中获取context-param配置参数:String paramValue=getServletContext().getInitParameter("contextConfigLocation");
相关context-param配置的说明详见:
http://hain.iteye.com/blog/70731
http://zhidao.baidu.com/link?url=7iOp55M4bZRXMi3VvQluYHGR_oy0FJiyiOqblZTPHYwBG_fDGMimTFeNQHzKmSXTCdaDrXJ3lI45RaZRLUtIL_
http://blog.csdn.net/jubincn/article/details/9115205


spring mvc一些基本讲解:http://elf8848.iteye.com/blog/875830 (这里面主要看spring拦截器、全局异常处理等。最主要看
十一之后几节的内容,而且这里面也讲解了如何获取spring bean对象)


相关示例项目代码见网盘:http://pan.baidu.com/s/1eQrOVLK
分享到:
评论

相关推荐

    spring mvc mybatis 整合源码,带数据库脚本,带详细注释

    总结,这个压缩包提供了一个完整的Spring MVC和MyBatis整合的示例,包含了数据库脚本和详尽的注释,无论你是初学者还是有经验的开发者,都能从中受益。通过研究源码,你可以掌握Web应用的开发流程,理解Spring MVC和...

    spring mvc简单的例子和教程

    在本教程中,我们将深入探讨Spring MVC的基本概念、配置、以及如何创建一个简单的示例。 首先,Spring MVC的核心概念包括DispatcherServlet、Controller、Model、View和ViewResolver。DispatcherServlet是Spring ...

    spring mvc集成webservice

    总结来说,Spring MVC集成Web服务是一项关键技能,它允许我们构建能够与其他系统无缝通信的应用。通过理解Spring MVC的MVC模式,掌握Web服务的基本原理,以及学习如何在Spring环境中配置和调用Web服务,开发者可以...

    Spring MVC学习指南

    接下来,我们将通过一个简单的用户登录示例来深入了解 Spring MVC 的工作原理。 ##### 3.1 登录界面 登录界面通常由一个简单的 HTML 表单组成,用于收集用户的用户名和密码。例如: ```html 登录 ...

    SSM(spring+spring MVC+mybatis)开发学生信息后台管理系统

    SSM(spring+spring MVC+mybatis)开发学生信息后台管理系统,实现学生增删改查功能设计一个简单的学生信息管理系统,要求使用SSM框架技术整合实现,用户登录后能够通过Web页面添加、删除、修改和查询学生信息 ...

    Spring MVC简单示例

    总结来说,Spring MVC提供了一种强大的方式来构建Web应用程序,它的注解驱动和模块化设计使得开发过程更加简洁和高效。通过阅读源码和实践,开发者可以深入理解其工作原理,从而更好地利用这个框架。

    helloworld spring mvc

    总结来说,"helloworld spring mvc"项目是学习和理解Spring MVC框架的起点,它展示了Spring MVC如何处理HTTP请求,如何组织业务逻辑,以及如何呈现结果。通过实践这个项目,开发者可以逐步掌握Spring MVC的使用,为...

    Spring Mvc实例

    在本实例中,我们将探讨如何利用Spring MVC的注解来简化前后台交互,以及如何实现简单视图控制和数据操作。 首先,Spring MVC的核心组件包括DispatcherServlet、Controller、ModelAndView、ViewResolver等。...

    Expert Spring MVC

    ### Expert Spring MVC 相关知识点概述 #### 一、Spring MVC 概述 Spring MVC 是 Spring Framework 的一个重要模块,主要用于构建基于 Java 的 Web 应用程序。它提供了一个清晰的模型-视图-控制器(Model-View-...

    Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)所有实验及实验报告.zip

    本教程专注于使用Spring、Spring MVC和MyBatis这三个关键组件进行实战教学。这三者构成了Java EE开发中的重要支柱,为开发者提供了强大的功能和灵活性。 Spring框架是Java EE开发的核心,它是一个全功能的容器,...

    Spring MVC REST Demo

    总结来说,"Spring MVC REST Demo"项目展示了如何在Spring MVC框架中利用REST原则创建Web服务。这包括定义Controller,标注HTTP方法,处理资源URI,以及进行数据交换。通过学习这个示例,开发者可以更好地理解和实践...

    spring mvc例子

    总结来说,Spring MVC 提供了一个强大的框架,用于构建 MVC 结构的 Web 应用程序。它的核心特性包括依赖注入和面向切面编程(AOP),这些特性使得开发过程更加高效和灵活。通过学习和实践这个入门级别的 Spring MVC ...

    将spring mobile集成到spring mvc

    总结来说,集成Spring Mobile到Spring MVC项目中主要包括以下步骤: 1. 添加Spring Mobile依赖。 2. 配置Spring MVC以使用DeviceDelegatingViewResolver和DeviceResolverHandlerInterceptor。 3. 创建针对不同设备...

    Spring MVC框架实例

    总结,Spring MVC 为开发者提供了灵活且强大的 Web 开发框架,通过 XML 配置,我们可以自定义各个组件,实现复杂的应用场景。随着版本的升级,Spring 逐渐引入了更多的注解配置,使得开发更加简洁高效。不过,理解 ...

    spring mvc demo

    总结起来,"spring mvc demo"项目提供了一个学习和实践Spring MVC的平台,通过这个项目,你可以了解如何配置和使用Spring MVC的各个组件,以及如何通过注解进行控制器的定义和请求的映射。通过深入研究和实践,你将...

    Spring mvc portlet demo

    这个文件可能是一个示例的书目目录portlet,它展示了如何在Spring MVC Portlet中创建一个简单的图书检索系统。可能包含以下几个部分: - `Book`模型类:表示图书实体,包括书名、作者等属性。 - `BookService`接口和...

    最新maven搭建的Spring mvc的demo

    这个"最新maven搭建的Spring MVC的demo"是一个很好的学习资源,它展示了如何使用Maven来构建一个简单的Spring MVC应用。通过这个例子,初学者可以了解Spring MVC的核心组件和Maven的项目构建流程,为后续深入学习和...

Global site tag (gtag.js) - Google Analytics