1.Spring MVC常用的注解有哪些?=======被问+1
-
@Controller:Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示
-
@ResponseBody:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。简单理解就是:返回的数据不是html标签的页面,而是其他某种格式的数据:比如JSON数据
-
@RestController:相当于@ResponseBody + @Controller,
-
@RequestMapping:@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
-
@RequestBody:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的;而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交
-
@PathVariable:接收请求路径中占位符的值。比如:请求路径上有个id的变量值,可以通过@PathVariable来获取 @RequestMapping(value = "/page/{id}", method = RequestMethod.GET)
-
@RequestParam:将请求参数绑定到你控制器的方法参数上
2.Spring MVC怎么样设定重定向和转发的?
-
重定向:在返回值前面加"redirect:",比如:"redirect:http://www.baidu.com"
-
转发:在返回值前面加"forward:",譬如"forward:/test.js"
3.Spring MVC里面拦截器是怎么写的?
-
有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑
-
以实现HandlerInterceptor接口为例:
package com.shallow.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 登陆的情况下不放行
HttpSession session = request.getSession();
if (session.getAttribute("userLogin") != null){
return true;
}
// 判断登录页面放行
if (request.getRequestURI().contains("goLogin")) {
return true;
}
if (request.getRequestURI().contains("login")) {
return true;
}
// 如果没登录就点访问首页,跳转去登录界面
request.getRequestDispatcher("/WEB-INF/jsp/doLogin.jsp").forward(request, response);
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
- 配置文件配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<!--绑定controller包,实现扫面它包下的注解-->
<context:component-scan base-package="com.shallow.controller"/>
<!--让springmvc不处理静态资源文件-->
<mvc:default-servlet-handler/>
<!--支持mvc注解驱动-->
<mvc:annotation-driven/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--处理JSON乱码-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<mvc:interceptors>
<!--拦截器-->
<!-- <mvc:interceptor>-->
<!-- &lt;!&ndash;设置需要拦截&ndash;&gt;-->
<!-- <mvc:mapping path="/**"/>-->
<!-- &lt;!&ndash;设置哪些不拦截&ndash;&gt;-->
<!-- <mvc:exclude-mapping path="/css/**"/>-->
<!-- &lt;!&ndash;实现拦截的类&ndash;&gt;-->
<!-- <bean class="com.shallow.interceptor.InterceptorImpl"/>-->
<!-- </mvc:interceptor>-->
<!--登录拦截器-->
<mvc:interceptor>
<mvc:mapping path="/shallow/**"/>
<bean class="com.shallow.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
4.什么是DispatcherServlet?
-
Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。DispatcherServlet本质上就如其名字所展示的那样是一个Java Servlet。同时它是Spring MVC中最为核心的一块------前端控制器。它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端
-
DispatcherServlet 在web.xml中的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--自定义过滤器配置-->
<filter>
<filter-name>encoding</filter-name>
<!--你自定定义的过滤器实体类-->
<filter-class>com.shallow.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--springmvc的过滤配置器-->
<!-- <filter>-->
<!-- <filter-name>encoding</filter-name>-->
<!-- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>-->
<!-- <init-param>-->
<!-- <param-name>encoding</param-name>-->
<!-- <param-value>utf-8</param-value>-->
<!-- </init-param>-->
<!-- </filter>-->
<!-- <filter-mapping>-->
<!-- <filter-name>encoding</filter-name>-->
<!-- <url-pattern>/*</url-pattern>-->
<!-- </filter-mapping>-->
</web-app>