一、解决中文乱码问题


1.请求中文乱码
1.1get请求乱码问题
在toncat8.0以前需要在tomcat/conf/server.xml新增URIEncoding=“UTF-8”,tomcat8.0之后则默认是UTF-8
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
/>
1.2POST请求乱码
在Web.xml中进行过滤器配置
<!--对所有的请求进行过滤并将中文字符转为UTF-8编码-->
<filter>
<filter-name>characterFilter</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>characterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.响应中文乱码问题
在applicationContext.xml中在<mvc:annotation-driven>标签中配置<mvc:message-converters>
!-- 启用SpringMVC中的注解开发模式-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- response.setContentType("text/html;charset=utf-8")-->
<value>text/html;charset=utf-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
二、响应是如何输出结果的

1.@ResponseBody使用方法

2.ModelAndView使用方法(建议)


在Controller方法中新增返回类型为ModelAndView的方法。
@GetMapping("/view")
public ModelAndView showView(Integer userId){
ModelAndView mav = new ModelAndView("/view.jsp");
User user = new User();
if (userId == 1){
user.setUsername("Lily");
}else if(userId == 2){
user.setUsername("luaks");
}
// 在当前的请求中增加对象
mav.addObject("u",user);
return mav;
}
新增view.jsp页面
<%--
Created by IntelliJ IDEA.
User: kiell
Date: 2021/2/2
Time: 11:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Iam View Page</h1>
<hr>
<h2>UserName:${u.username}</h2>
</body>
</html>
通过访问的不同请求参数来进行不同的数据展示。

也可以通过String和ModelMap来进行
//String和ModelMap
//Controller方法返回String的情况
//1.方法被@Response描述,springMVC直接响应String字符串本身。
//2.方法不存在@ResponseBody,则springMVC处理String指代的视图(页面)。
public String showView1(Integer userId, ModelMap modelMap){
String view ="/view.jsp";
User user = new User();
if (userId == 1){
user.setUsername("Lily");
}else if(userId == 2){
user.setUsername("luaks");
}
modelMap.addAttribute("u",user);
return view;
}
三、SpringMVC整合Freemarker
1.引入依赖pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
2.applicationContext.xml配置freemarker和对freemarker本身进行配置
<!--配置freemarker-->
<bean id="ViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<!-- 产生最终结果后向客户端输出的字符集-->
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="suffix" value=".ftl"></property>
</bean>
<!--对freemarker本身进行配置-->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl"></property>
<property name="freemarkerSettings">
<props>
<!-- 产生最终结果的字符集-->
<prop key="defaultEncoding">UTF-8</prop>
</props>
</property>
</bean>
3.在WEB-INF目录下新建ftl/test.ftl使用${u.username}
4.新建Controller类
@Controller
@RequestMapping("/fm")
public class freemarkerController {
@GetMapping("/test")
public ModelAndView showTest(){
ModelAndView mav= new ModelAndView("/test");
User user = new User();
user.setUsername("andy");
mav.addObject("u",user);
return mav;
}
}
5.结果

需要注意的是每次对pom.xml进行改动都需要对war包对依赖进行重新发布。
959

被折叠的 条评论
为什么被折叠?



