多内部资源视图解析器 配合 @XmlRootElement 返回 XML、JSON、HTML 以及 @ResponseBody注解 JSON 返回 object 处理

SSM

(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。
其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

pom.xml SSM框架集-jar包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>

<name>SSM-school</name>
<groupId>com</groupId>
<artifactId>SSM-school</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<spring.version>4.3.12.RELEASE</spring.version>
</properties>

<dependencies>
<!--spring AOP就是用aspectj来实现的,是依赖关系-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.8</version>
</dependency>
<!-- spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<!--实现多内部资源视图解析器 生成xml-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<!--事务-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<!--初始化会话工厂-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<!--mybatis框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mybatis与spring对接的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--mysql 数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.2</version>
</dependency>
<!--JSP 标准标签库 (JSTL)-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--json转换工具包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
</project>

StudentController servlet层 多视图解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* 多视图解析 不需要加 @ResponseBody 注解
* 并实现一个方法做到下面三个方法的效果
* view?id=7 或 view.html?id=7 返回 HTML 页面
* view.json?id=7 返回 JSON 字符串参数
* view.xml?id=7 返回 XML
*/
@RequestMapping("/view")
public ModelAndView view(Integer id) {
ModelAndView modelAndView = new ModelAndView();
Student student = studentBiz.getStudent(id);
modelAndView.addObject("student", student);
modelAndView.setViewName("view");
return modelAndView;
}

/**
* rest风格
* 依赖 @PathVariable注解 指定参数
* 原地址栏 /view?id=7
* rest风格 /view/7
*/
@RequestMapping("/view/{id}")
public ModelAndView view(@PathVariable("id") Integer id) {
ModelAndView modelAndView = new ModelAndView();
Student student = studentBiz.getStudent(id);
modelAndView.addObject("student", student);
modelAndView.setViewName("view");
return modelAndView;
}

//局部编码格式配置 produces = {"application/json;charset=UTF-8"}
//springMVC.xml JSON全局编码格式已设置
//@ResponseBody 返回JSON注解
@RequestMapping(value = "/stringJson/{id}")
@ResponseBody
public String stringJson(@PathVariable("id") Integer id) {
Student student = studentBiz.getStudent(id);
return JSON.toJSONString(student);
}

//局部编码格式配置 produces = {"application/json;charset=UTF-8"}
//springMVC.xml JSON全局编码格式已设置
//@ResponseBody 返回JSON注解
@RequestMapping(value = "/objectJson/{id}")
@ResponseBody
public Object objectJson(@PathVariable("id") Integer id) {
Student student = studentBiz.getStudent(id);
return student;
}

springMVC.xml springMVC配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!--扫描注解的Bean-->
<context:component-scan base-package="com.controller,com.biz"/>
<!-- 多内部资源视图解析器 -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<!-- 指定json 用什么工具解析 xml 用什么工具解析 -->
<property name="defaultViews">
<list>
<!--定义json 编码格式-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonJsonView">
<property name="charset" value="UTF-8"/>
</bean>
<!--定义xml 用oxm解析-->
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.pojo.Student</value>
<value>com.pojo.Classes</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>
</list>
</property>
<!-- 指定 jsp解析器 -->
<property name="viewResolvers">
<list>
<!--内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀解析-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀解析-->
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
</bean>

<!--使 @Controller 注解生效-->
<!--使 @ResponseBody 返回 object 时 利用 alibaba.fastjson 工具 转换-->
<mvc:annotation-driven>
<mvc:message-converters>
<!--解决springmvc返回的json中文问题 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="utf-8"/>
</bean>
<!--解决springMVC返回的json为object 时进行转换-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

示例下载 密码: nihp