原文网址:http://www.cnblogs.com/fozero/p/6137495.html
springmvc的post请求中文乱码问题,Get方式的中文乱码问题?
post方式的乱码,在web.xml文件中添加过滤器处理乱码:
<filter> <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
对于get请求中文乱码问题方法有两个:
(1)修改tomcat配置文件:
<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
(2)在实际编码中对参数进行重新编码:
String param = new String(request.getParamter("person").getBytes("ISO8859-1"),"utf-8");
web.xml的详细配置前端控制器:
<servlet> <servlet-name>spring-mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param>
<load-on-startup>1<load-on-startup>
</servlet> <servlet-mapping> <servlet-name>spring-mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
注解的处理器映射器和适配器配置:
<mvc:annotation-driven/>
视图解析器配置视图前缀和后缀:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/"/> <property name="suffix" value=".jsp"/> </bean>
返回值会通过视图解析器为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,会做如下的解析:
通过 prefix + returnVal + suffix 这样的方式得到实际的物理视图,然后做转发操作;
Springmvc常见注解:
(1)@Controller
@Controller标记在类上,在springmvc-servlet.xml中管理控制器:
<context:component-scan base-package="com.sfdsf.controller"/>
(2)@requestMapping
用来处理请求地址的映射注解,可用于类和方法上面,用于类上表示该类的所有方法都是以该地址为父路径。
@RequestMapping注解有六个属性:
1、 value
value:指定请求的实际地址;
2、method;
method: 指定请求的method类型, GET、POST、PUT、DELETE等
3、consumes
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
4、produces
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
5、params
params: 指定request中必须包含某些参数值是,才让该方法处理。
6、headers
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
以@RequestMapping标记的处理方法支持的参数:
(1)HttpServlet对象:HttpServletRequest,HttpServletResponse,HttpSsssion;
(2)Spring自己的WebRequest;
(3)InputStream,OutputStream,Reader,Writer;
(4)使用@PathVariable,@RequestParam,@CookieValue,@RequestHeader标记的参数
(5)使用@ModelAttribute标记的参数;
(6)Map,Model,ModelMap;
(7)实体类;
(8)Spring封装的MultipartFile;
(9)Spring封装的Errors和BindingResult对象;
(3)@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。不同的是@Autowired是按照byType来注入,@Resource是按照ByName来注入,如果想让@Autowired按照byName可以借助@Qualifier,默认@Autowired要求注入的对象必须不为null,如果有可能是null,则配置required=false
(4)@Pathvariable
用于将请求URL中的动态参数映射到处理方法的形参中:
@Controller public class UserController{ @RequestMapping("/user/{formId}") public String getUserForm(@PathVariable("formId") String formId ){ return formId; } }
(5)@CookieValue:获取Cookie的值
(6)@RequestParam:用于将请求参数中的数据映射到controller方法中的形参
(7)@SessionAttributes:用于将值放在session中,写在class上面
(8)@ModelAttribute:用于注解和方法参数中,对应的controller方法执行之前先调用@ModelAttribute方法。
(9)@ResponseBody
返回的数据不是页面,而是其他某种格式的数据时(json,xml等)使用。
SpringMvc controller方法中返回值可选类型
(1)ModelAndView;(2)Model;(3)ModelMap;(4)Map;(5)View;(6)String;(7)void