Struts控制器ActionServlet

此文大量参考:《精通Struts:基于MVC的Java Web设计与开发》           作者:孙卫琴         电子工业出版社

           控制器由ActionServlet类和Action类来实现。ActionServlet类是Struts框架中的核心组建。ActionServlet继承了javax.servlet.http.HttpServlet类,它在MVC模式中扮演中央控制器的角色。ActionServlet主要负责接收HTTP请求信息,根据配置文件struts-config.xml的配置信息,把请求转发给适当的Action对象。如果该Action对象不存在,ActionServlet会先创建这个Action对象。(15页)

 

配置Struts的ActionServlet

 

          web.xml文件对于配置任何Java Web 应用都是必须的。当配置Struts应用时,还应该在web.xml文件中配置和Struts相关的配置选项。

          首先,同时也是最重要的一步是配置ActionServlet。在web.xml中配置ActionServlet有两个步骤。第一步是用<servlet>元素来声明ActionServlet。

<servlet-name>元素用来定义Servlet的名称

<servlet-class>元素用来定义指定的完整类型名。

以下是声明ActionServlet的代码:

<servlet>
           <servlet-name>action</servlet-name>
           <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>

               配置ActionServlet的下一步为配置<servlet-mapping>元素,它用来指定ActionServlet可以处理哪些URL。以下代码对ActionServlet做了完整的配置:

<servlet>
           <servlet-name>action</servlet-name>
           <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>

<servlet-mapping>
           <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

              这里应该注意的是,<servlet>元素中的<servlet-name>子元素必须和<servlet-mapping>元素中的<servlet-name>子元素匹配。以上代码的<url-pattern>属性为“*.do”,表明ActionServlet负责处理所有以“.do”扩展名结尾的URL。例如,如果用户请求的URL为http://localhost:8080/helloapp/HelloWorld.do,Web容器将把该请求转发给ActionServlet。

               此外,还可以按以下方法设置<url-pattern>属性:

<servlet-mapping>
           <servlet-name>action</servlet-name>
    <url-pattern>/do/*</url-pattern>
</servlet-mapping>

                以上代码的<url-pattern>属性为“/do/*”,表明ActionServlet负责处理所有以“/do”为前缀的URL。例如,如果用户请求的URL为http://localhost:8080/helloapp/do/HelloWorld,Web容器将把该请求转发给ActionServlet。

提示           

                不管应用中包括多少子应用,都只需配置一个ActionServlet。有些开发者希望设置多个ActionServlet类来处理应用中不同的功能,其实这是不必要的,因为Servlet本身支持多线程。而且,目前的Struts框架只允许在应用中配置一个ActionServlet。

声明ActiongServlet的初始化参数

                  初始化参数用来对Servlet的运行时环境进行初始化配置。<servlet>的<init-param>子元素用于配置Servlet初始化参数,例如:

<servlet>
           <servlet-name>action</servlet-name>
           <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
      <init-param>
              <param-name>config</param-name>
              <param-value>/WEB-INF/struts-config.xml</param-value>
           </init-param>
</servlet>

<servlet-mapping>
         <servlet-name>action</servlet-name>
         <url-pattern>*.do</url-pattern>
</servlet-mapping>

           <init-param>子元素用于声明Servlet初始化参数,其格式以“参数名/参数值的形式成对出现。例如,以上代码为ActionServlet配置了初始化参数config,config参数是配置Struts的ActionServlet专有的,它用来设置Struts配置文件的相对路径。

配置欢迎文件清单

<welcome-file-list>
       <welcome-file>welcome.jsp</welcome-file>
       <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

          当客户访问Web应用时,如果仅仅给出Web的Root URL,没有指定具体的文件名,Web容器就会自动调用Web应用的欢迎文件。<welcome-file-list>元素用来设置欢饮文件清单。上面代码声明了两个欢迎文件:welcome.jsp和index.jsp。

          <welcome-file-list>元素中可以包含多个<welcome-file>子元素,当Web容器调用Web应用的欢迎文件时,首先寻找第一个<welcome-file>指定的文件。如果 这个文件存在,将把 这一个 文件返回给客户;如果这个文件不存在,Web容器将依次寻找 下一个欢迎文件,直到找到为止;如果<welcome-file-list>元素中指定的所有文件都不存在,服务器将向客户端返回“HTTP 404 Not Found”的出错信息。

           由于在<welcome-file-list>元素中不能配置Servlet映射,因此不能直接把Struts的Action作为欢迎文件。但有方法可以实现在欢迎文件中调用Struts Action。(75页)

配置错误处理

           当错误发生时,如果Struts框架不能处理这种错误,就把错误抛给Web容器。在默认情况下,Web容器会向用户浏览器直接返回原始的错误信息。如果想避免直接让用户看到原始的错误信息,可以在Web应用的发布描述文件中配置<error-page>元素。以下代码演示了如何使用<error-page>元素来避免让用户直接看到HTTP 404 或 HTTP 500错误。

<error-page>
      <error-code>404</error-code>
      <location>/common/404.jsp</location>
</error-page>

<error-page>
      <error-code>500</error-code>
      <location>/common/500.jsp</location>
</error-page>

          如果在web.xml文件中做了以上配置,当Web容器捕获到HTTP 404 或 HTTP 500错误时,将根据错误代码检索<error-page>元素,如果有匹配项,就返回<location>子元素指定的文件。例如,如果发生HTTP 404错误,将返回404.jsp网页。

           也可以为Web容器捕获的Java异常配置<error-page>元素,这时需要设置<exception-type>子元素,它用于指定Java异常类。Web容器可能捕获如下异常:

RuntimeException

ServletException或它的子类

IOException或它的子类

            在<exception-type>元素中声明的Java异常类必须是以上所列举的情况之一。以下代码演示了如何配置ServletException异常和IOException:

<error-page>
      <exception-type>java.servlet.ServletException</exception-type>
      <location>/common/system_error.jsp</location>
</error-page>

<error-page>
      <exception-type>java.io.IOException</exception-type>
      <location>/common/system_ioerror.jsp</location>
</error-page>

         如果在web.xml文件中做了以上配置,当Web容器捕获到ServletException或IOException异常时,将根据异常类型检索<error-page>元素,如果有匹配项,就返回<location>子元素指定的文件。例如,如果发生ServletException异常,就放回system_error.jsp网页。

配置Struts标签库

          Struts框架提供了一些实用的客户化标签库。如果在应用中使用了这些标签库,那么必须在Web应用发布描述文件中配置它们,配置元素为<taglib>。以下代码演示了如何使用<taglib>元素来配置客户化标签库:

<taglib>
   <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
   <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>

<taglib>
   <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
   <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>

<taglib>
   <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
   <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>

       <taglib>元素有两个子元素: <taglib-uri>和<taglib-location>。 <taglib-uri>元素指定标签库的相对或者绝对URI地址,Web应用将根据这一URI来访问标签库;<taglib-uri>元素指定标签库描述文件在文件资源系统中的物理位置。

         如果Web应用中没有使用Struts标签库,就没有必要在web.xml文件中配置它。此外也可以按上述方式在web.xml文件中配置用户自定义的客户化标签库,例如:

<taglib>
   <taglib-uri>/WEB-INF/mytaglibs.tld</taglib-uri>
   <taglib-location>/WEB-INF/mytaglibs.tld</taglib-location>
</taglib>

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值