标签 webx 下的文章 - 酷游博客
首页
关于
友链
Search
1
阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
45 阅读
2
Java中泛型的理解
40 阅读
3
Java 14 发布了,再也不怕 NullPointerException 了!
38 阅读
4
Java中的可变参数
37 阅读
5
该如何创建字符串,使用" "还是构造函数?
29 阅读
技术
登录
/
注册
找到
11
篇与
webx
相关的结果
2025-01-22
webx学习(二)——Webx Framework
Webx Framework负责完成一系列基础性的任务Webx Framework的任务初始化Spring容器初始化日志系统增强request/response/session的功能提供pipeline流程处理机制异常处理开发模式 一、初始化spring容器,在web.xml中添加监听器: com.alibaba.citrus.webx.context.WebxContextLoaderListener WebxContextLoaderListener用于初始化Spring,搜索WEB-INF目录下的子应用配置文件,为每个子应用创建Spring容器WebxContextLoaderListener是从spring的ContextLoaderListener派生出来的。ContextLoaderListener我们还是比较熟悉的,在使用spring的时候会在web.xml中配置。 二、初始化日志系统 com.alibaba.citrus.logconfig.LogConfiguratorListener LogConfigurationListener用于初始化日志系统(使用配置文件log4j.xml或logback.xml) 三、webx响应请求 当Webx Framework接收到一个来自WEB的请求以后,实际上它主要做了两件事:首先,它会增强request、response、session的功能,并把它们打包成更易使用的RequestContext对象。其次,它会调用相应子应用的pipeline,用它来做进一步的处理。 假如在上面的过程中出现异常,则会触发Webx Framework处理异常的过程。 四、pipeline流程控制 Pipeline的意思是管道,管道中有许多阀门(Valve),阀门可以控制水流的走向。Webx Framework中的pipeline可以控制处理请求的流程的走向 五、异常处理机制 当应用发生异常时,Webx Framework可以处理这些异常。 六、开发模式工具 Webx Framework提供了一个开关,可以让应用运行于“生产模式(Production Mode)”或是“开发模式(Development Mode)” 。 ${productionMode:true} productionMode:true表示开发模式启动 在生产模式和开发模式下有一些不同的地方,具体的内容见官方文档。
技术
# webx
酷游
1月22日
0
23
0
2025-01-22
webx3文件下载
注:使用阿里云的oss服务进行文件下载,使用代理将oss的下载封装起来。以下是一个screen的java类: public void execute( @Param("fileName") String fileName, TurbineRunData rundata, Context context,HttpServletRequest req,HttpServletResponse resp) throws IOException, ServletException { if(StringUtils.isBlank(fileName)){ throw new RuntimeException("Parameter can not be null!"); } OSSObject ossObject = ossService.getObject(fileName); if(ossObject==null){ throw new RuntimeException("there is no package for " + fileName); } OutputStream os = null; InputStream is = null; try { os = resp.getOutputStream(); is = ossObject.getObjectContent(); resp.setContentType("application/x-tar"); resp.addHeader("Version", "1.0"); resp.setContentLength((int) ossObject.getObjectMetadata().getContentLength()); String filedisplay = URLEncoder.encode(fileName, "UTF-8"); resp.addHeader("Content-Disposition", "attachment; filename=a.tgz"); IOUtils.copy(is, os); os.flush(); } catch (Exception e) { throw new RuntimeException(e); } finally { if (os != null) { IOUtils.closeQuietly(os); } if (is != null) { IOUtils.closeQuietly(is); } } }
技术
# webx
酷游
1月22日
0
21
0
2025-01-22
webx学习(三)——Webx Turbine
Webx Turbine建立在Webx Framework的基础上,实现了页面渲染、布局、数据验证、数据提交等一系列工作。Webx Turbine所遵循下面的设计理念包括: 页面驱动约定胜于配置 页面布局: 其中:Screen,代表页面的主体。Layout,代表页面的布局。Control,代表嵌在screen和layout中的页面片段 处理页面的基本流程:Webx Turbine的处理流程被定义在pipeline中。Webx Framework没有规定Pipeline的内容,但Webx Turbine却定义了一系列valves。下面是一个Webx Turbine推荐的pipeline配置: 当用户以:localhost:8080 来访问webx的时候,首先WebxFrameworkFilter接收请求,并一路到达pipeline – 分析URL 分析URL的目的是取得target。由于用户访问的URL中并没有提供path信息,通常被理解为:用户想要访问“主页”。AnalyzeURL valve提供了一个可选的参数homepage,即是在这种情况下起作用 —— http://localhost:8081/对应的target为homepage。 需要注意的是,target不代表模板名,也不代表类名。Target只是一个抽象的概念 —— 当前页面需要达成的目标。Target可能被后续的valves解释成模板名、类名或者其它东西。 进入 – 多重分支很明显,“homepage”满足了第一个所附带的条件:,意思是target的后缀不存在(null)或为“jsp”或为“vm”。 – 执行action和其它框架中的action概念不同,在Webx Turbine中,action是用来处理用户提交的表单的。 因为本次请求未提供action参数,所以跳过该步骤。 – 查找并执行screen。这里要用到一个规则:target映射成screen module类名的规则。 假设target为xxx/yyy/zzz,那么Webx Turbine会依次查找下面的screen模块:screen.xxx.yyy.Zzz,screen.xxx.yyy.Default,screen.xxx.Default,screen.Default。 本次请求的target为homepage,因此它会尝试查找screen.Homepage和screen.Default这两个类。如果找到screen类,Webx Turbine就会执行它。Screen类的功能,通常是读取数据库,然后把模板所需要的对象放到context中。如果找不到,也没关系 —— 这就是“页面优先”:像homepage这样的主页,通常没有业务逻辑,因此不需要screen类,只需要有模板就可以了。 – 渲染模板这里用到两个规则:target映射成screen template,以及target映射成layout template。 假设target为xxx/yyy/zzz,那么Webx Turbine会查找下面的screen模板:/templates/screen/xxx/yyy/zzz。Screen模板如果未找到,就会报404 Not Found错误。 找到screen模板以后,Webx Turbine还会试着查找下面的layout模板:/templates/layout/xxx/yyy/zzz/templates/layout/xxx/yyy/default/templates/layout/xxx/default/templates/layout/default Layout模板如果找不到,就直接渲染screen模板;如果存在,则把渲染screen模板后的结果,嵌入到layout模板中。Layout模板和screen模板中,都可以调用control。每个页面只有一个screen,却可以有任意多个controls。 – 内部重定向在screen和action中,可以进行“内部重定向”。内部重定向实质上就是由实施的 —— 如果没有重定向标记,就退出;否则循环到 标签。和外部重定向不同,外部重定向是向浏览器返回一个302或303 response, 其中包含Location header, 浏览器看到这样的response以后,就会发出第二个请求。而内部重定向发生在pipeline内部,浏览器并不了解内部重定向。 接下来我们看一下petstore项目的pipeline.xml 依赖注入: 通过@Autowired annotation注入 public class LoginAction { @Autowired private UserManager userManager; ... } 注入request、response和session对象 public class LoginAction { @Autowired private HttpServletRequest request; @Autowired private HttpServletResponse response; @Autowired private HttpSession session; ... } 参数注入
技术
# webx
酷游
1月22日
0
8
0
2025-01-22
webx学习(四)——ResourceLoadingService
ResourceLoadingService是一个可以从各种输入源中(例如从File System、Classpath、Webapp中)查找和读取资源文件的服务。资源表现形式的多样性,给应用程序的接口设计带来一点麻烦,为了统一资源的获取,Spring框架中提供了这方面的服务,即Resource Loader,但是Resource Loader还存在一些不合理的地方,于是webx中提供了Resource Loading Service对资源进行统一管理,在Resource Loading Service中可以包含多个不同的Resource Loader进行资源的加载,使得加载资源具有多样性,同时也很好的完成了资源加载的大部分功能。 ResourceLoadingService是从 Spring的ResourceLoader派生过来的。 你只需要在配置文件中增加以下内容,就可以将Spring ResourceLoader机制替换成Webx的Resource Loading服务:Resource Loading服务的基本配置(/WEB-INF/webx.xml) 1.定义新资源: 定义新资源,资源名以/jdk为前缀。表示从文件系统中装载资源。 2.重命名资源 定义了一个资源的别名:/myapp/conf。当你查找/myapp/conf/myFile.xml时,Resource Loading服务实际上会去找/webroot/WEB-INF/myFile.xml internal=true是一个可选项,当它的值为true时,代表它所修饰的资源是不能被外界所直接访问的。例如,你想直接在myBean中注入/webroot/WEB-INF/myFile.xml是不行的。把internal选项设成true,可以让强制用户转向新的资源名称。Internal参数的默认值为false,意味着,新旧两种名称同时可用。 3.重定向资源 定义了一个资源的别名:/templates,指向internal资源:/webroot/templates。将/templates的子目录/templates/cms重定向到某个外部的文件目录$cms_root中举几个例子: 将/myapp/conf/my/file.xml转换成/webroot/WEB-INF/my/file.xml。 将/myapp/conf/myfile.conf转换成/webroot/WEB-INF/myfile.xml。 将/profiles/myname转换成文件路径${profile_root}/m/myname;将/profiles/othername转换成文件路径${profile_root}/o/othername。 $1/$1$2 每个Spring容器都可以配置自己的Resource Loading服务。当调用子容器的Resource Loading服务时,遵循这样的逻辑:先在子容器的Resource Loading服务中查找资源,如果找不到,则再到parent容器的Resource Loading服务中查找,如果找不到,则放弃。运用这种级联装载资源的方法,子应用可以把共享的资源定义在root context中,而把自己独享的资源定义在自己的容器当中。 资源文件里的内容不仅可以读取出来,ResourceLoadingService还可以修改资源文件的内容: 将所有目录下(因为是相对路径)的名称为test-*.xml文件,用指定的XSL文件进行转换。这里引进了一种新的扩展点:ResourceFilter。ResourceFilter可以在应用获取资源之前,取得控制,以便对资源做一点事。是对ResourceFilter的扩展,它能够把XML资源用指定的xsl文件转换成新的格式。假如指定了saveTo参数,就可以把转换的结果保存下来,避免每次访问都重新转换。 此处定义tempdir目录资源,以便保存xslt转换的结果。 ResourceLoader参考: FileResourceLoader file-loader会从当前配置文件所在的目录中装载 这样,它就会从指定的basedir的子目录中查找资源。 WebappResourceLoader: 从当前WEB应用中装载资源,也就是从ServletContext对象中装载资源。 ClasspathResourceLoader: 从classpath中装载资源,也就是从当前的ClassLoader对象中装载资源。 SuperResourceLoader: 调用Resource Loading服务来取得资源。它有点像Java里面的super操作符。 这个操作类似于。
技术
# webx
酷游
1月22日
0
20
0
2025-01-22
webx学习(五)——webx页面布局相关
以tutorial1项目为例 webx框架的页面采用velocity的模板文件进行编写,webx的页面布局情况: 其中:Screen,代表页面的主体。Layout,代表页面的布局。Control,代表嵌在screen和layout中的页面片段 首先看一下该项目的文件分布情况 app2/ └── templates ├── layout │ ├── default.vm │ ├── form │ │ └── register.vm │ ├── list │ │ └── asJson.vm │ └── tt.vm └── screen ├── form │ ├── register.vm │ └── welcome.vm ├── index.vm ├── list │ ├── asHtml.vm │ ├── asJson.vm │ └── asXml.vm └── tt.vm 当我们访问 **http://localhost:8081/index** 默认加载default.vm问价作为页面布局 **http://localhost:8081/tt** 默认加载tt.vm问价作为页面布局 **http://localhost:8081/list/asJson** 默认加载list/asJson.vm问价作为页面布局 **http://localhost:8081/list/asHtml** 默认加载default.vm问价作为页面布局 **http://localhost:8081/list/asXml** 不显示页面布局(因为该文件中使用了: $rundata.response.setContentType("text/xml") $rundata.setLayoutEnabled(false) ) **http://localhost:8081/form/welcome** 默认加载default.vm问价作为页面布局 **http://localhost:8081/form/register** 默认加载form/register.vm问价作为页面布局 同时发现,访问asJson asHtml asXml的时候会调用 com.alibaba.webx.tutorial1.app1.module.screen.list.Default.java文件。然后将contex中存入的数据遍历显示在页面中。 target映射成screen module类名的规则。 假设target为xxx/yyy/zzz,那么Webx Turbine会依次查找下面的screen模块: screen.xxx.yyy.Zzz,screen.xxx.yyy.Default,screen.xxx.Default,screen.Default。 target映射成screen template,以及target映射成layout template。 假设target为xxx/yyy/zzz,那么Webx Turbine会查找下面的screen模板:/templates/screen/xxx/yyy/zzz。Screen模板如果未找到,就会报404 Not Found错误。 找到screen模板以后,Webx Turbine还会试着查找下面的layout模板: /templates/layout/xxx/yyy/zzz/templates/layout/xxx/yyy/default/templates/layout/xxx/default/templates/layout/default Layout模板如果找不到,就直接渲染screen模板;如果存在,则把渲染screen模板后的结果,嵌入到layout模板中。Layout模板和screen模板中,都可以调用control。每个页面只有一个screen,却可以有任意多个controls。
技术
# webx
酷游
1月22日
0
6
0
1
2
3
下一页
易航博客