webWork配置篇
WebConfig配置详解
Web.config配置详解一、认识Web.config文件Web.config 文件是一个XML文本文件,它用来储存 Web 应用程序的配置信息(如最常用的设置 Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。
当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。
如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。
它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
(一).Web.Config是以XML文件规范存储,配置文件分为以下格式1.配置节处理程序声明特点:位于配置文件的顶部,包含在<configSections> 标志中。
2.特定应用程序配置特点: 位于<appSetting> 中。
可以定义应用程序的全局常量设置等信息.3.配置节设置特点: 位于<system.Web> 节中,控制运行时的行为.4.配置节组特点: 用<sectionGroup> 标记,可以自定义分组,可以放到<configSections> 内部或其它<se ctionGroup> 标记的内部.(二).配置节的每一节1. <configuration> 节根元素,其它节都是在它的内部.2. <appSetting> 节此节用于定义应用程序设置项。
对一些不确定设置,还可以让用户根据自己实际情况自己设置用法:I.<appSettings><add key= "Conntction " value= "server=192.168.85.66;userid=sa;password=;database=Info; "/><appSettings>定义了一个连接字符串常量,并且在实际应用时可以修改连接字符串,不用修改程式代码.II. <appSettings><add key= "ErrPage " value= "Error.aspx "/><appSettings>定义了一个错误重定向页面.3. <compilation> 节格式:<compilationdefaultLanguage= "c# "debug= "true "/>I.default language: 定义后台代码语言,可以选择C#和两种语言.II.debug : 为true时,启动aspx调试;为false不启动aspx调试,因而可以提高应用程序运行时的性能。
WEB服务器配置全攻略
WEB服务器配置全攻略随着互联网普及程度的日益提高,越来越多的实体和个人投入到了网络的怀抱。
而拥有自己的网站,也成为越来越多的人的目标。
而一个高效率的WEB服务器则是对一个网站的强有力的支持!下面,我将根据自己的学习和实际操作经验来和大家讨论一下WEB服务器的架设,不妥之处,敬请指正!(本文所讲的内容,也适用于单机!想用自己的机器作WEB服务器的朋友也可以参考)本文所有环境是基于Windows 2000系统,其他环境下的服务器配置可以参考本文的部分内容!本文所讲的WEB服务器,是以Windows2000作为操作系统(Windows2000最好不要安装IIS5.0),以Apache(阿帕奇)作服务器软件,在此基础上配置PHP,Mysql和Perl。
从而构成一个界面友好,稳定性和抗负荷性良好,功能十分强大的WEB服务器系统。
但是对于高负荷的大型网站来说,本文所讨论的服务器配置还显得比较“单薄”。
现在,我们开始讨论服务器的配置过程:(一)安装配置Apache1.3.17Apache是全世界范围内使用范围最广的WEB服务软件,超过50%的网站都在使用Apache,它以高效、稳定、安全、免费(最重要的一点)而成为了最受欢迎的服务器软件!目前的最新版本为1.3.17,大家可以访问下载。
请下载for win32的无原码版本(Apache_1.3.17-win32-no_src.msi).最新版的Apache for win32开始使用MSI的形式发布。
从而使windows环境下安装Apache变得非常简单。
下面就说说它的具体安装过程:1、双击Apache的安装文件,和普通windows程序安装一样,一路点“Next”就可以。
2、安装程序要求你输入你的Network Domain(网络域名:形如);Server Domain(服务器域名:形如http:/)和网站管理员的e-mail。
有的话就按实填写,个人用户若没有的话可以按格式随便填一下。
struts2
1.strust2框架来历简介:WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架。
(同时也是一个成熟的基于Web的MVC框架)MVC:Model View Controller,model是模型,view是视图,controller是控制器,是一种框架模式。
随着WebWork框架的发展,衍生出了strust2框架,因此strust2框架是WebWork的升级,而不是一个全新的框架,因此稳点性、性能等方面都有很好的保证,而且也同时吸收了struts1框架和WebWork俩者的优点.所以strust2框架也是一个基于Web的MVC框架注意:strust2框架并不是struts1框架的延续或者升级,俩者有着很大的不同2.web项目中的三层架构(和MVC是俩个完全不同的架构)1.表示层(Struts2框架就是工作在这个地方)2.业务逻辑层(service层,处理业务逻辑,比如判断用户名是否存在、密码是否正确、权限是否拥有、账号是否被冻结、账号是否异常、用户积分是否到达操作要求等等,多为一些执行某一个操作条件的判断)3.数据访问层(dao层,专门处理和数据库进行交换的事情,jdbc/hibernate就在这里使用)在项目中,这些不同的分层的表现形式,其实就是在我们自己建的不同的package 中写上各自分层中所使用的java类.比如在项目中我们建了三个package,三个package中java类的作用分别为表示层的代码、业务逻辑层代码、数据访问层代码。
注意:可以理解为,MVC架构是这里说描述的三层架构的一部分,即:三层架构中的表示层可以使用mvc架构的框架来实现,例如使用struts2框架.3.使用struts2框架的好处(为什么要使用struts2框架)减少编程人员代码的编写,使代码更加简洁明了,缩短开发时间,增加开发效率.4.struts2框架引入到web项目中首先使用Eclipse/MyEclipse中建一个web项目.1.把struts2相关jar包引入到项目中。
webwork(struts)+spring+hibernate配置
Hibernate+spring+webwork架构整合项目路径:资源包如图:资源包说明:Webwork: oscore.jar,xwork.jar,webwork-2.2.7.jar,commons-logging.jar,ognl.jar, javassist.jar,javamail.jar,freemarker.jar,commons-logging.jarSpring: spring.jar, log4j-1.2.15.jar, aspectjweaver.jar, aspectjrt.jarHibernate: ejb3-persistence.jar, hibernate3.jar, hibernate-annotations.jar, hibernate-commons-annotations.jar,mysql-connector-java-3.1.12-bin.jar其他资源包为默认或其他功能包。
jdbc.properties配置:db.cache_provider_class=org.hibernate.cache.EhCacheProvider db.dialect=org.hibernate.dialect.MySQL5InnoDBDialectdb.driver=com.mysql.jdbc.Driverdb.password=rootdb.show_sql=truedb.url=jdbc\:mysql\://localhost\:3306/mywebwe_query_cache=trueername=rootwebwork.properties配置:webwork.configuration.xml.reload=falsewebwork.action.extension=dowebwork.i18n.encoding=UTF-8webwork.custom.i18n.resources=applicationwebwork.i18n.reload=falsewebwork.locale=zh_CNwebwork.url.http.port=8686webwork.ui.templateDir=wwtemplatewebwork.multipart.maxSize=2097152webwork.multipart.parser=jakartawebwork.multipart.saveDir=/tempwebwork.objectFactory=springwebwork.objectFactory.autoWire=truesrc下的xwork配置:<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "/xwork/xwork-1.1.1.dtd"><xwork><include file="webwork-default.xml" /><include file="/cn/org/web/web-xwork.xml"/></xwork>plugin-context.xml配置:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""/dtd/spring-beans.dtd"><beans><import resource="classpath*:cn_core/org/web/core-context.xml"/> <import resource="classpath*:cn/org/web/web-context.xml"/><bean id="mappingLocations"class="org.springframework.beans.factory.config.ListFactoryBean"> <property name="sourceList"><list><value>classpath:cn/org/web/entitys/*.hbm.xml</value></list></property></bean><bean id="annotatedClasses"class="org.springframework.beans.factory.config.ListFactoryBean"> <property name="sourceList"><list><!-- value>.coral.volunteer.entity.ExpoAboutMe</value><value>er.hbm.xml</value> --></list></property></bean></beans>core-context.xml配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:aop="/schema/aop"xmlns:context="/schema/context"xmlns:jee="/schema/jee"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/beans/schema/beans/spring-beans-2.5.xsd /schema/context/schema/context/spring-context-2.5.xsd /schema/jee/schema/jee/spring-jee-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"default-autowire="byName"><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderCo nfigurer"><property name="locations"><list><value>classpath:jdbc.properties</value></list></property></bean><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${ername}"/><property name="password" value="${db.password}"/></bean><bean id="defaultLobHandler"class="org.springframework.jdbc.support.lob.DefaultLobHandler"lazy-init="true"/><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessio nFactoryBean"><property name="lobHandler" ref="defaultLobHandler"/><property name="hibernateProperties"><props><prop key="hibernate.dialect">${db.dialect}</prop><prop key="hibernate.show_sql">${db.show_sql}</prop><prop key="hibernate.format_sql">true</prop><prop key="e_sql_comments">true</prop><prop key="e_query_cache">${e_query_cache}</prop><prop key="hibernate.default_batch_fetch_size">16</prop><prop key="hibernate.jdbc.fetch_size">30</prop><prop key="hibernate.jdbc.batch_size">25</prop><prop key="hibernate.cache.provider_class">${db.cache_provider_class}</prop><prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JOTMTransactionManagerLookup</prop><prop key="erTransaction">java:comp/env/UserTransaction</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><property name="mappingLocations" ref="mappingLocations"/><property name="annotatedClasses" ref="annotatedClasses"/></bean><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager "><property name="sessionFactory" ref="sessionFactory"/></bean><aop:config proxy-target-class="true"><aop:advisor pointcut="execution(* .web..*Service.*(..))" advice-ref="txAdvice"/><aop:advisor pointcut="execution(* .web..*Manager.*(..))" advice-ref="txAdvice"/><aop:advisor pointcut="execution(* .web..*Dao.*(..))"advice-ref="txAdvice"/><aop:advisor pointcut="execution(* cn_.web..*Dao.*(..))" advice-ref="txAdvice"/></aop:config><tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes><tx:method name="save"/><tx:method name="save*"/><tx:method name="modify*"/><tx:method name="remove*"/><tx:method name="delete*"/><tx:method name="change*"/><tx:method name="*" read-only="true"/></tx:attributes></tx:advice></beans>package .web.login下的xwork.xml配置:<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "/xwork/xwork-1.1.1.dtd"><xwork><package name="main" namespace="/main" extends="webwork-default"><action name="index" class=".web.login.view.LoginAction"><result name="success">/index.jsp</result></action></package></xwork>package .web.login下的context.xml配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd" default-autowire="byName" default-lazy-init="true"><bean id="loginManager" class=".web.login.manager.LoginManager"/ </beans>Spring AOP切点:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd" default-autowire="byName" default-lazy-init="true"><!-- 对loginmanager下面的printstr方法进行切面 --><bean id="loginManager"class=".web.login.manager.LoginManager"/><bean id="loginService" class=".web.login.service.LoginService" /><aop:config><aop:aspect id="loginss" ref="loginService"><!-- 定义切点:printstr方法--><aop:pointcut id="lon" expression="execution(*.web.login.manager.LoginManager.printstr(..))" /><!--在切点前调用.web.login.service.LoginService下的postbefore方法--><aop:before method="postbefore" pointcut-ref="lon"/><!--在切点后调用.web.login.service.LoginService下的post方法--><aop:after method="post" pointcut-ref="lon"/></aop:aspect></aop:config></beans>。
WEBWORK的各种使用技巧
第1章WEBWORK框架说明1.1 框架类使用WEBWORK框架,必须继承WEBWORK的AcctionSupport,该类由框架提供,框架具有两个抽象方法:1.protected void doValidation()2.protected String doExecute() throws ExceptionWEB类简化的代码如下:/*** @webwork.action name="sort.add" success="sort.list.action" error="/showError.jsp"*/public class XxxxxAction extends ActionSupport {private xxxx;protected void doValidation() {super.doV alidation();}protected String doExecute() throws Exception {if (super.getHasErrorMessages()) return ERROR;try {sortData = sortMgr.createSort(bigSortId,sortData);} catch (javax.ejb.CreateException e) {super.addErrorMessage(super.getText("bigSort.notFound"));return ERROR;}return SUCCESS;}}注意:框架类之间可以互相继承,但是父类不能有xdoclet的Action 声明,否则产生出来的view.properter文件中,会出现:一个Action名对应两个Action类1.2 框架调用流程用户提交后JSP发出提交请求到Action,Acion中首先调用doValidation()方法,改方法主要负责检查用户提交的表单,在这个函数中可以根据需要设置检查的项目。
Webwork配置
看到这样的题目,看到“配置”这个key w ord,你的脑海中是不是会呈现出一堆堆的XML、properties文件呢?是的,我说的配置,就是各位平常在做项目的时候经常碰到的配置文件。
在一个项目中,配置文件是很重要的,不管它是简短的还是冗长的。
配置文件指出了一个系统中可变化、可设定的部分,也就是说一个系统将其中一部分信息独立出来,将设定这些信息的权利交给了用户,这样用户就可以根据自己的需要来进行设定,从而增强了系统的灵活性及适应性。
虽然配置文件很重要,但是它通常都给人以冗长而繁琐的感觉。
哪怕现在绝大多数的配置文件都是XML,哪怕XML 本身也是自描述的,配置文件都很难给人以一种美感,它在大部分情况下实在是太冗长了。
在我现在所做的一个使用P ortal的项目中,配置文件portlet.xml的行数就高达六千行以上,web.xml也有近三千行!这样的配置文件除了给机器看之外,没有人愿意去看它了。
难道配置文件由始至终都是那样丑陋吗?在接触WebWork之前,我确实就是这样认为的,但是当WebWork的配置文件呈现在眼前的时候,我的偏见彻底被颠覆了,我发现配置文件原来也可以那样的美。
不信?让我们看看去!与WebWork相关的配置文件有三个:通用的web.xml、xwork.xml和webwork.properties。
web.xml中的配置跟其他的框架一样,保持着简练的风格。
如果你不打算使用WebWork的标签库,就只需要在web.xml中定义好作为Request Dispatcher的Servlet即可:<web-app><servlet><servlet-name>webwork</servlet-name><servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-clas s></servlet><servlet-mapping><servlet-name>webwork</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping></web-app>而webwork.properties中则是定义了很多与Web Application相关的属性,便于你进行配置。
WebWork教程
WebWork教程-0.90版作者:moxie(安子)发布记录:2004-6-29:WebWork教程0.90版说明:本次发布的是初稿部分,除了章节:“实战G-Roller-WW”、“WebWork与其它开源项目的集成”,其余章节全部完成。
目录WebWork教程-0.90版 (1)WebWork介绍 (3)WebWork安装-HelloWorld (3)WebWork安装 (3)HelloWorld (4)Action(动作) (6)Action介绍 (6)用户注册例子 (6)Field-Driven Action vs. Model-Driven Action (10)ActionContext(Action上下文) (12)ActionContext介绍 (12)ServletActionContext (13)ServletDispatcher原理 (14)Action的单元测试 (17)Result Type (18)表达式与言EL和OGNL (22)OGNL介绍 (22)值堆栈-OgnlV alueStack (22)Interceptor(拦截器)框架 (28)Interceptor的原理 (31)验证框架 (32)为用户注册添加验证功能 (32)XWork配置详述 (37)xwork.xml文件的标签元素 (37)实战G-Roller-WW (41)G-Roller-WW介绍 (41)JSTL与WebWork的整合 (41)中文解决方案 (41)WebWork与其它开源项目的集成 (41)Spring (41)Hibernate (41)Xml-RPC (41)总结 (42)附录 (42)我钟爱的Opensympnony (42)从技术的角度Struts1.1与WebWork2的比较 (44)WebWork的项目资源 (46)参考资料 (46)WebWork介绍WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。
dispatcher和redirect的区别
WebWork Result Type :dispatcher和redirect的区别2009年12月16日星期三09:45最近一直在学习WebWork,学习了result类型之后,对dispatcher和redirect做个比较。
1.讲讲它们各自的工作原理重定向的工作原理:通过在HTTP头把一个302的HTTP返回码和新的位置一并发送至浏览器,然后浏览器将自动发出一个指向这个新位置的HTTP请求。
dispatcher result的工作原理:它发出一个内部的对资源的请求,只通过一个请求为浏览器生成最终的视图。
2.通过一个购买在线书籍的例子进行说明,这一区别相当重要。
假设有以下配置(dispatcher result):<action name=“checkoutorder” class="org.eliot.CheckoutOrder"><result name="success">order-confirmation.jsp</result></action>这个时候用户单击了结账的按钮---链接至/checkoutorder.action----账单被处理并且显示一个确认的页面。
这意味着如果用户单击了浏览器的刷新按钮,账单将会再次被结付----这并不是用户最期待的结果。
接下来,看看另外一个配置(redirect):<action name=“checkoutorder” class="org.eliot.CheckoutOrder"><result name="success" type="redirect">order-confirmation.jsp</result></action>使用以上这个配置,当用户结账的时候,浏览器最终的位置将会是order-confirmation.jsp。
WebWork 开发指南
XWork中,可以通过package对action进行分组。类似Java中package和class的关 系。为可能出现的同名Action提供了命名空间上的隔离。
1.将Web页面中的输入元素封装为一个(请求)数据对象。 2.根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参 数传入。 3.逻辑处理单元完成运算后,返回一个结果数据对象。 4.将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。 首先来看登录界面: index.jsp <html>
这种朦胧的感觉,则可能来自曾经在国内流行一时的论坛软件-Jive Forum。 很多软件技术人员不惜从各种渠道得到Jive的源代码,甚至是将其全部反编译 以探其究竟。作为一个论坛软件能受到技术人员如此垂青,想必作者睡梦中也会乐 醒。 而WebWork,就是Jive中,MVC实现的核心。 这里我们所谈及的WebWork,实际上是Webwork+XWork的总集,Webwork1.x 版本中,整个框架采用了紧耦合的设计(类似Struts),而2.0之后,Webwork被拆 分为两个部分,即Webwork 2.x +XWork 1.x,设计上的改良带来了系统灵活性上的 极大提升。这一点我们稍后讨论。
<input type="reset" value="重置" name="B2"/>
</p> </form> </body> </html> 这里的index.jsp实际上是由纯html 组成的,非常简单,其中包含一个表单:
01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本
1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。
轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。
Struts2实现了MVC,满足了MVC设计思想。
在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。
作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。
这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。
Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。
重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。
1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。
它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。
1、M-Model 模型模型(Model)的职责是负责业务逻辑。
包含两层:业务数据和业务处理逻辑。
比如实体类、DAO、Service都属于模型层。
2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。
属于视图的组件是不包含业务逻辑和控制逻辑的JSP。
3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。
比如:在Servlet项目中的单一控制器ActionServlet。
Struts2详细实例教程
Struts2(上)一、经典的MVC模式二、Struts1.x对MVC的实现三、Struts1.x的主要组件和作用组件作用ActionServlet 中央控制器Action 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个ActionStruts-config.xml 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件Struts标签库和JSTL类似,和Struts-config.xml、ActionForm、Action等对象可以紧密集成四、Struts1.x 开发实例-登录程序见案例。
五、Struts2(WebWork)的MVCStruts2的MVC架构六、Struts2的主要组件组件作用FilterDispatcher 起中央控制器作用的过滤器Action 处于Model层的Action,调用JavaBean实现业务逻辑struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视图技术。
七、Struts2的实例-登录在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:package mypack;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;private String userpass;public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getUserpass() {return userpass;}public void setUserpass(String userpass) {erpass = userpass;}@Overridepublic String execute() throws Exception {if ("Mike".equals(username) && "123".equals(userpass)|| "张三".equals(username) && "abc".equals(userpass))return "success";elsereturn "error";}}在src目录下建立Struts2的配置文件struts.xml,内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><!-- 定义包管理配置的action 继承struts-default.xml中的配置 --><package name="actions" extends="struts-default"><!-- 定义Action(login.action) --><action name="login" class="erAction"><!-- 定义转发路径对应的字符串名 --><result name="success">/Success.jsp</result><result name="error">/Error.jsp</result></action></package></struts>修改web.xml,在其中加入一个过滤器,过滤/*路径。
Webwork.in.action第一部分
第1章WebWork的概貌本章涵盖:■ 为什么MVC是重要的■ 框架和容器■ WebWork的背景和未来■ CaveatEmptor范例程序4 WebWork in Action中文版我们首先设想一个情景:你刚刚完成一个1.0版的Web应用程序并发布了,而你的大客户却立即提出了要求——在1.1的版本中,用户界面必须进行很大程度的修改以符合他们公司的使用标准。
修改几乎涉及了所有方面:从数据录入表单上的字段数量到按钮及图像的位置,再到各种向导所包含的步骤数量,等等。
而且客户要求在下个星期前完成这样的修改!面对这样的挑战,你可能会气定神闲,不动声色,也可能想着要准备简历换东家了。
这天渊之别取决于你的Web应用程序是如何构建的。
在早期的Web应用程序开发当中,程序员通常会使用像Perl这样的脚本语言,通过脚本将需要显示的内容直接打印出来。
同时,这些脚本中也包含了关键的商业逻辑。
很明显,这种方式将核心的商业代码和表现层紧密耦合在一起了。
时至今日,像Perl、PHP、JSP、ASP这些类库和其他支持Web开发的语言都在设法解决商业逻辑代码和表现层代码之间的解耦合问题。
若想满足用户的需求就像在公园里散步一样轻松,就取决于使用的类库,以及你是否能够充分发挥它的优越性了。
在本书中,你将会学到如何使用Java领域中最流行的Web框架之一:WebWork。
WebWork是一个优越的框架,它的设计基于这样一个基本原理:完成通用任务应该是简单的,而构建高级的设计也应该是可行的。
WebWork的开发者只想提供一个能够为你工作的框架,而不是一个与你作对的框架。
为了帮助你学习WebWork,我们将向你演示如何使用WebWork基本及高级的特性构建一个改进版本的应用程序CaveatEmptor。
CaveatEmptor最初出现在《Hibernate in Action》(Manning Publications,2004年,/bauer)一书中。
javaweb程序设计教程课后答案(可编辑)
java web程序设计教程课后答案第1章 Web应用开发简介习题答案1.Web在组成上包括______和______两部分。
答案:服务器客户端2.谈谈对面向对象的认识。
答案:面向对象将将要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙解决问题中的各个步骤中的行为。
面向对象编程方式是建立在面向过程编程方式基础上,其最重要的改变在于面向对象编程中,程序将围绕被操作的对象来设计,而不是操作本身。
面向对象编程方式以类作为构造程序的基本单位,具有封装、抽象、继承、多态性等特点。
3.介绍几种常用的框架技术。
答案:Java中常用的框架。
1.StrutsStruts是Apache 基金会Jakarta 项目组的一个开源项目,是一个基于Sun J2EE平台的MVC框架,它将Servlet和JSP标签作为实现自身功能的一部分。
2.WebWorkWebWork是由OpenSymphony组织开发的,是一个基于Web的MVC 框架。
它在运行时通过Interceptor(拦截器)自动应用,因此脱离了Action类。
3.Struts 2Struts 2是Apache基金会的一个开源项目,它建立在Struts框架与WebWork框架基础之上,继承了二者的优点,是目前非常流行的一个Web框架。
4.SpringSpring是一个以IoC和AOP为核心的轻量级容器框架。
它提供了一系列的Java EE开发解决方案,包括表示层的Spring MVC、持久层的Spring JDBC以及业务层事务管理等众多的企业级应用技术。
5.HibernateHibernate是一个ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装。
通过使用Hibernate框架,开发人员能够以面向对象的思维方式来操作数据库。
6.Ibatis相对于Hibernate而言,Ibatis是一个“半自动化”的ORM实现框架,它主要致力于POJO与SQL之间的映射关系,是对“全自动化”ORM框架的一种有益补充。
webwork与struts的比较
特性Struts WebWork 1.x WebWork 2.xAction classes Struts要求Action类继承一个抽象类. 这也说明了Struts的一个常见问题: 针对抽象类编程而不是接口.Action必需实现webwork.Action接口. 还有其他接口可以实现其他服务, 如保存错误信息, 获取本地化文本等.ActionSupport类实现了其中的一些接口,也可以用作基类.WebWork全部针对接口编程, 这样很容易插入你自己的实现.与WebWork 1.x相同, Action必需实现com.opensymphony.xwork.Action接口, 还有一系列接口用于其他服务.WebWork2提供ActionSupport 实现这些接口.线程模型Struts的Action必须是线程安全的, 因为它仅使用一个示例处理全部请求. 这一限制导致Struts的Action执行过程中使用的任何资源必须是线程安全的或同步访问.WebWork的Action每一个请求使用一个实例, 一次就不存在线程安全问题. 实践中, 每一次请求Servlet容器都会生成许多将被丢弃的对象,多一个或几个对象并没有证明会带来性能问题或垃圾收集问题.同上对Servlet的依赖性Struts的Actions依赖于Servlets, 因为执行时使用(获取)了ServletRequest和ServletResponse(而不是HttpServletRequest和HttpServletResponse). 绑定Servlets(虽然不是HttpServlet)实际上就与Servlet容器绑定了,而这种依赖关系并不需要. 例如, Servlet可以在Web环境之外运行, 但JMS就不能.WebWork的Action没有绑定Web或其他任何容器. WebWork的action可以选择从ActionContext中获取request和response, 但这不是必须的并且仅当绝对必要时才是用, 这并不会与Web容器绑定.同上可测试性已经有许多测试Struts应用的策略, 但主要障碍实际是Struts的Action与Web紧密的绑定在一起(获取Request和Response对象). 着导致人们经常在一个容器中测试Sstruts的Action, 这样做既缓慢而又无法进行单元测试. 有一个Junit的扩展包: Struts TestCase(/)WebWork的action可以通过实例化action, 设置属性并执行的方式进行测试同上, 但重点在于反转控制(Inversion ofControl)让测试变得更简单, 你可以在测试中设置一个实现服务接口的Mock对象进行测试, 而不需要设置服务注册表或使用单件(static singleton)FormBeans Struts需要为每个表单使用FormBean, 这产生了大量的多余的类或者不得不使用DynaBean,而这恰恰是这一限制的产物WebWork 1.x允许直接使用Action的属性(也就是标准的Javabean属性), 属性可以包含丰富的对象类型甚至可以有自WebWork 2支持WebWork 1中的特性,还加入了ModelDriven的Actions, 它允许使用丰富的对象类型或域对象作为formbean, 可以在Web页面中直接访问它的属性, 这要好于作为活动属性的子属性进行访问.己的属性, 而这些属性都可以从Web页面中访问. WebWork也支持FormBean模式, 在"WW1:Populate Form Bean and access its value"中有关一这部分的介绍表达式语言Struts 1.1集成了JSTL, 因此它使用JSTL EL.该语言支持基本的对象图遍历, 但对集合和索引的属性的支持要弱一些.WebWork 1.x拥有自己的表达式语言用以访问值栈. 对集合以及索引属性的支持很基本但很好.WebWork也可以直接与JSTL共同使用,参见WW1:UsingJSTL seamlesslywith WebWorkWebWork 2使用XW:Ognl, 这是一个非常强大的表达式语言, 也可以访问值栈.Ognl对集合和索引属性的支持非常强大.Ognl还支持一些强大的特性如投射(projections, 对集合的每一个元素调用同一个方法并使用结果创建一个新的集合), 挑选(selections, 使用一个选择表达式过滤集合并返回一个子集), 列表构造和lambda表达式(简化功能). Ognl还能访问静态方法, 静态字段和构造方法.WebWork2也能使用JSTL, 参见WW1:Using JSTL seamlessly withWebWork将值绑定到视图Struts使用标准的JSP将对象绑定到pageContext, 这使得视图与formBean紧密耦合WebWork设置了值栈, WebWork标签库可以从中十分灵活的同上动态查找所需的值, 而不需要将视图与数据类型紧密耦合. 这样就可以在很大的范围内复用视图.类型转换Struts的FormBeans属性通常都是字符串.Struts使用Commons-Beanutils进行类型转换. 每个类使用一个转换器, 但不允许为每个实例配置不同的转换器. 获取一个有意义的类型转换错误并显示给用户也是很难做到的.WebWork 1.x使用PropertyEditors进行类型转换.PropertyEditors针对类型而不是Action,但字段错误信息可以加到活动的字段信息表中并自动显示给用户.WebWork2使用Ognl进行类型转换, 并为基本类型提供了转换器. 类型转换缺省情况下使用上述转换器, 但也可以为每个类的每个字段指定转换器. 类型转换错误也有缺省错误信息但可以使用本地化机制设置每个字段的信息, 字段错误信息可以加到活动的字段信息表中并显示给用户.前/后处理模式必须创建一个继承基类Action的类来作为Action前/后处理的代理, 这将导致类继承层次过深, 也可能因为单继承的限制而无能为力WW:Comparison to Struts#1类继承WebWork 2允许使用截取器模块化前/后处理. 拦截器可以通过配置动态添加, 两者之间没有任何耦合.校验Struts调用FormBean的validate()方法.Struts用户通常使用Commons Validation进行校验. 我对此不太了解, 因此仅提出几个问题:由于FormBean属性一般都是字符串, 某些校验方法是否会重复或无法做到?WebWork1.x调用Action的 validate()方法, 你可以编写代码校验, 也可以调用外部校验框架(这显然WebWork2可以使用WebWork1.x和Struts的validate()方法, 还可以使用XW:校验框架, 它由一个XWork截取器激活. Xwork校验框架允许用XML格式编写校验器, 可以为每个类提供一个缺省校验器并在不同的校验环境中使用定制校验Commons Validation是否能为同一个类设置不同的校验环境? (我已被告知可以做到, 这是好事)Commons Validation能否使用为对象属性类定义的校验方式对子对象(sub-objects)进行校验?与Sstruts相同) 器.Xwork校验框架由一个截取器激活因此与Action类完全解藕. 还可以使用VisitorFieldValidator将校验处理连接到子属性(sub-properties, [与上文提到的子对象相同).对Action执行过程的控制以我的了解, Struts设置一个Action对象, 而你对执行的顺序几乎无法控制. 要改变这一点, 我认为需要编写自己的Servlet来自行处理分发(dispatching)由ActionFactory链控制Action创建和初始化的过程, 但需要编写一个类在这以问题上WebWork 2的截取器栈十分有用. 设置Action的各方面功能都被转移到截取器中实现(如设置参数, 校验等),因此你可以依据截取器的功能控制每一个Action的执行顺序. 例如你可能希望你的IOC框架在request参数设置之前完成Action配置, 反之亦然 - 也可以使用截取器栈对每个包或每个类进行控制.WebWork 2 : xwork.xmlThis page last changed on May 26, 2004 by ctran.示例<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE xworkPUBLIC"-//OpenSymphony Group//XWork 1.0//EN""/xwork/xwork-1.0.dtd"><xwork><include file="webwork-default.xml"/><package name="default" extends="webwork-default"><interceptors><interceptor-stack name="defaultComponentStack"><interceptor-ref name="component"/><interceptor-ref name="defaultStack"/></interceptor-stack></interceptors><default-interceptor-ref name="defaultStack"/><action name="SimpleCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter"> <result name="success" type="dispatcher">/success.jsp</result><interceptor-ref name="defaultComponentStack"/></action><!--- Velocity implementation of the SimpleCounter. Also demonstrate a more verbose version of result element --><action name="VelocityCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter"> <result name="success" type="velocity"><param name="location">/success.vm</param></result><interceptor-ref name="defaultComponentStack"/></action><!--- Different method can be used (processForm).--><action name="formTest" class="com.opensymphony.webwork.example.FormAction" method="processForm" > <result name="success" type="dispatcher">/formSuccess.jsp</result><result name="invalid.token" type="dispatcher">/form.jsp</result><interceptor-ref name="defaultStack"/><interceptor-ref name="token"/></action></package></xwork>活动<action name="formTest" class="com.opensymphony.webwork.example.FormAction" method="processForm">活动是WebWork的基本工作单元, 它正是定义了活动. 活动通常有一个请求(通常是点击按钮, 或提交表单). 主要的action元素有两部分, 友好的名字(在URL中引用, 如saveForm.action)和对应的"处理(handler)"类.可选的"method"属性告诉WebWork应当调用活动的哪个方法. 如果你不填写method属性, WebWork缺省调用execute(). 如果活动没有execute()方法, 也没有在xml中指定method属性, WebWork将抛出异常.同样, 你也可以在表单中指定"actionName!something"来告诉WebWork调用"doSomething"方法. 例如, "formTest!save.action"将调用FormAction的"save"方法. 该方法必须是public且没有参数:public String save() throws Exception{...return SUCCESS;}活动的所有配置都可以用在"actionName!something"中(截取器, 结果类型等)结果<result name="missing-data" type="dispatcher"><param name="location">/form.jsp</param><param name="parameterA">A</param><param name="parameterB">B</param></result>Result元素告诉WebWork活动执行后下一步该做什么. "name"属性对应活动execute() 方法返回的结果代码. "type"属性表示使用哪个结果类型(参见结果类型). 可以使用"param"元素向视图传递参数:<result-types>....<result-type name="header"class="com.opensymphony.webwork.dispatcher.HttpHeaderResult"/></result-types><result name="no-content" type="header"><param name="status">204</param><param name="headers.customHeaderA">A</param><param name="headers.customHeaderB">B</param></result>下面是WebWork内置的标准结果代码(定义在Action接口中), 包括:Action.SUCCESS = "success";Action.NONE = "none";Action.ERROR = "error";Action.INPUT = "input";Action.LOGIN = "login";你可以扩充你认为适合的结果代码(如"missing-data"). 大多数情况下你只需使用SUCCESS和ERROR, SUCCESS将前进到下一个页面.如果你只需要指定"location"属性, 可以使用简写形式:<result name="missing-data" type="dispatcher">/form.jsp</result>参阅webwork-default.xml或Result Types以了解标准结果类型截取器截取器允许定义活动执行前后的代码. 截取器是编写Web应用的强大工具. 一些最常用的实现是:•安全检查(确保用户已登陆)•跟踪纪录(记录每一个活动)•检查执行瓶颈(在活动前后启动计时器, 以检查应用瓶颈)也可以将截取器连接起来创建一个截取器栈. 如果你想完成登陆检查, 安全检查, 并记录每个活动调用, 使用截取器栈会十分容易.必须先定义截取器(给它命名)然后才能联接成栈:<interceptors><interceptor name="security" class="com.mycompany.security.SecurityInterceptor"/><interceptor-stack name="defaultComponentStack"><interceptor-ref name="component"/><interceptor-ref name="defaultStack"/></interceptor-stack></interceptors>要在活动中使用它们:<action name="VelocityCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter"> <result name="success">...</result><interceptor-ref name="defaultComponentStack"/></action>注意: 可以引用拦截器或栈的名字更多细节参见截取器.视图WebWork支持JSP和Velocity作为应用表示层. 本例使用JSP文件. Webwork附带了标签库(taglibs). 你可以在JSP中项组件一样使用标签库.下面是form.jsp的片断:<%@ taglib prefix="ww" uri="webwork" %><html><head><title>Webwork Form Example</title></head><body><ww:form name="myForm" action="'formTest'" namespace="/" method="POST"><table><ww:textfield label="First Name" name="'formBean.firstName'" value="formBean.firstName"/><ww:textfield label="Last Name" name="'stName'" value="stName"/><ww:submit value="Save Form"/></table></ww:form></body>处理经过如下:1.WebWork监控以.action结尾的URI(定义在web.xml中)2.WebWork在活动定义中查找活动formTest.3.WebWork创建formTest并调用com.opensymphony.webwork.example.FormAction的方法processForm(定义在xwork.xml中).4.该方法处理成功并返回SUCCESS5.WebWork将返回值SUCCESS转换成地址formSuccess.jsp(定义在b class="strong">xwork.xml中)并执行重定向.包含为了易于管理大规模开发活动(包含大量活动和配置), WebWork允许在xwork.xml中包含其他配置文件 :<xwork><include file="webwork-default.xml"/><include file="user.xml"/><include file="shoppingcart.xml"/><include file="product.xml"/>....</xwork>被包含文件必须与xwork.xml的格式相同(具有相同的doctype及其它)并放置在类路径中(通常位于/WEB-INF/classes或/WEB-INF/lib的jar文件WebWork 2 : webwork-default.xmlThis page last changed on Oct 23, 2004 by plightbo.基本配置文件webwork-default.xml包含在webwork的jar文件中. 该文件可以包含在xwork.xml 中以便包含标准的配置信息而无需复制, 如下:<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork1.0//EN""/xwork/xwork-1.0.dtd"><xwork><include file="webwork-default.xml"/><package name="default" extends="webwork-default">...</package></xwork>2.1.5版本的webwork-default.xml内容如下:<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN""/xwork/xwork-1.0.dtd"><xwork><package name="webwork-default"><result-types><result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true"/><result-type name="redirect" class="com.opensymphony.webwork.dispatcher.ServletRedirectResult"/><result-type name="velocity" class="com.opensymphony.webwork.dispatcher.VelocityResult"/><result-type name="chain" class="com.opensymphony.xwork.ActionChainResult"/><result-type name="xslt" class="com.opensymphony.webwork.views.xslt.XSLTResult"/><result-type name="jasper"class="com.opensymphony.webwork.views.jasperreports.JasperReportsResult"/><result-type name="freemarker" class="com.opensymphony.webwork.views.freemarker.FreemarkerResult"/><result-type name="httpheader" class="com.opensymphony.webwork.dispatcher.HttpHeaderResult"/><result-type name="stream" class="com.opensymphony.webwork.dispatcher.StreamResult"/> </result-types><interceptors><interceptor name="timer" class="com.opensymphony.xwork.interceptor.TimerInterceptor"/><interceptor name="logger" class="com.opensymphony.xwork.interceptor.LoggingInterceptor"/><interceptor name="chain" class="com.opensymphony.xwork.interceptor.ChainingInterceptor"/><interceptor name="static-params"class="com.opensymphony.xwork.interceptor.StaticParametersInterceptor"/><interceptor name="params" class="com.opensymphony.xwork.interceptor.ParametersInterceptor"/><interceptor name="model-driven" class="com.opensymphony.xwork.interceptor.ModelDrivenInterceptor"/><interceptor name="component"class="ponentInterceptor"/><interceptor name="token" class="com.opensymphony.webwork.interceptor.TokenInterceptor"/><interceptor name="token-session"class="com.opensymphony.webwork.interceptor.TokenSessionStoreInterceptor"/><interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/><interceptor name="workflow" class="com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor"/><interceptor name="servlet-config"class="com.opensymphony.webwork.interceptor.ServletConfigInterceptor"/><interceptor name="prepare" class="com.opensymphony.xwork.interceptor.PrepareInterceptor"/><interceptor name="conversionError"class="com.opensymphony.webwork.interceptor.WebWorkConversionErrorInterceptor"/><interceptor name="fileUpload" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor"/><interceptor name="execAndWait"class="com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor"/><!-- Basic stack --><interceptor-stack name="defaultStack"><interceptor-ref name="servlet-config"/><interceptor-ref name="prepare"/><interceptor-ref name="static-params"/><interceptor-ref name="params"/><interceptor-ref name="conversionError"/></interceptor-stack><!-- Sample validation and workflow stack --><interceptor-stack name="validationWorkflowStack"><interceptor-ref name="defaultStack"/><interceptor-ref name="validation"/><interceptor-ref name="workflow"/></interceptor-stack><!-- Sample file upload stack --><interceptor-stack name="fileUploadStack"> <interceptor-ref name="fileUpload"/><interceptor-ref name="defaultStack"/> </interceptor-stack><!-- Sample Inversion of Control stack --> <interceptor-stack name="componentStack"> <interceptor-ref name="component"/><interceptor-ref name="defaultStack"/> </interceptor-stack><!-- Sample model-driven stack --><interceptor-stack name="modelDrivenStack"> <interceptor-ref name="model-driven"/><interceptor-ref name="defaultStack"/></interceptor-stack><!-- Sample action chaining stack --><interceptor-stack name="chainStack"><interceptor-ref name="chain"/><interceptor-ref name="defaultStack"/></interceptor-stack><!-- Sample execute and wait stack.Note: execAndWait should always be the *last* interceptor. --> <interceptor-stack name="executeAndWaitStack"><interceptor-ref name="defaultStack"/><interceptor-ref name="execAndWait"/></interceptor-stack><!-- A complete stack with all the common interceptors in place. Generally, this stack should be the one you use, though itmay process additional stuff you don't need, which couldlead to some performance problems. Also, the ordering can be switched around (ex: if you wish to have your componentsbefore prepare() is called, you'd need to move the componentinterceptor up --><interceptor-stack name="completeStack"><interceptor-ref name="prepare"/><interceptor-ref name="servlet-config"/><interceptor-ref name="chain"/><interceptor-ref name="model-driven"/><interceptor-ref name="component"/><interceptor-ref name="fileUpload"/><interceptor-ref name="static-params"/><interceptor-ref name="params"/><interceptor-ref name="conversionError"/><interceptor-ref name="validation"/><interceptor-ref name="workflow"/></interceptor-stack></interceptors></package></xwork>文件中定义了全部缺省结果和截取器, 还定义了一些截取器栈供你直接使用或作为特定截取器栈的基础. 注意: 包名字是"webwork-default".Document generated by Confluence on Dec 14, 2004 16:37web.xml文件简单明了, 易于配置.Web.xml配置ServletDispatcher应用中最常用的活动调用入口点是直接访问一个URL或使用表单向活动提交数据. 下例展示了如何配置ServletDispatcher来处理活动.<!-- This entry is required to have the framework process calls to WebWork actions --><servlet><servlet-name>webworkDispatcher</servlet-name><servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>webworkDispatcher</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping>注意: 上面的例子假定活动使用".action"扩展名. 如果你向使用不同的扩展名, 将url-pattern元素改为你需要的扩展名并使用该扩展名修改调用代码.WebWork 2 : 全局结果全局结果允许定义一个结果映射, 它可以作为全部活动的缺省结果, 并自动被本包及所有扩展包中的活动继承. 换言之, 如果你想为多个活动指定同一个结果, 就可以把它定义为全局结果.示例<package name="default">....<global-results><result name="login" type="dispatcher"><param name="location">login.jsp</param></result></global-results><action name="foo" class="mypackage.fooAction"><result name="success" type="dispatcher">bar.jsp</result></action><action name="submitForm" class="mypackage.submitFormAction"> <result name="success" type="dispatcher">submitSuccess.jsp</result> </action>...</package>等同于<package name="default">....<action name="foo" class="mypackage.fooAction"><result name="success" type="dispatcher">bar.jsp</result><result name="login" type="dispatcher">login.jsp</result></action><action name="submitForm" class="mypackage.submitFormAction"> <result name="success" type="dispatcher">submitSuccess.jsp</result> <result name="login" type="dispatcher">login.jsp</result></action>...</package>。
基于WebWork框架的数据持久化实现
式的 JE b 2 EWe 框架 , 现在的 WeWo 2 x b r . 前身是 k
wew0 10, b r2 0已经 拆 分 为 X ok b r . WeWok . k wrl和 WeWo 2两 个项 目。X ok简 洁 、 b r k wr 灵活 功能 强大 ,
它 是一 个标 准 的 C m a d模 式 实现 , 且 完 全从 o mn 并 w b层脱 离 出来 。We Wok e b r2建 立 在 X ok之 上 , wr
维普资讯
l4 6
计算机 与数工程
第3 5卷
基 于 WeWok框 架 的数 据 持 久化 实 现 b r
唐 芸 周 学君 彭代 军
宜昌  ̄3 2 0 ) ( 三峡大学 电气信息学院
摘
要
介绍 wewok框架 的工作原理 , b r 分析 O M框架 Hb r t实现对象持久化 的方法 , R ie ae n 同时实现 WeWo b r k和 H . i MV WeWok框架 C b r
处 理 H qP的响应 和请 求 , q' 它在 w b x 文件 里 配 e.ml
置 一 个 派 遣 器 Srl D sace , ev t i a h r e e i t r Srl D s t e vt p h e pc
是 一 个 JvSrl , 客 户 端 提 供 统 一 的 请 求 人 aaev t为 e 口, 解析请 求 的 ul再去调 用相应 的 A tn进 行业 r, ci o
于 WeWok 持多视 图表示 , 图部分 则 可 以使 b r2支 视 用 JP V l i ,re re,apreot, ML等 S , e ct FeMakrJse pr X o y R s
web开发工具安装配置及开发技术参考手册
JAVA WEB 开发工具安装配置及开发技术参考手册1开发平台及技术1.1开发平台jdk1.51.2开发工具eclipse3.1.1myeclipse4.11.3服务器tomcate5.5.20weblogic8.11.4平台工具的安装1.4.1Jdk安装运行jdk-1_5_0_06-windows-i586-p.exe,按默认步骤进行安装,安装在C:\jdk1.5.0_06目录下,也可选择其他目录。
安装完成后在系统环境变量中添加如下环境变量:JAVA_HOME : C:\jdk1.5.0_06Classpath : %JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jarPath : %JAVA_HOME%\bin1.4.2Tomcat安装运行tomcat安装文件apache-tomcat-5.5.20.exe,可修改服务器的安装目录,其他可默认安装。
1.4.3Weblogic安装参见《weblogic安装配置.doc》1.4.4Eclipse安装Eclipse的安装非常简单,它属于绿色软件的安装方法,不需要运行安装程序和往注册表里面写信息,只要将压缩包解压到你期望的位置就可以了,这里解压到工作目录D:\eclipse3.1.1下。
进入你的解压目录,双击eclipse.exe文件来启动Eclipse。
第一次启动时,会弹出一个对话框让你设定工作空间的路径(存放工程文件的目录),接受默认值或者按你的需要进行修改(如果你不希望每次都指定,选中下面的复选框)。
运行完毕后,如果出现欢迎界面,表示Eclipse已经安装成功。
1.4.5Myeclipse安装Myeclipse是eclipse工具的一个插件集合,包含了开发中所用到的大部分功能插件。
运行EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe进行安装。
在安装过程中弹出一个对话框,让你选择eclipse的安装目录,选择上一步解压出的eclipse 目录,选择后继续,以下步骤默认安装即可。
1.WebWork配置
WebWork配置一、action配置二、action别名将多个名字映射到相同的action,从而可以为相同的action提供不同的result和interceptor:三、配置result全局result:四、interceptor配置定义和引用interceptor:五、namespace和package1、扩展packageextends属性可指定一个用逗号分割的package列表,从而扩展该列表中的package。
扩展一个package,将从该package中复制所有的定义。
WebWork在package中查找特定标识符的方式是先在本package中查找,然后按照扩展顺序在父package 中查找,所以继承package可以改写父package的功能。
2、抽象package通过设置abstract属性为true来标记该package是抽象的。
在抽象package中不能定义action映射。
3、namespace映射WebWork可以使用namespace将URL映射到action。
WebWork通过action名字和action 所属的namespace标识action。
如果package没有定义namespace,默认的namespace是”“。
六、include实现组件化七、WebWork默认配置webwork-default.xml:八、配置浏览器的action映射。
config-browser.xml:九、其他配置文件1、web.xml2、webwork.properties用来定义application范围的设置,以及改变框架功能的配置参数。
WebWork首先装载位于WebWork JAR文件的com/opensymphony/webwork/default.properties的内容,然后再装载webwrok.properties,并且根据文件的内容改写之前装载的配置设定。
default.properties:十、配置Web应用程序一个J2EE Web应用程序的基本结构:●WEB-INF/lib JAR文件●WEB-INF/classes 类文件、xwork.xml、webwork.properties等配置文件●WEB-INF web.xml配置文件●其他资源JSP、图片、HTML等。
试验五配置WEB服务器
试验五配置WEB服务器第一篇:试验五配置WEB服务器试验五:WWW服务器的配置与管理1.1 实验目的:1.了解WWW服务的基本概念工作原理;2.掌握如何安装WWW服务器;3.熟悉如何配置与管理WWW服务器;1.2 实验内容:1.安装IIS;2.配置管理Windows2000 WWW服务器配置Web站点管理Web站点1.3 试验条件:λ服务器一台(安装了Windows 2000 server的PC机)λ客户端工作站若干Windows xp sp2λ集线器,交叉线。
1.4 试验指导:1.4.1 WWW基本概念World Wide Web(也称Web、WWW或万维网)是Internet 上集文本、声音、动画、视频等多种媒体信息于一身的信息服务系统,整个系统由Web服务器、浏览器(Browser)及通信协议等3部分组成。
WWW采用的通信协议是超文本传输协议(HTTP,HyperText Transfer Protocol),它可以传输任意类型的数据对象,是Internet 发布多媒体信息的主要协议。
WWW中的信息资源主要由一篇篇的网页为基本元素构成,所有网页采用超文本标记语言(HTML,HyperText Markup Language)来编写,HTML对Web页的内容、格式及Web页中的超链进行描述。
Web页间采用超级文本(HyperT ext)的格式互相链接。
当鼠标的光标移到这些链接上时,光标形状变成一手掌状,点击即可从这一网页跳转到另一网页上,这也就是所谓的超链。
Internet中的网站成千上万。
为了准确查找。
人们采用了统一资源定位器(URL,Uniform Resource Locator)来在全世界唯一标识某个网络资源。
其描述格式为:协议://主机名称/路径名/文件名:端口号1.4.2 安装IIS在Windows 2000中推出了Internet Information Server 5.0(简称IIS5.0)提供了方便的安装和管理,增强的应用环境,基于标准的发布协议,在性能和扩展性方面有了很大的改进,为客户提供更佳的稳定性和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
webwork配置篇注意:在这篇已经后续篇幅中,将不再给出xml文件的dtd等一些无关的元素,包括代码可能也给的只是和内容相关的代码片段,因为我们通过基础篇的学习已经对webwork有了一个感性的认识,这里为了节省篇幅作了以上的约定.配置action,result和interceptor我们在web.xml中配置的servlet-Dispatcher在收到了HTTP请求后,通过xwork.xml中的定义调用对应URL请求中的action,action在处理完成后,告诉webwork下一步应该作什么,这个下一步称作result,webwork支持多种类型的result.interceptor是一个特殊的对象,它围绕action和result的执行过程.它控制着action的预处理和后处理,提供安全,校验,日志等某些松耦合的处理,interceptor在action和result处理之后仍然可以工作,为他们增加诸如数据库事务处理等功能.在webwork中,我们可以把多个interceptor组合起来形成一个栈(stack),通过这些栈重用,简化配置,同时关键是提供跨Action的逻辑重构action最基础的action配置如下:<xwork><package name="default"><action name="first" class="com.xujun.webwork.action.FirstAction"/> </package></xwork>使用了result的action:<xwork><include file="webwork-default.xml" /><package name="default" extends="webwork-default"><default-interceptor-ref name="defaultStack"/><action name="first" class="com.xujun.webwork.action.FirstAction"><result name="input" >/index.jsp </result><result name="success" type="redirect">/main.action</result></action></package></xwork>这个例子有两个变化,引入了webwork-default.xml,增加了两个result节点,我们暂时先看result 节点,每个result映射都需要一个name ,一个type,和一个具体的value,type的默认值是dispatch(分发器)为Action提供别名webwork是一种范化的command模式的架构,不同的action name可以同时指向同一个action类,通过这种模式,你可以相同的action提供不同的result和interceptor,并且webwor提供一种更为强大的方式,就是可以指定action中执行的方法,不一定非要是excute().但该方法必须遵循excute的规范,就是要有string类型的返回值.利用这种方式可以大大减少项目中Action数量.xwork..xml<action name="first" class="com.xujun.webwork.action.FirstAction" method="myexcute"/>FirstAction.javapublic String myexcute(){String name = user.getUsername();message = "myexcute:你好"+user.getUsername();return "hello";}注意:throw Exception不是必须的.webwork会先查找和method()一致的方法,如果找不到,就会寻找doMethod()的方法,如果这里的myexcute()改成doMyexcute()也是可以的不需要配置的别名webwork提供了页面访问方式,name.action或者name!method.action..如修改上面index.jsp中的<form>的action="first!myexcute.action"会自动调用action name=”first”的action类中的myexcute()使用场景:比如一个用户打开一个页面之前我们需要作一些操作,可以在Action中定义个before(),那么在url中定义actionname!before.action,该before返回一个input的result,result定位还是这个页面,接着该页面的表单定位是actionname.action,这时候就会执行该Action中的excute()使用静态参数定义Action通过param标签,可以让action根据不同的param值进行不同的处理,可以重复使用Action.同时,param定义的值可以通过IOC的方式注入到Action的属性上,我们举个例子: 假如我们开发一个集成系统,需要访问若干个具有同样接口的webservice,我们在一个Action中已经作好了业务逻辑处理,因为这些webservice具有同样的接口,所以处理的方式都是一致的,但urlL和timeout不同,此时我们就可以通过param来设置不同的参数<action name="service" class="com.xujun.webwork.action.WebServiceAction"> <result name="success">/success.jsp</result><param name="url">/service.wsdl</param><param name="timeout">30</param><interceptor-ref name="static-params"></interceptor-ref> </action>我们创建了两个参数url和timeout,为了将这两个参数赋值给action,我们需要在action 中定义好setter方法private String url;private int timeout;public void setUrl(String url){this.url = url;}public void setTimeout(int timeout){this.timeout = timeout;}注意:webwork会自动根据参数的name找到action对应的setter方法,所以请保证param中的name定义和action中的属性名称一致,同时,要记住webwork传递给xwork的Map中的参数值都是String类型的,该例子中的传递来的timeout参数值就是”30”,webwork会自动类型转换同时要导入static-params这个interceptorresultresult默认配置一个完整的result节点如下:<result name="success"type="dispatch"><param name="location">Hello.jsp</param>></result>这其中,name是必须的,其他都是可以省略的一个最简单的result节点如下:<result name="success">Hello.jsp</result>第二个result和第一个result在执行时是一样的,result的type默认是“dispatch”,param默认是“location”。
Action定向到Actionresult可以让一个action定向到另外一个action:<action name="first"class="com.xujun.FirstAction"><result name="success"type="redirect">second.action</result><interceptor-ref name="params"/></action><action name="second"class="com.xujun.SecondAction"><result name="success"type="dispatcher">Hello.jsp</result> </action>如果我们想将FirstAction中获得的name参数传递到SecondAction中该如此处理呢,这就需要另外一个元素<param>,同时type要改成“chain”。
<action name="first"class="com.xujun.FirstAction"><result name="success"type="chain"><param name="actionName">second</param>></result><interceptor-ref name="params"/></action><action name="second"class="com.xujun.SecondAction"><result name="success"type="dispatcher">Hello.jsp</result><interceptor-ref name="params"/></action>FirstAction.javapublic class FirstAction implements Action{private String name;public void setName(String name){ = name;}public String getName(){return ;}public String execute() throws Exception{System.out.println(getName());return Action.SUCCESS;}}SecondAction.javapublic class SecondAction implements Action{private String name;public void setName(String name){=name;}public String getName(){return ;}public String execute() throws Exception{System.out.println(getName());return Action.SUCCESS;}}这样index.jsp中收集的参数传递给FirstAction后,FirstAction就将本Action的上下文(Context)传递给SecondAction,SecondAction一样能获得Context中的Map 参数小知识:redirect和dispatch的区别jsp和servlet的定向方式有两种,就是redirect和dispatch了。