SpringMVC基础三

一、解决中文乱码问题

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包对依赖进行重新发布。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值