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
| <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.xml
和appCtx.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
| <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
框架如何获取控制器组件,以及如何处理静态HTML
、JS
、图片
等资源。下面是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"> <context:component-scan base-package="org.crazyit.auction.controller"> </context:component-scan> <mvc:annotation-driven /> <mvc:default-servlet-handler />
<bean id="authority" class="org.crazyit.auction.controller.authority.AuthorityInterceptor" />
<aop:config> <aop:aspect ref="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
包及其子包下搜索控制器。