参数说明

Model:Model类型的参数,用来封装向界面上渲染的数据,默认也是存在request域中

map:如果形参为map类型,由于map具有和Model一样的功能,就是向request域中添加数据,所以默认情况下
方法参数中的map是当做Model对象来使用,如果map的作用是用来接收请求参数的,就需要用@RequestParam来修饰
将请求参数的参数名作为key,参数值作为value

如何传入对象类型的参数

  • 将请求参数映射成java对象
  • 将请求参数赋值给java对象对应的成员变量
  • 如果方法的参数是一个实体类对象,前端发送的参数就会根据参数名赋值给该对象对应的属性
  • 如果方法的参数是一个实体类对象,即使前端不发送请求参数,此处的实体类对象也不会为null,只是成员变量的值为初始值
  • 如果实体类中还嵌套了实体类,例如Student中有一个address属性
  • 那么请求参数的名称就需要是address.属性名即可。
  • 如果方法没有返回值,将请求路径作为视图名称 例如 该方法执行完,就会转发到 前缀/student/names后缀
@RequestMapping("/student/names")
 public void array(String[] names) {
    System.out.println(Arrays.toString(names));
  }
  • 如果形参为List、Set或者数组,请求参数和形参名一样的时候,就会作为集合或者数组的元素存在。

同一个工程下,不允许出现多个方法使用同一个URL

方法的返回值

视图名称

默认是以转发的方式进行界面跳转
如果想使用重定向,通过redirect:视图路径 方式即可

return “redirect:路径”;

使用注解的配置

<?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">

<!-- 扫描controller所在的包 -->
<context:component-scan base-package="controller包名"></context:component-scan>
<!-- MVC对注解支持的标签,支持注解的映射器和适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>

<!-- 静态资源的处理 
	如果我们请求的是静态资源,将该请求转发给servlet容器中默认的(default)servlet来处理
	DefaultServletHttpRequestHandler
	该控制器的优先级默认最低
-->
<mvc:default-servlet-handler/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <!-- 
	  mv.setViewName("index");
    在使用该名称时,会拼接上我们配置的前缀和后缀, /WEB-INF/index.jsp
   -->
<!-- 视图所在的目录  前缀-->
<property name="prefix" value="/WEB-INF/"></property>
<!-- 视图的后缀 后缀 -->
<property name="suffix" value=".jsp"></property> 
</bean>

</beans>

web的配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="4.0" 
	 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">


 <!-- 前端控制器 -->
 <!-- The front controller of this Spring Web application, 
 responsible for handling all application requests -->
<servlet>
	<servlet-name>springDispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<!-- 配置springMVC的配置文件路径 -->
		<param-value>classpath:springMVC的文件路径</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
	<servlet-name>springDispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

注解说明

为当前方法配置访问路径

@RequestMapping(path = {“”},method = RequestMethod.GET)

方法的形参就是用来接收请求参数的,默认情况下形参的名称和请求参数保持一致

@RequestParam:修饰参数的,将指定的请求参数的值给该形参

@RequestMapping
既可以修饰类也可以修饰方法,修饰类之后,如果要请求该类中的方法 就需要在url的路径上拼上类上面的路径 …/json/方法的url

@ResponseBody
该注解的作用是将response.setContextType(“application/json”);
意味着我们指定该方法的返回内容为json数据
此时springMVC的json解析器(MappingJackson2…)将我们返回的内容
转换成json返回给前端;返回给前端的内容就是js对象,并不是json字符串
所以前端就不用再将json解析了(将json字符串转换成js对象 JSON.parse(data))

@ResponseBody
前端发送过来的是json数据,将json数据转换为该改注解修饰的参数

@CookieValue
修饰参数,代表该参数的值是从cookie中获取

@SessionAttributes(names = {“name”,“id”})
指定名称的数据当model、modelMap、Map或者ModelAndView存储时,就会存储在Session域中