webx- webx framework

整个webx框架分成三个层次,webx framework是第二个层次,webx framework的任务:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
...
<listener>
<listener-class>com.alibaba.citrus.webx.context.WebxContextLoaderListener</listener-class>
</listener>
...
</web-app>

 

 

 

 

 

1.webx的初始化

(1)初始化级联的spring容器

webx所创建的spring容器完全兼容Spring MVC所创建的容器。

webx利用webxcontextLoaderListener来初始化Spring,用来取代Spring的ContextLoaderListener,自动搜索/web-inf目录下的xml配置文件,并创建下面这种级联的spring容器。

 

webx framework将一个web应用分解成多个小应用模块:app1, app2当然名字可以任意取。

 

  • 每个小应用模块独享一个spring sub context子容器,两个子容器之间的beans无法互相注入。
  • 所有小应用模块共享一个spring root context 根容器。根容器中的bean可被注入到子容器的bean中,反之不可以。

(2)初始化日志系统

webx framework使用SLF4J作为它的日志框架,目前为止,它只包含了log4j和logback这两种日志系统的初始化模块。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
...
<listener>
<listener-class>com.alibaba.citrus.logconfig.LogConfiguratorListener</listener-class>
</listener>
...
</web-app>

 

  • webx framewok使用LogConfiguratorListener来初始化日志系统。
  • 假设你的应用依赖了logback的jar包,那么listener就会查找/web-inf/logback.xml,并用它来初始化logback。
  • 如果你依赖了Log4j的jar包,那么listener也会查找/web-inf/log4j.xml配置文件。
  • 如果以上配置文件不存在,Listener会使用默认的配置--把日志打印一到控制台上。

 

2.webx响应请求

(1)增强request, response, session的功能

webx framework提供了一个request contexts服务。request contexts服务利用httpServletRequestWrapper和HttpServletResponseWrappper对request和response对象进行包装。

<services:request-contexts xmlns="http://www.alibaba.com/schema/services/request-contexts">
<basic />
<buffered />
<lazy-commit />
<parser />
<set-locale defaultLocale="zh_CN" defaultCharset="UTF-8" />
...
</services:request-contexts>
<services:upload sizeMax="5M" />

 

Request Contexts所有功能都是可配置的、可扩展的。

 

 

在这个例子中,LoginAction类可以是一个singleton,一般来说,不能把request scope的对象,注入到singleton scope对象中,但你可以把httpservletRequest, HttpServletResponse和HttpSession对象注入到singleton对象中。因为request contexts服务对这几个常用的对象进行了特殊处理,将它们转成了singleton对象。

 

public class LoginAction {
@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;
@Autowired
private HttpSession session;
...
}

 

(2)pipeline流程机制

pipeline的意思是管道,管道中有很多阀门(Valve),阀门可以控制水流的走向。

 

webx framework并没有规定管道的内容,但提供了一系列通用的valves:

 

(3)异常处理机制

 

(4)开发模式工具

webx Framework提供了一个开关,可以让应用支行于“生产模式”或“开发模式”。

<services:webx-configuration>
<services:productionMode>${productionMode:true}</services:productionMode>
</services:webx-configuration>

 

 

(5)响应和处理请求的更多细节

当一个HTTP请求到达时,首先由webxframeworkfilter接手这个请求:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
...
<filter>
<filter-name>webx</filter-name>
<filter-class>com.alibaba.citrus.webx.servlet.WebxFrameworkFilter</filter-class>
<init-param>
<param-name>excludes</param-name>
<param-value><!-- 需要被“排除”的URL路径,以逗号分隔,前缀!表示“包含”。例如/static, *.jpg, !/
uploads/*.jpg --></param-value>
</init-param>
<init-param>
<param-name>passthru</param-name>
<param-value><!-- 需要被“略过”的URL路径,以逗号分隔,前缀!表示“不要略过”。例如/myservlet, *.jsp
--></param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>webx</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>

 

  • 如果一个servlet或filter接手webx passthru的请求时,它们还是可以访问到webx的部分服务。
  • 对于一个被passthru的请求,webx的行为更像是一个普通的filter。如果一个请求被“排除”,webx将会立即放弃控制,将请求还给服务器,接手控制的servlet或filter将无法访问webx一切的服务。

 

 

最后欢迎大家访问我的个人网站:1024s

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值