SSM笔记-SpringMVC自定义视图及重定向视图、语言国际化

1、语言国际化
①需要另外导入jar包:jstl.jar和standard.jar
②需要到SpringMVC配置文件里面配置国际化资源文件,在显示的页面配置taglib标签和fmt标签
③注意:在显示字的页面配置taglib标签时,属性uri的值为http://java.sun.com/jsp/jstl/fmt
④项目使用jstl后,SpringMVC会把视图由InternalResourceView转为JstlView

2、语言国际化配置步骤
①springmvc配置文件配置国际化资源文件(类名为”org.springframework.context.support.ResourceBundleMessageSource”)
②显示的页面配置taglib标签(uri为”http://java.sun.com/jsp/jstl/fmt“)
③创建国际化语言资源文件
④显示页面使用fmt:message标签设置显示的字对应的key

3、自定义视图
步骤:
①首先需要建立一个实现org.springframework.web.servlet.View接口的类
②在该类中实现org.springframework.web.servlet.View的基本方法
③在render方法中用HttpServletResponse.getWriter().println方法输出需要的内容
④到SpringMVC配置文件中配置视图解析器(类名为”org.springframework.web.servlet.view.BeanNameViewResolver”)
⑤到handler里面写相关的调用方法
注意:
①该调用方法的返回值为自定义视图类首字母小写的类名
②自定义视图类要用@Component修饰

4、重定向
①重定向其实就是handler方法return的时候通过forward:或者redirect:指定重定向到哪个资源文件(即:重定向到指定的jsp文件)
②如果返回字符串中带有forward:或者redirect:,SpringMVC会对其进行特殊处理
③”forward:”,会对目标地址进行转发操作
④”redirect:”,会对目标地址进行重定向操作
⑤重定向是地址跳转,转发是数据发送到指定地址
⑥其实两个都可以达到转发的效果,但是forward会匹配到handler上,然后会导致网址问题,如:这里地址会跳转到localhost/test/testForward而不是localhost/views/result.jsp, 所以一般情况下建议用redirect:

5、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>SpringMVC_6_View</display-name>
  <servlet>
    <servlet-name>springDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

6、springmvc.xml

<?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:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!-- 配置自动扫描包 -->
    <context:component-scan base-package="com.test.springmvc"></context:component-scan>

    <!-- 配置视图解析器,把handler返回值解析为实际视图 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!-- 配置国际化资源文件 -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="i18n"></property>
    </bean>

    <!-- 配置直接转发的页面 -->
    <!--
    1、测试mvc:view-controller标签
    2、直接根据网址转发页面,不需要通过Handler方法来转发页面
    3、实际开发中都需要配置mvc:annotation-driven标签,不然会导致原来通过handler转发页面的逻辑无效而且报404错
    4、path:浏览器网址路径
    5、view-name:转发目标页面名,相当于handler返回值的
    -->
    <mvc:view-controller path="/viewController" view-name="result"/>
    <mvc:annotation-driven></mvc:annotation-driven>

    <!-- 配置视图解析器 -->
    <!-- 使用视图名字来解析视图 -->
    <!-- 通过order属性定义视图解析器的优先级,order越小优先级越高 -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="100"></property>
    </bean>
</beans>

7、Handler.java

package com.test.springmvc.handlers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/test")
@Controller
public class Handler {

    //测试语言国际化
    //需要另外导入jar包:jstl.jar和standard.jar
    //需要到SpringMVC配置文件里面配置国际化资源文件,在显示的页面配置taglib标签和fmt标签
    //注意:在显示页面配置taglib标签时,属性uri的值为http://java.sun.com/jsp/jstl/fmt
    //项目使用jstl后,SpringMVC会把视图由InternalResourceView转为JstlView
    @RequestMapping("/testMutiLanguage")
    public String testMutiLanguage(){
        System.out.println("testMutiLanguage");
        String result = "result";
        return result;
    }

    //测试自定义视图
    //步骤:
    //1、首先需要建立一个实现org.springframework.web.servlet.View接口的类
    //2、在该类中实现org.springframework.web.servlet.View的基本方法
    //3、在render方法中用HttpServletResponse.getWriter().println方法输出需要的内容
    //4、到SpringMVC配置文件中配置视图解析器(类名为"org.springframework.web.servlet.view.BeanNameViewResolver")
    //5、到handler里面写相关的调用方法
    //注意:
    //1、该调用方法的返回值为自定义视图类首字母小写的类名
    //2、自定义视图类要用@Component修饰
    @RequestMapping("/testUserDefineView")
    public String testUserDefineView(){
        System.out.println("testUserDefineView");
        return "userDefineView";
    }

    //测试重定向
    //1、如果返回字符串中带有forward:或者redirect:,SpringMVC会对其进行特殊处理
    //2、"forward:",会对目标地址进行转发操作
    //3、"redirect:",会对目标地址进行重定向操作
    //4、重定向是地址跳转,转发是数据发送到指定地址
    //5、其实两个都可以达到转发的效果,但是forward会匹配到handler上,然后会导致网址问题,如:这里地址会跳转到localhost/test/testForward而不是localhost/views/result.jsp
    @RequestMapping("/testForward")
    public String testForward(){
        System.out.println("testForward");
        return "forward:/views/result.jsp";
    }
    @RequestMapping("/testRedirect")
    public String testRedirect(){
        System.out.println("testRedirect");
        return "redirect:/views/result.jsp";
    }
}

8、UserDefineView

package com.test.springmvc.view;

import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;

@Component
public class UserDefineView implements View{

    @Override
    public String getContentType() {
        return "text/html";
    }

    @Override
    public void render(Map<String, ?> arg0, HttpServletRequest req, HttpServletResponse resp) throws Exception {
        resp.getWriter().println("UserDefineView arg0:"+arg0+",time:"+new Date());
    }

}

9、i18n

i18n.name=English name
i18n.desc=English description

10、index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <a href="test/testMutiLanguage">testMutiLanguage</a>
    <br><br>
    <a href="viewController">viewController</a>
    <br><br>
    <a href="test/testUserDefineView">testUserDefineView</a>
    <br><br>
    <a href="test/testForward">testForward</a>
    <br><br>
    <a href="test/testRedirect">testRedirect</a>
    <br><br>
</body>
</html>

11、result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
name : <fmt:message key="i18n.name"></fmt:message><br>
desc : <fmt:message key="i18n.desc"></fmt:message><br>
</body>
</html>

12、项目目录
项目目录

13、demo
https://download.csdn.net/download/qq_22778717/10599501

猜你喜欢

转载自blog.csdn.net/qq_22778717/article/details/81612538
今日推荐