Struts 学习笔记 一

本文介绍Struts1.2框架的核心组件及其工作流程,包括涉及的主要包、web.xml配置解析等内容,深入剖析ActionServlet的工作原理。

struts 1.2 

涉及到的包:
    commons-beanutils.jar : commons-beanutils.jar 提供对Java 反射和自省API的包装.
    commons-digester.jar  : Digester基于规则的XML文档解析,主要用于XML到Java对象的映射. 
    commons-fileupload.jar : 上传组件
    commons-logging.jar : 目的是提供一套轻量级的中间层日志接口,将项目与具体的日志框架解耦,
                                       从而实现不同日志框架之间的切换
    commons-validator.jar :包用来把验证规则程序提取出来,以供重复使用 
    jakarta-oro.jar : 一个Java工具包用来在 Java 类中进行文本处理的功能,
                                 提供兼容 Perl5 的正则表达式、类 AWK 的正则表达式等。
    struts.jar :     struts核心包
    antlr.jar:    语法分析生成器
    servlet_api.jar  : Java Servlet API的全部类和接口的详细说明
    aspectjweaver.jar : 用于在Spring 2.0中集成AspectJ AspectJ LTW织入器


web.xml 配置解析:

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

 
    ActionServlet是Struts中最核心的部分,我们从这里开始。它相当于中央控制器,
我们来看看他是怎么样实现核心Control的。它是通过org.apache.struts.action.ActionServlet来实现的,
所有的请求通过它进行中转。它负责接受所有的request,并且产生相对应的response到请求的页面。
但是它怎么知道对应呢?这里就存在一个map文件(我习惯这么叫它)Struts-config.xml,
它包括了resource文件、如何到达下一个页面、下面一个页面是什么、页面的校验规则、
怎么样显示错误信息(如ActionMessage的使用)的定义。

<init-param>  
    <param-name>config</param-name>  
    <param-value>/WEB-INF/struts-config.xml</param-value>  
</init-param>  
<init-param>  
    <param-name>debug</param-name>  
    <param-value>3</param-value>  
</init-param> 

 
    
ActionServlet  初始化 config  成员变量 进行赋值
  public ActionServlet()//构造函数也已经进行了默认
 {
     ...
     config = "/WEB-INF/struts-config.xml";
     debug = 0;    
     ...
  }

<load-on-startup>0</load-on-startup>

     
    标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
正数的值越小,启动该servlet的优先级越高。
    所以tomcat启动时会加载ActionServlet,也就是会执行ActionServlet中的init()方法,
Struts 的初始化实现就是在这里实现的。

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

    ActionServlet收到请求之后,它将会调用RequestProccessor对象来
处理httprequest请求的消息。如checkerrors等。下一步,它根据浏
览器的请求路径、struts-config.xml文件中对应的请求路径和Action Bean
的对应关系来调用对应的Action Bean的excute方法,action bean处理完成之后,
调用业务模型,调用完成之后,将含有返回下一个页面返回信息的ActionForward
对象传给ActionServlet,然后由actionservlet转换到下一个页面返回给浏览器。

web.xml

<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>
    <init-param>
        <param-name>debug</param-name>
        <param-value>3</param-value>
    </init-param>
    <init-param>
        <param-name>detail</param-name>
        <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

 

 

默认的ActionServlet会从配置文件web.xml中读取如下初始化参数:

application

应用使用的资源包(resources bundle)的基类

factory

用于创建应用的MessageResources对象的MessageResourcesFactory的类名。确省是org.apache.struts.util.PropertyMessageResourcesFactory。

config

Struts的配置文件,确省是/WEB-INF/struts-config.xml。注意这儿是与应用Context关联的相对路径。

content

定义了确省的内容类型和编码格式,它会被自动地被设置到每个response中,如果JSP/Servlet中没有明确的设置。确省是text/html。

debug

调试信息的级别。默认为0,比当前级别高的调试信息会被log到日志文件中。

detail

与debug的作用类似,只是这个detail是initMapping()时专用的。调试信息会被打印到System.out,而不是日志文件。

formBean

ActionFormBean的实现类,确省为org.apache.struts.action.ActionFormBean

forward

应用中使用的ActionForward类,确省是org.apache.struts.action.ActionForward。

locale

指定了确省使用的Locale对象。设为true,当得到一个session时,会自动在session中存储一个以Action.LOCALE_KEY标示的Locale对象,如果session中还没有与Action.LOCALE_KEY绑定的Locale对象。

mapping

应用中使用的ActionMapping类,确省是org.apache.struts.action.ActionMapping。

multipartClass

文件上传使用的MutipartRequestHandler的实现类。确省为org.apache.struts.upload.DiskMultipartRequestHandler

nocache

如果设为true,那么ActionServlet会自动在每个到客户端的响应中添加nocache的HTML头,这样客户端就不会对应用中的页面进行缓存。确省为false

null

如果设置为true,那么应用在得到一个未定义的message资源时,会返回null,而不是返回一个错误信息。确省是true。

maxFileSize

文件上传的大小上限,确省为250M

bufferSize

文件上传时的缓冲区的大小,确省为4M

tempDir

设置用于上传时的临时目录。工作目录会作为一个Servlet环境(Context)的属性提供。

validate

Are we using the new configuration file format?确省为true。

validating

在解析配置XML文件是是否进行有效性的验证。确省为true

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值