第一篇:struts异常总结
Java的Struts框架的异常处理
Struts提供了一个更简单的方式来处理未捕获的异常,并将用户重定向到一个专门的错误页面。
Struts的异常处理所使用的“exception”拦截容易。“exception”拦截器作为默认的栈的一部分,所以不必做任何额外的配置。它可为准备使用的盒。
根据
局部异常映射:将
全局异常映射:将
全局异常映射对所有的Action都有效,但局部异常映射仅对该异常映射所在的Action有效。
如果局部异常映射和全局异常映射配置了同一个异常类型,在
有异常往外抛即可。你也可以在方法里面抛,比如throw SQLException。
我们可以使用Struts2的标签输出异常信息:
输出异常的message属性信息:
有了处理系统异常的基础,我们来看一看自定义异常:
packagecom.exception;public class MyException extends Exception {
private String message;
publicMyException(String message){ super(message);this.message = message;} public String getMessage(){ return message;} public void setMessage(String message){ this.message = message;} }
public String execute()throws Exception { if(!“hello”.equals(usename)||!“world”.equals(password)){ throw new MyException(“用户名或密码错误,您发现了吧!”);} return “success”;}
在action配置中的异常处理
在全局配置中的异常处理
错误页面error.jsp
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%> <%@ taglib prefix=“s” uri=“/struts-tags”%>
第二篇:Struts 2期末考试
1、MVC模式(View-model-controller)
2、MVC模式的优点:
(1)低耦合性。视图层、模型层和控制层分离,很容易改变应用程序的数据层和业务规则,只需改变MVC的模型层就可以了。
(2)高重用性。多个视图可以对应一个模型,这样减少了代码的重复性及维护量,一旦模型发生改变,也易于维护。
(3)可实用性。MVC允许使用各种不同的表现层技术来访问同一个服务器端的代码。如jsp、velocity等。(4)可维护性。3个模块层相分离,是的web应用更易维护和修改。
3、model2模式下,模型用javaBean充当,视图有jsp页面充当,控制器由servlet充当。
4.struts2是在struts1的基础上发展起来的,以webwork为核心,采用webwork的设计理念。Struts2是webwork的升级。
5、webwork是基于MVC架构模式的J2EE Web框架,现在的最新版本被拆分为XWork和WebWork2两个项目。WebWork的优点:
(1)action不需要与WebWork耦合,提高了代码的重用率。
(2)支持更多表现层技术,从而有更好的适用性。Webwork的特征:
(1)灵活的validation框架。运行开发者在XML文件中定义验证内容,在运行时通过interceptor自动应用,这样可以脱离Action类。
(2)Interceptor。在action处理的前后实现动态拦截,简化action代码。(3)支持I18N(4)支持OGNL表达式语言
(5)Type Conversion.允许类之间很容易实现对象的转换。(6)允许动态对象图表遍历和方法执行,使用valuestack透明访问多beans的属性。
(7)Ioc容器。管理组件的生命周期,使客户不需要通过创建注册类获得组件实例。
(8)velocity templates.使UI组件可重用,从而允许开发者很容易地定制Web页面的look&feel。
(9)容易和第三方软件集成。例如hibernate、spring和sitemesh。
(10)支持多种视图技术。如jsp、velosity、freemarker和xml等。
6、struts2框架的大致处理流程:(1)客户端浏览器发送一个请求。
(2)核心控制器filterdispatcher根据请求决定调用合适的action。
(3)webwork的拦截器链自动对请求应用通过功能,如验证。
(4)回调action的execute()方法,该方法根据请求的参数来执行一定的操作。
(5)execute()方法的处理结果信息将被输出到浏览器中,struts2支持多种形式的视图。如jsp、html。
7、web.xml xmlns=“http://java.sun.com/xml/ns/javaee” xmlns:xsi=“http://www.xiexiebang.com/2001/XMLSchema-instance” xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”> org.apache.struts2.dispatcher.FilterDispatcher
ShowWords.java package action;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings(“serial”)
public class ShowWords extends ActionSupport{
private String name;private String words;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getWords(){
return words;}
public void setWords(String words){
this.words = words;
}
public String execute(){
return INPUT;
}else{
words = “欢迎您:” + name;
return SUCCESS;
}
}
}(3)Struts.Xml
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”>
extends=“struts-default”>
class=“action.ShowWords”> name=“success”>/showWords.jsp name=“input”>/inputWords.jsp
8、核心控制器FilterDispatcher:
核心控制器是struts2框架的基础,它包含了框架内部的控制流程和处理机制。在web应用中,FilterDispatcher作为一个filter运行,负责拦截所有的用户请求。如果用户请求以.action结尾,则该请求被转入Struts框架处理。Struts2框架按模块可以分为Servlet Filters、struts核心模块、拦截器和用户实现模块。P33 Srtuts2框架处理一个请求的步骤:
(1)客户端提交一个请求(HttpServletRequest).(2)请求被提交到一系列的过滤器(filter),首先提交ActionContextCleanUp然后提交到其他过滤器(SiteMesh等)最后提交到FilterDispatcher。
(3)FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个请求。如果ActionMapper决定需要调用某个Action,则FilterDispatcher把请求的处理交给ActionProxy。
(4)ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。(5)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action,在调用之前,ActionInvocation会根据配置加载Action相关的所有拦截器。
(6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
9、使用
元素配置包时可以指定4个属性。属性名name,必选,指定包的名称,该名称是该包被其他包引用的key值。
属性名extends,可选,指明该包继承的其他包。用extends继承包,父包在子包前定义。Struts.xml
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”>
value=“gb2312” /> class=“ActionClass1”> name=“success”>/success.jsp extends=“default” namespace=“/skill”> (1)dispatcher结果类型用来表示“转发”到指定结果类型,它是Struts 2的默认结果类型。 (2)redirect结果类型用来“重定向”到指定的结果资源,该资源可以是JSP文件,也可以是Action类。(3)redirectAction结果类型也是重定向到其他资源,重新生成一个新的请求。(4)其他结果类型 1、简述使用拦截的意义。 (1)通过拦截形式拦截器模块,极大地提高了系统开发的灵活性和复用性,AOP使用代理的方式,将多个拦截器和核心业务逻辑组合在一起,满业务需求。 (2)通过使用拦截器,可以使核心框架代码比以前更加简洁,使开发人员更加快捷地使用框架的特性。 2、简述输入校验流程。(1)(2)客户端校验。 对请求的字符串参数进行类型转换,并设置为对应的Action属性值。 (3)如果类型转换出现异常,将异常信息封装到filedError中。 (4)调用Action的validateXxx()校验方法,其中xxx()方法是Action中对应的处理逻辑方法。 (5)(6)调用Action类的validate()校验方法。完成上面的步骤后,框架开始检查在以上过程中是否产生了filedError,如果产生了,则返回逻辑视图Input;反之,则返回处理方法中的逻辑视图。 (7)系统根据上一步骤返回的逻辑视图,结合struts.Xml文件的配置内容。呈现相应的视图页面。 http://58andy.sinaapp.com 学了很久的java,接触SSH也有一段时间了,写成博文总是有点懒,最近在整理一些思绪,把SSH一点一滴放进博客里,以备以后改进,再学习。 以我自己的了解,在进行struts开发的过程中,总也是出现很多的乱码问题,但归根到底,也只是以下三种情况: ㈠页面显示中文乱码 ㈡传递参数中文乱码 ㈢国际化资源文件乱码 下面就这三中情况介绍怎么在具体项目中处理这些乱码问题。而对于整体的处理思想,是要统一编码为: UTF-8.(以myeclipse6支持的struts1.3为准) ㈠页面显示中文乱码 对于在页面中显示出现乱码,这个问题比较简单,便是检查你的JSP文件里是不是出现了中文要处理,因为JSP默认的编码格式为“ISO-8859-1”,当JSP中出现要处理的中文时,其显示就出现乱码了,这种情况一般出现在手写JSP,或修改时。因为在myeclipse6.0中,如果出现了编码错误时,程序不会让你保存,而是会提示你注意编码,这点很好。具体的修改办法是把 Html代码 1.<%.@ page language=“java” import=“java.util.” pageEncoding=“ISO-8859-1”> 改成: Html代码 1.<%.@ page language=“java” import=“java.util.” pageEncoding=“UTF-8”> ㈡传递参数中文乱码 传递参数出现的乱码,参数的内容为中文。比如在struts应用中,简单的一个登录界面中,需要传递的登录名为中文时,你没经处理之前,是会出现乱码传递的,为了让我们能看到显示的乱码,我们在对应的Action类的子类里,修改一下,用System.out把接受到的参数输出,代码如下: Java代码 http://58andy.sinaapp.com 1.public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, 2.HttpServletResponse response)...{ 3.DynaActionForm loginForm =(DynaActionForm)form;4.5.String username =(String)loginForm.get(“username”);6.String password =(String)loginForm.get(“password”);7.System.out.println(“username:”+username);8.System.out.println(“password:”+password);9.if(username.equals(“ivorytower”)&& password.equals(“123456”))...{ 10.return mapping.findForward(“success”);11.} 12.return mapping.findForward(“fail”);13.} 那么当你提交了中文输入后就会出现乱码了。 具体的解决方法: ①修改Tomcat---->conf----->server.xml文件,在修改端口的标签后面加一行代码,如下: Xml代码 1. 3.redirectPort=“8443” URIEncoding=“UTF-8”/> ②编写过滤器Filter Java代码 1.2.import java.io.IOException;3.4.import javax.servlet.Filter;5.import javax.servlet.FilterChain;6.import javax.servlet.FilterConfig;7.import javax.servlet.ServletException;8.import javax.servlet.ServletRequest;9.import javax.servlet.ServletResponse;10.11.public class CharacterEncodingFilter implements Filter...{ http://58andy.sinaapp.com 12.13.@Override 14.public void destroy()...{ 15.} 16.17.@Override 18.public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException,ServletException { 19.request.setCharacterEncoding(“utf-8”);20.chain.doFilter(request, response);21.} 22.23.@Override 24.public void init(FilterConfig arg0)throws ServletException...{ 25.} 26.27.} 利用过滤器,把requst传递的中文参数都设成“UTF-8”编码。 ③修改web.xml文件 打开项目里的web.xml文件,在前面加上如下代码: Xml代码 1.2. 3. 4. 6. 7. 注意其过滤的URL为“/*”,表示当前的request请求。为了使设置生效,重起tomcat。 ㈢国际化资源文件乱码 http://58andy.sinaapp.com ①利用JDK的native2ascii工具进行编码转换 国际化问题,主要是为了处理文件在浏览器上的显示问题,还是以登录界面来说,比如在中文浏览器上,我们要看到中文显示,对应在英文浏览器上要显示英文。那么我们在登录那个界面处理上,就不能直接写上我们的“用户名”“密码”等标识了。就要用标记转换输出了,修改为: Html代码 1.2. 再者,打开项目下的资源配置文件ApplicationResources.properties,依据上面所写key值,设定成我们要的默认值(显示英文),比如 引用 #Resource for Parameter 'com.v512.example.struts.ApplicationResources #Project webexample2 example.login.username=username example.login.password=password 现在我们动手新建一个资源文件,让其能显示中文,直接Ctrl+C,Ctrl+V。改名为ApplicationResources_zh.properties,代码如下: 引用 #Resource for Parameter 'com.v512.example.struts.ApplicationResources #Project webexample2 example.login.username=用户名 example.login.password=密码 但保存,myeclipse会报错,这时我们需要修改资源文件的编码格式。Windons---->Preferences---->Content Type------>Text----->JavaPropertiesFile,把其Default encoding改为“utf-8”,按“update”更新。这样就能进行保存了。但是当我们进行验证会不是成功时,仍然给我们的是乱码。 不急,我们还得做一项任务,打开DOS窗口,CMD到资源文件所在目录,运用JDK的native2ascii工具把我们新建的资源文件改成另一个名字的资源文件,例如bank.properties。命令如下: 引用 >native2ascii-encoding gbk ApplicationResources_zh.properties bank.properties http://58andy.sinaapp.com 打开bank.properties资源文件,自动生成的代码如下: 引用 #Generated by ResourceBundle Editor(http://eclipse-rbe.sourceforge.net) example.login.username = u7528u6237u540D example.login.password = u5BC6u7801 然后在myeclipse窗口中,把原来新建ApplicationResources_zh.properties 删除,并把bank.properties改为ApplicationResources_zh.properties(为了方便记忆,管理)。然后重起tomcat或进行reload文件,我们发现乱码问题没有了。 ②利用Eclipse ResourceBundle Editor插件工具 以上我们是利用了JDK的native2ascii工具来处理国际化问题,但在EC中,还有一种更方便的工具专门用来处理编辑java的资源文件国际化乱码问题,即Eclipse ResourceBundle Editor插件工具。安装了这个插件后,我们能进行方便的可视化资源文件编辑。推荐。 异常的总结 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException java.lang.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出。 java.lang.AssertionError 断言错。用来指示一个断言失败的情况。 java.lang.ClassCircularityError 类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。 java.lang.ClassFormatError 类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。 java.lang.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。 java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。 java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。 java.lang.IncompatibleClassChangeError 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。 java.lang.InstantiationError 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。 java.lang.LinkageError 链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。 java.lang.NoClassDefFoundError 未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。 java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。 java.lang.NoSuchMethodError 方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。 java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 java.lang.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况。 java.lang.UnsatisfiedLinkError 未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。 java.lang.UnsupportedClassVersionError 不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。 java.lang.VerifyError 验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。 java.lang.VirtualMachineError 虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。 java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。 java.lang.ArrayStoreException 数组存储异常。当向数组中存放非数组声明类型对象时抛出。 java.lang.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。 java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。 java.lang.CloneNotSupportedException 不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。 java.lang.EnumConstantNotPresentException 枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象并不包含常量时,抛出该异常。 java.lang.Exception 根异常。用以描述应用程序希望捕获的情况。 java.lang.IllegalAccessException 违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。 java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。 java.lang.IllegalStateException 违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常。 java.lang.IllegalThreadStateException 违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常。 java.lang.IndexOutOfBoundsException 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。 java.lang.InstantiationException 实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。 java.lang.InterruptedException 被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。 java.lang.NegativeArraySizeException 数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。 java.lang.NoSuchFieldException 属性不存在异常。当访问某个类的不存在的属性时抛出该异常。 java.lang.NoSuchMethodException 方法不存在异常。当访问某个类的不存在的方法时抛出该异常。 java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。 java.lang.NumberFormatException 数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。 java.lang.RuntimeException 运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类。 java.lang.SecurityException 安全异常。由安全管理器抛出,用于指示违反安全情况的异常。 java.lang.StringIndexOutOfBoundsException 字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。 java.lang.TypeNotPresentException 类型不存在异常。当应用试图以某个类型名称的字符串表达方式访问该类型,但是根据给定的名称又找不到该类型是抛出该异常。该异常与 ClassNotFoundException的区别在于该异常是unchecked(不被检查)异常,而ClassNotFoundException 是checked(被检查)异常。 java.lang.UnsupportedOperationException 不支持的方法异常。指明请求的方法不被支持情况的异常。 异常 javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login(/Login是你的action名字) 可能原因 action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用 action=“Login.do”.将表单提交给Login.do处理,如果出现上述异常,请查看struts-config.xml中的定义部分,有时可能是打错了字符或者是某些不符合规则,可以使用strutsconsole工具来检查。 -------------------- 异常 org.apache.jasper.JasperException: Cannot retrieve definition for form bean null 可能原因 这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说,action和 form都应该各自有一个name属性,并且要精确匹配,包括大小写。这个错误当没有name属性和action关联时也会发生,如果没有在action 中指定name属性,那么就没有name属性和action相关联。当然当action制作某些控制时,譬如根据参数值跳转到相应的jsp页面,而不是处理表单数据,这是就不用name属性,这也是action的使用方法之一 宁波工程学院学年论文 Struts2框架分析 汤禹鑫 宁波工程学院,(315016) E-mail 372854786@qq.com 摘 要: 本文对基于MVC模式,延续了Struts1和WebWork优势的WEB框架——Struts2框架的各个层次的组成、功能进行了详细的介绍。关键词:Struts2;框架;J2EE; 1.引言 Apache Struts2是一个为企业级应用打造的优秀的、可扩展的Web框架。该框架旨在充分精简应用程序的开发周期,从而减少创建、发布、应用所花费的时间。而且对于Struts1有很多革命性的改进,但它并不是全新的框架,而是在WebWork框架的基础上发展起来的。所以也可以说Struts2是WebWork的升级,吸收了Struts1和WebWork的优势,稳定性、性能都有了很好的保证。 2.Struts2的起源和背景 2.1 Struts1 在过去,Struts1是所有MVC框架中不容辩驳的胜利者。其程序运行流程如图2-1所示。 图2-1 Struts 1的程序运行流程 但是对于Struts 1框架而言,因为它与JSP/Servlet耦合非常紧密,因而导致了许多不可避免的缺陷,还有支持的表现层技术单 一、代码严重依赖于Struts 1 API。随着Web应用的拙见扩大,这些缺陷逐渐变成制约Struts 1发展的的重要因素——这也是Struts 2出现的原因。 宁波工程学院学年论文 (1)客户端初始化一个指向Servlet容器(例如Tomcat)的请求; (2)这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其它框架的集成很有帮助,例如:SiteMesh Plugin); (3)接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action; (4)如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy; (5)ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类; (6)ActionProxy创建一个ActionInvocation的实例; (7)ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用; (8)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts 2 框架中继承的标签,在这个过程中需要涉及到ActionMapper。 3.2 Struts 2配置文件 Struts2 配置文件是用户请求(View)和业务逻辑模块(Model)Action 之间联系的桥梁。开发者可以通过修改Struts2的配置文件来快速适应业务需求,它是整个Struts2的精髓之一。当然,熟悉Struts1和WebWork的框架的人对配置文件一定不会陌生,同Struts1和WebWork框架一样,Struts2框架配置文件也分为XML文件和属性资源文件两种。struts.xml 文件中包含了Action 的定义以及Action 的返回值对应的视图资源、命名空间等信息。此外,用户也可以定义自己的XML文件,然后通过include指令将其包含到struts.xml文件中。另一类配置文件是属性资源文件。资源文件中一般采用固定的Key-Value形式,用于定义Struts2 全局或者局部的资源数据,例如定义国际化、开发模式等信息。 3.3 Struts 2控制器 Struts 2的控制器组建是Struts 2框架的核心,事实上所有MVC框架都是以控制器组件为核心的。正如前面提到的,Struts 2的控制器由两个部分组成:FilterDispatcher和业务控制器Action。前者由框架提供,负责拦截所有的用户请求,其过程如图3-3所示 宁波工程学院学年论文 图3-1 过滤器处理请求过程 对于业务控制器Action,Struts 2框架为用户提供了一个名为Action的接口,在接口中定义了SUCCESS、ERROR、INPUT、LOGIN、NONE五个静态的字符串和一个execute方法,用户在编写自己的Action时只要实现该接口并重写其中的execute方法,将所要实现的业务逻辑在该方法中处理就行了,当调用此Action时,Struts 2框架会自调用execute方法来完成所需的业务逻辑处理。实际上,在Struts2中起作用的业务逻辑并不是用户自定义的Action ,而是系统生成的Action代理,只不过Action代理以用户定义的Action为目标。 3.4 Struts 2标签库 于业Struts 2的标签库也是Struts 2的重要组成部分,Struts 2的标签库提供了非常丰富的功能,这些标签不仅提供了表现层数据处理,而且还提供了基本的流程控制功能,还提供了国际化、Ajax支持等功能。使用标签,开发者可以最大限度地减少页面代码的书写。 4.Struts 2框架应用举例 例如课本上的Struts2用作登陆的例子,添加Struts 2功能框架核心需要如下三个步骤:(1)修改web.xml文件,在web.xml中配置Struts 2的核心Filter。 org.apache.struts2.dispatcher.FilterDispatcher (2)将Struts 2框架的类库复制到Web应用的WEB-INF/lib路径下(也可以自己手动进行添加)。 宁波工程学院学年论文 5.结论 Struts 2结合了Struts 1框架和WebWork框架的优点,其框架的各个组件都是可靠的松散耦合。Struts 2最大的特点就是简单性,引入了OGNL表达式和值栈的概念,可以用最单间的代码实现复杂的数据访问。总而言之,Struts 2是一个当今Web开发中一个很重要而且功能足够强大的框架,能让我们更好地设计和完成Web应用。 参考文献 [1]郑阿奇.J2EE应用实践教程.电子工业出版社,2011年7月.[2]李刚.Strut s2权威指南.电子工业出版社,2007年9月.[3]闫术卓.杨强.Strut s2技术详解.电子工业出版社,2008年6月.第三篇:struts处理中文乱码问题总结
第四篇:异常的总结
第五篇:Struts 2框架分析