10.5 开发前端JSON接口 10.5.1 初始化Spring容器

10.5 开发前端JSON接口

本应用的后端Java EE部分会暴露JSON接口供前端调用,前端jQuery既可向JSON接口发送请求,也可通过JSON接口获取服务器端数据

10.5.1 初始化Spring容器

为了让Spring管理各组件,包括**DAO组件业务逻辑组件以及前端MVC控制器**,需要让Spring容器随Web应用的启动而被初始化。初始化Spring容器时,会将容器中所有Bean全部实例化。一旦Spring完成容器中Bean的创建,Spring容器中的控制器即可对外处理请求。
为了让Spring容器随Web应用的启动而被初始化,可以使用Listener配置。在web.xml文件中增加如下配置片段。

1
2
3
4
5
6
7
8
9
<!-- 配置Web应用启动时加载Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/appCtx.xml,
/WEB-INF/daoCtx.xml</param-value>
</context-param>

由于本应用将**DAO组件业务逻辑组件**等分开配置,因此该配置片段指定了两个配置文件,两个配置文件都放在WEB-INF路径下,文件名分别是daoCtx.xmlappCtx.xml
增加了上面的配置片段后,Spring容器会随Web应用的启动而被初始化。初始化Spring容器时,其中的Bean也会随之被初始化。
此外,还需要在web.xml文件中配置Spring MVC的核心Servlet,该核心Servlet负责处理所有请求,对外暴露JSON操作接口,因此还需要在web.xml文件中配置Spring MVC的核心Servlet。下面是配置Spring MVC核心Servlet的代码。

1
2
3
4
5
6
7
8
9
10
<!-- 配置SpringMVC的核心Servlet: DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

在该配置片段中配置了Spring MVC 的核心Servlet:DispatcherServlet,并指定使用该Servlet处理所有请求。因此根据Spring MVC 的要求,该Servlet 会要求提供一份springmvc-servlet.xml配置文件,这份配置文件用于设置Spring框架如何获取控制器组件,以及如何处理静态HTMLJS图片等资源。下面是springmvc-servlet.xml配置文件的代码。

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
<?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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 告诉Spring框架去哪些包下搜索控制器 -->
<context:component-scan
base-package="org.crazyit.auction.controller">
</context:component-scan>
<!-- 默认装配方案 -->
<mvc:annotation-driven />
<!-- 定义默认的Servlet处理Web应用目录下的静态资源 -->
<mvc:default-servlet-handler />

<!-- 定义一个普通Bean实例,该Bean实例将进行权限控制 -->
<bean
id="authority"
class="org.crazyit.auction.controller.authority.AuthorityInterceptor" />

<aop:config>
<!-- 将authority转换成切面Bean -->
<aop:aspect ref="authority">
<!-- 定义一个Before增强处理,直接指定切入点表达式 以切面Bean中的authority()方法作为增强处理方法 -->
<aop:around
pointcut="execution(* org.crazyit.auction.controller.*.getItemByWiner(..))
or execution(* org.crazyit.auction.controller.*.getBidByUser(..))
or execution(* org.crazyit.auction.controller.*.getItemsByOwner(..))
or execution(* org.crazyit.auction.controller.*.addItem(..))
or execution(* org.crazyit.auction.controller.*.addBid(..))"
method="authority" />
</aop:aspect>
</aop:config>

</beans>

从以上代码可以看出,Spring 将会在org.crazyit.auction.controller包及其子包下搜索控制器。