




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章 Struts2的入门与配置将项目手动加载到Tomcat的方法:在%TOMCAT_HOME%confserver.xml中加入一个标签:/说明:path:指定的是URL中端口号后的路径部分,即http:/localhost:8080/struts2/login2.jspdocBase:指定项目在服务器上的绝对路径,一直要填写到WebRoot目录,即项目的根目录;reloadable:指定如果项目内容发生更改,服务器是否重新启动。第2章 struts2入门第一步:解压下载到的struts2的压缩包,打开struts2-blank-XXX.war压缩包,拷贝其lib目录下的所有Jar包到新建的Web项目。第2章 Struts2的输入校验1、重写validate()方法和验证框架2种校验方式,验证框架又包括:字段(域)即Action中的属性(域)的名字校验和非字段校验。2、所有校验框架的内置的类均在xwork中,在com.opensymphony.xwork2.validator.validators包中,在该包中的default.xml中列出了所有的校验类型及其对应的实现类。所有在校验中用到的type属性,均在该default.xml中列出。1、RegisterAperties类型转换属性文件RegisterAperties验证信息属性文件(该文件中存放页面中出错标签的名字和错误提示)RegisterAction-validation.xml Action校验配置文件RegisterAction-test-validation.xml Action中test()方法的检验配置文件Struts2验证框架产生的错误信息,会自动放置到FieldError里,而非ActionError里,所以一定要在页面中显示FieldError才能看到验证框架的内容!2、Struts2也支持客户端校验,但应注意:(1)标签中的theme属性一定不能设置为“simple”(2)标签的validate属性设置为“true”;(3)Struts2自动根据RegisterAction-validation.xml中的配置生成JS代码,但最好不要使用Struts2的客户端校验。3、有继承关系的Action的校验问题ParentActionTest();ParentAction-validation.xmlParentAction-Test-validation.xmlChildAction extends ParentActionTest();ChildAction-validation.xmlChildAction-Test-validation.xml若执行ChildAction中Test()方法的校验,则上述4个校验文件顺序依次是:ParentAction-validation.xmlParentAction-Test-validation.xmlChildAction-validation.xmlChildAction-Test-validation.xml4、若校验同时提供XML和validate()两种方法,则都会被执行,而且是XML校验先执行,validate()方法后执行。5、若同一Action中有几个不同的方法(每个方法相当于execute()方法,完成不同的逻辑,在验证时需:public String abc()则对其进行验证的方法是:public void validateAbc()。第3章 Struts2的拦截器1、Struts2拦截器实现机制1.1 拦截器的三大要素(1)目标:即被拦截的对象;(2)拦截器:即拦截器本身,其实是一个普通的Java类,能过代理将其与目标联系起来;(3)代理:动态生成我们要调用的目标,并执行其中指定的方法。1.2 实例目标类:即我们要执行的对象实例类;package erceptor;public class Target implements TargetInterfacepublic void doSomething() System.out.println(In doSomething() method);拦截器类:package erceptor;public class Interceptor public void before()System.out.println(before);public void after()System.out.println(after);注意:目标与拦截器本身没有什么联系,其联系体现在代理中。处理器类:其实三大要素没有该类,但代理中必须用到InvocationHandler接口的一个实例作为参数,而且实际上代理体现的目标与拦截器的联系(耦合),也完全体现在该类中,而并非代理类本身之中。package erceptor;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class MyHandler implements InvocationHandler private Object object;private Interceptor interceptor = new Interceptor();public Object invoke(Object proxy, Method method, Object args)throws Throwable Object result = null;interceptor.before();result = method.invoke(object,args);interceptor.after();return result;public Object getObject() return object;public void setObject(Object object) this.object = object;代理类:package erceptor;import java.lang.reflect.Proxy;public class MyProxy public Object getProxy(Object object) MyHandler myHandler = new MyHandler();myHandler.setObject(object);return Proxy.newProxyInstance(Target.class.getClassLoader(), object.getClass().getInterfaces(), myHandler);从代码中可以明显看出,代理类本身并不反映目标与拦截器之间的耦合,而只是通过我们的处理器类进行反映这种目标与拦截器之间的关系。实质上,三者之间的关系,可由下图来概括。2、每个Action会自动引用Struts2定义的默认拦截器栈(即defaultStack),但如果我们人为的为某个Action增加一个拦截器,则该默认拦截器将不再起作用,(与Java类的构造函数类似)若要想同时有自定义拦截器和默认拦截器,必须同时人为指定,即同时指定: 3、除拦截Action的拦截器外,还有方法过滤拦截器,即MethodFilterInterceptor;第4章 Struts2的文件上传与下载1、限制文件上传的类型(1)%TOMCAT_HOME%confweb.xml中列出了所有文件类型信息;(2)使用fileUpload拦截器,对应于FileUploadInterceptor.java类,涉及参数:maximumSize(最大上传大小,以字节为单位),allowedTypes(允许上传的文件类型(String),allowedExtensions(允许上传文件的扩展名(Set)。(3)自定义上传文件错误时错误信息。在perties(org.apache.struts2包下),定义了以下提示信息:struts.messages.error.file.too.large=File too large: 0 1 2 3struts.messages.error.content.type.not.allowed=Content-Type not allowed: 0 1 2 3struts.messages.error.file.extension.not.allowed=File extension not allowed: 0 1 2 3在struts2的全局properties文件中,重写以上信息:struts.messages.error.content.type.not.allowed= u6587u4ef6u7c7bu578bu53eau5141u8bb8u6587u672cu6587u4ef6u548cWORDu6587u4ef6!struts2的全局properties文件的配置:2、文件下载(1)struts2的struts-default.xml文件中定义了result类型:stream,对应于org.apache.struts2.dispatcher.StreamResult类。(2)Action的内容public class DownloadAction extends ActionSupport / 返回值类型必须是InputStream,文件名任意public InputStream getFileDownload() return ServletActionContext.getServletContext().getResourceAsStream(/upload/winxp.txt);Overridepublic String execute() throws Exception / TODO Auto-generated method stubreturn SUCCESS;(3)struts2.xml中的配置 text/plain filename=winxp.txt fileDownload其中,属性中的name值,均为org.apache.struts2.dispatcher.StreamResult类中定义的属性名字。注意:filename=winxp.txt该项配置有2项,另是项是inline/attachment。inline表示在线打开,即在浏览器窗口内打开;attachment表示关联到相应的程序,由程序来打开。第5章 Struts2的国际化1、国际化的分类(1)视图(JSP页面)国际化;(2)Action的国际化即Action传递到页面信息的国际化;(3)输入校验的国际化输入校验产生错误信息的国际化;(4)类型转换的国际化类型转换错误信息的国际化。2、Java对于国际化的支持ResourceBundle和Locale类,均在Java.util包中。Java资源文件命名规则:baseName_language_perties,其中baseName随便命名,只要是Java的合法标识符即可。language 和country则必须按照Java的规定书写。要在资源文件中添加动态内容,可采用如下方式:hello = Hello World : 0;然后使用MessageFormat.format(String pattern, Object arg);将动态内容以Object对象的形式传入。3、Struts2的页面国际化(1)struts.xml配置文件中:其中,value的值即为2中的baseName。(2)建立各自资源文件:注:指定资源文件baseName的方法有两个:(1)在struts.xml文件中,以形式指定;(2)在perties文件中,以struts.custom.i18n.resources=globalMessages形式指定。格式:baseName_language_pertiesErrorMperties: 默认资源文件;ErrorMessage_zh_CN.properties:中文件资源文件;Errormessage_en_US.properties:美国英语资源文件;在资源文件中写入相应的Key和Value,即可。(3)在页面中用输入资源文件中Key对应的内容,其中name属性即为对应的Key的名字,若该Key没有相应的Value,则会原样输出name属性的值。注:测试国际化,设置浏览器语言两种方式:JavaScript或IE- “工具”-Internet选项-语言。(4)使用struts2的标签时国际化:使用标签的key属性指定资源文件中的key即可,而不是将标签的提示信息直接写在label属性中。4、校验国际化4.1 validate()方法中的国际化,调用ActionSupport类的getText()方法,将提示信息从资源文件中提取出来,显示在页面上。4.2 校验框架的国际化直接用的key属性指定资源文件中的key值即可。username!- User name should not be empty! - 5、国际化的作用范围全局国际化、包级别国际化和类级别的,3种资源文件的写法:全局资源文件名命名法见上面;包级别资源文件命名法:package_zh_CN.properties,其中package固定不变,表示包级别的资源文件,后面的language和country可根据需要变化。类级别资源文件命名法:类名_language_perties;6、使用标签进行国际化可以指定要查找的资源文件,而不是按照类级别、包级别和全局级别进行查找的。资源文件中占位符对应的信息注意:要查找的资源文件必须存放在src目录下,即和全局资源文件在同一位置。7、Struts2的国际化支持拦截器为:erceptor.I18nInterceptor,配置在struts-default.xml的默认拦截器栈中(defaultStack),其名字为i18n。8、内置的语言及国家代码可通过IE(或其它浏览器)的“工具”internet选项语言添加弹出的对话框中查找。 第6章 Struts2深入探索一、1、struts-default.xml文件(1)内容u Struts2用到的JavaBean;u Struts2的默认Package(struts-default),其中又包括以下内容 结果类型(result-types); 拦截器(interceptors); 拦截器栈(interceptor-stack)和默认使用的拦截器(栈)。2、Struts2的启动首先读取struts-default.xml,将其中的内容加载到内存中;然后再读取struts.xml文件的内容,加上struts-default.xml内容,一起加载到内存;3、package名字任意,示例项目的名字为struts2,而我们的package名字也为struts2,不是必须重名的。4、perties文件(org.apache.struts2包中)本文件可被classpath根目录下的perties文件所覆盖;也可以在struts.xml文件中通过覆盖其中的某些条目;5、通过修改struts.action.extension=action,,可以修改action的后缀名,将其默认的action替换掉,比如替换成do(struts.action.extension=do)。6、,其中abstract=true表示该package为抽象包,其中不能包含action的配置。类似于Java的抽象类,本身不能被实例化,只能由其子类实现其中的方法,再实例化。namespace=/hello,其值必须以“/”开头,表示该包所在的命名空间,加上该属性之后,再请求该包中的action,则必须加上该namespace的值,否则访问不到该action资源。加上该属性之后,JSP页面中的action的值必须做相应修改:未添加namespace时:添加namespace=/hello之后:若指定的namespace下不存在请求的action,则Struts2会自动搜索默认namespace下是否存在该action定义,若有,则将请求指向他。7、如果项目太大,struts.xml文件太长时,可以分成几个xml配置文件,并在struts.xml中用标签将其包含进来,由struts.xml统一进行加载。,将包含struts_1.xml配置文件,其配置方式与struts.xml配置方式一模一样。8、C(控制器):org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;也即总控制器。业务控制器就是Action。M:V:二、第19讲1、模型驱动(1)属性驱动即将所有属性都写在Action中,为默认方式。模型驱动即将所有属性都封装在一个JavaBean中,而将这个JavaBean暴露在Action中。(2)实现模型驱动的拦截器erceptor.ModelDrivenInterceptor,其名称为“modelDriven”,配置在struts-default.xml文件中。(3)Preparable接口(com.opensymphony.xwork2包中),在Action调用之前被调用,因此可以写一些需要在Action之前执行的逻辑。2、将错误信息显示在相应标签之后的方法username /此username对应标签的名字3、防止表单重复提交的方法(1)在JSP页面的form中加入,则生成的页面对应部分如下:如果为:,则生成(2)支持表单重复提交的拦截器erceptor.TokenInterceptor,名字为“token”,配置在strut-default.xml中。(3)在struts.xml文件中调用该拦截器(该拦截器并没有配置在默认拦截器栈中)。/registerOut.jsp/register2.jsp/register2.jsp 其中,红色部分为必须配置的。如要在/register2.jsp指定的页面中,显示不能重复提交的错误信息,则必须在页面中增加标签,因为重复提交错误信息是放在Action错误级别里的。如果要显示自己定义的出错信息,则必须覆盖掉在perties文件中定义的key: struts.messages.invalid.token,将其重新在国际化资源文件中覆盖即可。三、第20讲1、Action与Servlet进行耦合1.1 通过ActionContext(1)get(Object key)相当于HttpServletRequest的getAttribute()方法;put(Object key, Object value)相当于HttpServletRequest的setAttribute()方法;(2)将用户信息放在Session对象中Map map = ActionContext.getContext().getSession();map.put(userName,username);/放在ActionContext中的key value对,可通过$requestScope.userName在页面中/显示出来ActionContext.getContext().put(userName,username);1.2 通过ServletContextAware接口(org.apache.struts2.util包)只有一个方法:setServletContext(ServletContext context);ServletRequestAware接口(erceptor包)只有一个方法:setServletRequest(HttpServletRequest request);ServletResponseAware接口(erceptor包)只有一个方法:setServletResponse(HttpServletResponse response);示例代码在LoginAction中,使用这些接口的方法,类似于Spring的IoC。1.3 ServletActionContext类(org.apache.struts2包)首先ActionContext,再选ServletActionContext,最后ServletContextAware接口。2、动态方法调用(1)在struts.xml文件中加以配置/login2.jsp/result.jsp(2)在JSP页面中的 action属性加以说明“!”前面的login对应为struts.xml中的name属性,“!”后面的login为Action对应类中的login方法的名字。3、通配符用的不多,因为容易出错;不是程序执行出现错误,而是不便于维护,但利于配置,使配置文件简单。(1)JSP页面中(2)struts.xml文件中/login2.jsp/result.jsp(3)Action中public String login() throws Exceptionmethod属性中的1就代表JSP页面中loginLogin.action的“login”部分,即的name属性的“*”部分,也对应Action中的login()方法。4、处理结果Result对象表示程序执行完成后要转到的视图。配置在struts-default.xml中()。由struts.xml标签中的子标签的type属性来指定。5、Struts2的异常处理机制(第21讲)(1)Action抛出异常public String execute() throws Exceptionif (!hello.equals(getUsername()throw new UsernameException(User name is invalid);else if (!world.equals(getPassword()throw new PasswordException(Password is invalid);elsereturn SUCCESS;(2)struts.xml文件配置异常局部异常配置!- /login2.jsp -/result.jsp/usernameInvalid.jsp全局异常配置 /passwordInvalid.jsp(3)JSP页面显示异常$exception $exception.message 以上4种方式均可。(4)异常处理是由Struts2的erceptor.ExceptionMappingInterceptor来实现的,它配置在struts-default.xml文件中。第7章 Struts2事例JFreeChart一、第21讲1、JFreeChart的下载:JasperReport: 与iReport结合使用;水晶报表:Business ReportEclipse: Business Intelligence and Reporting Tool:/birt2、JFreeChart代表我们生成的图表,通过ChartFactory来生成我们所需要的图表。可以用ChartFrame(javax.swing.JFrame的子类)来显示我们生成的图表。3、图表制作过程(1)用DefaultXXXDataset准备数据;(2)用ChartFactory调用相应方法生成JFreeChart对象,即我们所需要的图表对象;(3)用ChartFrame显示我们生成的图表,或用图形编码方式编码后,送到JSP进行显示。第8章 整合Spring(第24讲)一、struts2-spring-plugin-2.1.6.jar解压后,可以得到1、struts-plugin.xml文件,内容如下: 在org.apache.struts2包中有2、perties文件,其中有一条为#struts.objectFactory = spring(表示已经被注释掉)两个文件中红色部分为对应关系(即相同)。3、集成过程(1)将struts2-spring-plugin-2.1.6.jar拷贝到项目的lib目录下;(2)通过MyEclipse将Spring需要的jar包导入项目:其中只选择Spring2.0的核心包和Spring web支持包即可。(3)配置web.xml使用Tomcat容器启动时加载Spring在该文件中加入以下标签:org.springframework.web.context.ContextLoaderListener(4)配置applicationContext.xml(5)修改struts.xml/result.jsp/login2.jsp注:其中struts.xml中的class属性值与applicationContext.xml标签中的id属性一致。第9章 Struts2、Spring2.0与Hibernate3.2整合(本章来自浪曦原创浪曦OA与工作流系统-Struts2+Hibernate3.2+Spring2.0整合)1、整合方法(MyEclipse)项目结构(1)首先加入Hibernate支持图1 加入Hibernate(3.2)支持第一步其中,Enable Hibernate Annotations Support选项为本人自己添加。第二步,采用默认值第三步,由于不需要Hibernate管理数据库连接,而是用Spring进行管理,所以不选“Specify database connection details?”选项。第四步,由于采用Spring管理SessionFactory类,所在也不选“Create SessionFactory class?”选项。(2)加入Spring支持第一步,加入Spring配置第二步
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 华夏银行苏州市姑苏区2025秋招无领导模拟题角色攻略
- 华夏银行呼和浩特市新城区2025秋招笔试创新题型专练及答案
- 广发银行深圳市宝安区2025秋招数据分析师笔试题及答案
- 光大银行泰州市靖江市2025秋招英文面试题库及高分回答
- 平安银行大连市甘井子区2025秋招群面案例总结模板
- 华夏银行重庆市璧山区2025秋招群面案例总结模板
- 2024年山东黄金集团招聘考试真题
- 农发行濮阳市范县2025秋招群面模拟题及高分话术
- 辅警招聘考试预测复习学生专用附答案详解
- 平安银行大连市瓦房店市2025秋招无领导模拟题角色攻略
- 中小学生禁毒教育课程教学方案及大纲
- 影像科培训课件
- 2025-2030中国氨基酸市场行情监测与发展前景预测报告
- 2025年锦州辅警考试题库(附答案)
- 联名合作授权协议书范本
- 2025年广东中考历史试卷真题解读及答案讲评课件
- 律师从事公司自行清算业务操作建议流程
- 营救小羊中班课件
- 橡皮筋驱动小车说课课件
- 跟岗干部管理办法中组部
- 乐理知识入门教学课件
评论
0/150
提交评论