SpringMVC框架的详细操作步骤和注解的用法

springMVC操作步骤:

第一步:导入jar(spring4个核心+日志+spring-web+spring-webmvc+spring-aop)

第二步:在web.xml中配置前端控制器(servlet),并读取springmvc的资源文件springmvc.xml

	<servlet>
		<servlet-name>springDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<!-- 加载资源文件 -->
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

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

如果不手动添加资源文件的话,springmvc默认的资源文件位置在WEB-INF下,默认文件名为:servlet名-servlet.xml.

第三步:建立springmvc.xml的资源文件,并进行controller包扫描和配置视图解析器

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<context:component-scan base-package="com.sms.springmvc.controller"></context:component-scan>

</beans>

第四步:在类上加@Controller注解,代表这是一个处理请求的类

第五步:在方法上添加@RequestMapping注解,其中value属性的值为用户请求的地址.

@RequestMapping注解详解:

@RequestMapping属性包含以下几个:

①value:请求路径和value属性值一致时,该注解标注的方法即为处理请求的方法
②method:用来设置处理请求的方式,客户请求的方式和method属性的值一致时才可以处理请求.
③parmas:用来设置客户端传到服务器端的数据必须符合某些规则.要求请求路径必须带有parmas属性的值才能处理该请求.

@RequestMapping作用的位置:
①放在方法上:
只对该方法有效

②放在类上:
对当前类的所有方法有效
放在类上时一般只使用value属性.加上value属性后访问路径变成:项目名/类上的value值/方法上的value值

@RequestMapping支持Ant方式的访问路径:
*:表示任意一层目录
?:表示任意一个字符
**:表示任意多层目录

REST风格:使用@PathVariable获得占位符的数据,并赋值给形参

SpringMVC获取客户端传来的参数的方式:

①在处理器的方法中加入对应的形参,保证处理器的形参和请求的参数name一致
若一致就可以自动赋值.若不一致使用@RequestParam
@RequestParam的value属性:通过value指定映射关系
如:@RequestParam(value=“name”)String username,可以指定前端传过来的name输入框的值赋值给username这个形参.
@RequestParam的required:取消自动装配的必须性
如:@RequestParam(value=“name”,required=false),若前端没有名为name这个输入框,服务器也不会报错,有则获取,没有则为空值.
@RequestParam的defaultValue:默认值,没有传参时使用该值

②使用pojo对象接收数据:当pojo对象的属性和客户端表单name 的值一致时可以接收数据,且支持级联关系

③使用servlet原生API获取参数:如:HTTPServletRequest,HttpServletRespnse,HttpSession

SpringMVC中controller方法的返回值:

①使用ModelAndView存值并进行跳转,方法的返回值为ModelAndView类型

②返回void,使用servlet原生APIrequest和response实现存值和跳转.

③返回String,直接return " 资源路径"实现转发操作,return "redirect: 资源路径"实现重定向操作,形参中传入Model对象,使用model对象进行存值,存在request域中

设置视图的方式不一样后台所创建的视图类型也不一样.

①使用转发的方式:return “资源路径”;后台会创建一个InternalResourceView对象,对该资源路径进行解析,解析后执行getRequestDispatcher().forward(request,response)命令

②使用重定向的方式:return “redirect:资源路径"的方式,后台会创建一个RedirectView对象,对该资源进行解析,解析后执行sendRedirect(”")命令.

< mvc:default-Servlet-handler/>标签的作用:

配合< mvc:annotation-driven/>标签,把项目中的静态资源文件(如js文件,css文件)交给tomcat中默认的servlet去处理,不经过前端控制器的处理.

@ResponseBody的作用:

一个处理器若加上了@ResponseBody这个注解,那么该处理器里面就不能在实现页面的跳转。就算返回一个字符串,也会将该字符串作为一个数据响应到客户端。返回的任何类型都会转化为json对象。但需要jackson的jar包的支持.因为springMVC底层使用jackson技术进行数据格式的转换.

Json有两种形式:①Json对象:{key:value,key:value,…};②Json数组:[{key:value,key:value…},{key:value,key:value…},…]

