随笔 - 4  文章 - 10  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

   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

只有注册用户登录后才能发表评论。


网站导航: