Struts-config.xml是struts框架的核心配置文件,其最基本的功能是用来配置Action和ActionForm,通知Struts框架完成传递和页面流转.
一.处理异常的exception和global-exception
在Web应用中,对异常处理位置都是业务逻辑失败的信息.因为异常处理还需要编写ActionErrors,给出报错信息将导致在Action会看到许多的ActionErrors的代码.
struts解决了这个问题,它允许程序员配置任何异常,并且在将异常转化为报错信息的时候,不必须自行使用"try catch"来捕捉,写报错转发到出错页面.
1.局部异常
就是针对一个Action响应所抛出的异常,该异常将只负责Action的程序段,并且自定义在<action>元素中.
局部异常的定义:
<action-mapping>
<action
input="SampleJsp.jsp"
指定了SampleForm对象使用的ActionForrm对象名称,与form-bean元素定义的name属性一致
name="SampleForm"
指定了SampleForm对象使用的ActionForm对象名称
path="/SampleAction"
如果使用了SampleForm.do的响应,那么ActionServlet控制器组件就会自动找到本Action对象
scope="request"
使用ActionForm的范围
type="struts.sample.cap3.sample1.action.SampleAction"
解释本Action对象的路俓
validate="false">
定义使用的ActionForm在Action是否需要检验
<expetion
key="userNameException"
指定了在资源配置文件中报错信息的键
path="/SampleJsp.jsp"
指定了报错之后所转发到的JSP页面,在该页面中可以通过标签库来读取报错信息,并显示
type="struts.sample.cap3.sample1.exception.UserNameException"/>
指定了该异常类的java实体名
<exception
key="SampleJsp.jsp"
type="java.sql.SQLException"/>
</action>
</action-mappings>
2.全局异常
指对所有定义在Struts-config.xml的Action程序都进行处理,他定义在<global-exception>元素中
<global-exception>
<exception
key="passWordException.jsp"
path="SampleJsp.jsp"
type="struts.sample.cap3.sample.exception.passWordException"/>
<global-exception>
定义全局变量时无需将<exception>元素作为任何<action>元素的子元素,而是直接作为 <global-exception>的子元素.
简单示例:
(1).自定义标签类
UserNameException.java
package struts.sample.cap3.sample1.exception;
public class UserNameException extends Exception {
public UserNameException(){
super();
}
public UserNameException(String message){
super();
}
public UserNameException(String message,Throwable cause){
super(message,cause);
}
public UserNameException(Throwable cause){
super(cause);
}
public UserNameException(Exception exc){
super(exc);
}
}
(2)业务逻辑类
UserNameService.java
package struts.sample.cap3.sample1.service
import struts.sample.cap3.sample1.exception.UserNameException;
import struts.sample.cap3.sample1.exception.UserNameException2;
public class UserNameService {
public void UserNameLogic() throws UserNameException{
throw new UserNameException("UserName");
}
}
(3)Action类
SampleAction.java
package struts.sample.cap3.sample1.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import struts.sample.cap3.sample1.exception.UserNameException;
import struts.sample.cap3.sample1.service.UserNameService;
public class SampleAction extends Action{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
UserNameService userNameService=new UserNameService();
return null;
}
}
(4)资源配置文件
application.properties
userNameException=用户名无法确定
XXX=XXX
....
(5)JSP页面
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<html>
<head><title>JSP for SampleForm</title>
</head>
<body>
<html:errors/><p/>
<html:form action="SampleAction.do">
userName : <html:text property="userName"/><br/>
password : <html:password property="password"/><br/>
sex: <html:select property="sex">
<html:option key="F" value="F"/>
<html:option key="M" value="M"/>
</html:select><br/>
age : <html:text property="age"/><br/>
email : <html:text property="email"/><br/>
<html:submit/><html:cacel/>
</html:form>
</body>
</html>
二:global-forwards标记与全局转发
1.全局转发
所谓全局转发,就是在整个应用程序中,无论怎样的请求者都可以使用的全局中转.它可以仅仅通过一个请求转发到一个JSP页面,也可以通过另一个请求转发到另一个已经定义的Action请求.可以理解为全局转发就是一个控制器,它可以随着按钮(请求)的切换而转换(转发)到任何一个频道(JSP页面和请求).
2. global-forward标记的配置
<blobal-forward>
<forward
name="Login"
path="/LoginSampleJSP.jsp"/>
<forward
name="success"
path="/SampleAction"
redirect="true" 属性允许在2个Web context中进行转发,默认为false
contextRelative="true"/> 属性允许在多个struts配置文件模块中都可以识别转发,默认为false.
</blobal-forwards>
name的属性,path的属性是必须的,它们分别表示了转发标识和转发定位,对于任何一个<forward>元素都可以被设置.它实现了无论是全局转发还是局部转发都可以在模块间实现通讯.
3.Struts-config.xml中的转发
(1).<action>元素结合Action bean的局部转发
(2).<action>元素的简单局部转发
(3).Action bean中的程序转发
(4).<global-forwards>的全局转发
(1)这类转发是在请求到来后做一些业务逻辑,然后根据业务需要将结果转发到另一个请求或直接显示出一个JSP页面.
Struts-config.xml配置
<action-mapping>
<action
name="SampleForm"
path="/SampleAction"
scope="request"
type="struts.sample.cap3.sample1.action.SampleAction"
validate="false">
<forward name="SampleAction" path="/SampleJsp.jsp"/>
<forward name="failue" path="/Login"/>
</action>
</action-mapping>
Action bean程序代码
public class SampleAction extends Action{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request ,
HttpServletResponse response) throws Exception{
//业务逻辑代码................
if(true){
return mapping.findForward("SampleAction");
}else{
return mappingForward("failue")
}
}
(2) 这类转发只需要定义<action>元素,而不用专门的Action bean来配合工作,可以转发到请求或JSP页面.通常这类转发被用作直接转发到一个JSP显示页面的请求.
<action forward="/SampleJsp.jsp" path="/Welcome"/>
利用<action>元素的forward属性和path属性来完成工作,没有定义的ActionForm的name属性和定义Action bean Java实体名的type属性.当请求为path属性所定义的内容时,将直接转发到forward属性所指定的地方...
(3).通过Action bean的execte方法由程序员利用代码来制定转发.通常这类转发被使用在不确定转发目的地的场合,可能会根据请求request或ActionForm传入的内容来指定转发
Struts-config.xml配置
<action-mapping>
<action
name="SampleForm"
path="/SampleAction"
scope="request"
type="struts.sample.cap3.sample1.action.SampleAction"
validate="false">
<forward name="SampleAction" path="/SampleJsp.jsp"/>
<forward name="failue" path="/Login"/>
</action>
</action-mapping>
Action bean程序代码
public class SampleAction extends Action{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request ,
HttpServletResponse response) throws Exception{
//业务逻辑代码................
return new ActionForward(request.getParmeter("pageFlow"));}
}
返回的ActionForward类型对象可以实现动态转发,本示例中使用JSP页面中名为"pageFlow"的控件所指定的值作为转发目的地."pageFlow"控件的值可以是一个请求,也可以是一个JSP页面.这样,转发的目的地就完全交给进行请求的JSP页面来指定.
(4).这一类型的转发仅仅关注在转发这个动作上面,而不关注请求,因此全局转发必须配合<action>元素或者Action bean来实现"请求-转发"的整个过程.这类转发通常被使用在有统一转发目的地的显式逻辑中.
struts-config.xml配置(同上)
Actionbean部分(同上)+
return mapping.findForward("Login");
return mapping.findForward("SampleAction");
四.控制器
Struts框架的控制器由ActionServlet(Struts Servlet) RequestProcessor(请求处理),ModoleConfig(存储配置信息),Action,
ActionForward(Action的转发)5个主要对象多组成,他们完成了Struts框架服务器端表示层MVC的所有工作.
流程如下
1.客户端的请求到来后发送到ActionServlet中
2.ActionServlet调用RequestProoessor处理用户请求
3.RequestProcess根据Module得到请求对应的Action
4.具体Action对象处理请求的具体工作
5.从Action的处理返回ActionForward,转发到指定的目的地....
posted on 2007-09-22 17:59
冬天出走的猪 阅读(682)
评论(0) 编辑 收藏 所属分类:
struts