步骤一:加入jackson的jar包(三个).
步骤二:在springMVC.xml中开启mvc注解驱动.
步骤三:在需要转化为json数据的处理器上面加上@ResponseBody注解.
步骤四:在需要转换为json数据的对象直接作为返回值返回.

示例:
①控制器向客户端响应一个json数据类型的list集合:

@Controller
public class TestController {

	@RequestMapping("testJson")
	@ResponseBody
	public List<User> testJson(){
		ArrayList<User> list = new ArrayList<>();
		User user1 = new User(1001, "张三", "男", 12);
		User user2 = new User(1002, "李四", "男", 22);
		User user3 = new User(1003, "王五", "男", 32);
		User user4 = new User(1004, "赵六", "男", 42);
		list.add(user1);
		list.add(user2);
		list.add(user3);
		list.add(user4);
		//返回的list集合到客户端后就回转化成json格式
		return list;
	}
}

②客户端执行ajax请求,希望响应回一个json的数组:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.11.3.min.js"></script>
	
	<script type="text/javascript">
		//文档加载函数
		$(function(){
			$("#btn").click(function(){
				//执行ajax请求,请求路径为controller中的testJson这个控制器
				$.post("testJson",function(data){//data装载返回的list集合
					
					//循环遍历出data里面的json数组
					$(data).each(function(i,u){
						$("body").append("

id="+u.id+",username="+u.username+",gender="+u.gender+",age="+u.age +"

"
) }) },"json") }) }) </script> </head> <body> <!-- 点击按钮触发ajax请求 --> <input id="btn" type="button" value="测试json"/> </body> </html>

springMVC实现上传的功能:

在没有使用springMVC的时候,实现上传功能,我们需要用一个File类型来接收,但使用了springMVC后,我们可以使用MultipartFile类型来接收,因此,需要在springMVC中配置一个解析器来将File类型转化为MultipartFile类型

步骤一:导入commons-io和commons-fileload的jar包;
上传功能需要这两个jar包才能被支持
步骤二:在springmvc.xml中配置解析器MultipartResolver,其中id必须为multipartResolver;
该解析器可以将客户端传来的File类型的对象转化为MultipartFile类型,该类型被springMVC封装,包含了许多关于上传的强大的功能.
配置如下:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

</bean>

步骤三:在客户端编写上传文件的代码,指定文件域中的name 值和控制器形参中Multipart的名一致.:

<form action="up" method="post" enctype="multipart/form-data">
	
	头像:<input type="file" name="uploadFile"/>
	描述:<input type="text" name="desc"/>
	<input type="submit" value="上传"/>
</form>
@RequestMapping(value="up",method=RequestMethod.POST)
	public String up(String desc,MultipartFile uploadFile) throws IOException{
		//获取文件要写出的路径
		String originalFilename = uploadFile.getOriginalFilename();
		//解决图片重名问题
		String finalFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
		String path = session.getServletContext().getRealPath("photo") + File.separator + finalFileName;

		//将上传的图片写到path下
		uploadFile.transferTo(new File(path));
		return "success";
	}

配置拦截器interceptor:

需要实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter这个类.

第一步:创建一个类实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter这个类

第二步:将该类作为拦截器配置在springMVC中

	<mvc:interceptors>
		<bean id="myInterceptor" class="com.sms.mvc.interceptor"></bean>
	
	</mvc:interceptors>

springMVC和Spring 的整合:

问题一:springMVC.xml可以被web.xml以servlet 的形式加载.那么spring的配置文件applicationContext.xml被谁加载?什么时候加载?

spring的配置文件需要被配置在web.xml 的context上下文中,以< context-param> 的形式去加载spring的配置文件,如若不以这样的形式,那么web.xml会默认加载WEB-INF下的applicationContext.xml.配置spring后,需要在服务器开启时创建一个spring 的容器,因此需要配置一个loaderContextListener创建spring的容器.

<!-- 配置spring -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext-*.xml</param-value>
	</context-param>
<!-- 配置监听器加载spring容器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

你可能感兴趣的:(SpringMVC框架总结)