• struts浅谈


    当Web容器首次启动时,会加载并解析web.xml。默认情况下,在Web容器运行时不会检测Web.xml文件的更新并重新加载它。

    Struts配置文件也在Web容器首次启动时被加载并解析。出于安全考虑,Web容器在运行时也不会监测Struts配置文件的更新并重新加载。

    两个配置文件web.xml和struts-config.xml

    一、Web.xml//对ActionServlet类进行配置,web所使用的标签库的位置以及Structs配置文件位置。

    1<!DOCTYPE……………………………..>/DTD对该xml文档的格式进行定义,如果下面的xml格式

    2不符合该定义,就会报错。

    3<web-app>
    4 <servlet>
    5 <servlet-name>action</servlet-name>
    6 <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>//
    7 <init-param>
    8 <param-name>config</param-name>
    9 <param-value>/WEB-INF/struts-config.xml</param-value>//struts配置文件所在的位置
    10 </init-param>
    11 <load-on-startup>1</load-on-startup>//web容器启动时候的加载顺序,数字越小加载越早
    12 <servlet>
    13
    14 <servlet-mapping>//定义ActionServlet所要处理的url
    15 <servlet-name>action</servlet-name>
    16 <url-pattern>*.do</url-pattern>//*是通配符,即所有以.do请求的都被拦截
    17 </servlet-mapping>
    18
    19 <welcome-file-list>//欢迎页面,即我们只需要在浏览器输入ip:port/web应用,index.jsp就会被请求
    20 <welcome-file>/index.jsp</welcome-file>

    21<taglib>//<taglib-url>指定标签库的相对或绝对URL,WEB应用将根据这一URL来访问标签库

    22<taglib-uri>/WEB-INF/struts-bean-tld</taglib-ri>

    23<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>//标签库所在的位置
    21 </welcome-file-list>
    22  </web-app> 

      上面的标签库和欢迎界面路径是相对于web应用的根目录。

    二、Struts-conf.xml文件。

    其中的<form>中的type的路径是,如果是自己写的form就是相对于classes下的文件所在包名+类名。如写一个HelloFrom.java.packege hello。ant编译在WEB-INF/classes/下,则引用时候写type=“hello.HelloFrom“,不用写成WEB-INF/classes/了。

    同理action的type也是类似写法。

    Action中的path写的是相对于web项目根目录。如我写一个myproject放在webapps中。我把java文件编译后放在myproject/WEB-INF/classes目录下。在myproject/jsp/1/my.jsp.中有一个From表单请求

    <from action=”../hello.action”>………………</from>。//在.jsp,.html中填写的路径有关的都是相对于该jsp所在路径。像这个就是my.jsp所在目录上一级目录,因为用../。请求url是jsp/hello.action。不用写myproject/jsp/hello.action了。

    下面讲一下struct-conf.xml文件。

    第一是。<from-beans><form-bean name=”HelloForm”type=”hello.HelloForm/”></form-beans>。由hello.HelloForm进行处理用户提交的信息。不一定是通过form标签提交的。可以是<href=”../hello.action/username=’123’“>提交的username信息。在hello.HelloForm中的变量名必须和表单中input的id或name一级<herf>中的变量相同,并且在自己写的hello.HelloForm要实现set和get一级reset和validate方法。

    第二是。<action path=”/jsp/hello” type=”hello.HelloAction” name=”HelloForm” scope=”request” validate=”true”

    //parameter=”method”

    <forward name=”SayHello”path=”/hello.jsp”>

    Path是响应的url请求,即路径为/jsp/hello.action的被拦截了。Name是对url提交的请求数据进行处理,type是具体的action。Scope是HelloForm的变量生存周期,validate是true执行validate方法。在action类中通过调用ActionMapping mapping.findForward(“SayHello”)就跳转到hello.jsp中页面。

    第三、多动作action。一个action只能有一个excute函数。这样太麻烦了。我们可以通过hello extends DispatchAction方式来实现多动作action。

    步骤是:1,在form表单提交时候<hidden>提交一个name=”method”(随便写) value=”login“

    2,在struts-conf.xml中配置action时候加一个parameter属性,如parameter=”method“(和form中的相同)

    3,写action类的时候不是extends Action了,而是extends DispatchAction。然后将extute变成 login。如果有多个value,则写多个方法,从而实现多动作Action。

    Action是整个其所在web应用所公用的,即创建一次,不过其方法是多线程调用的。

    即上面写的HelloAction一旦创建就放在缓存里了,这我整个myproject所公用。但是其方法extute是多线程调用。

    不要做一个似懂非懂的人,做一个脚踏实地的程序员
  • 相关阅读:
    字符串转XML保存后保证XML的格式
    SmartFoxServer学习(3)--第一个Extension
    SmartFoxServer学习(2)--Extension调试
    SmartFoxServer学习(1)--初步了解
    jmeter 开发自己的java请求 二次开发
    hive 面试题
    美丽说-爬虫记录
    python中re.sub的使用 --解读一段代码
    python 抓取美丽说店铺的宝贝图片及详细信息的实现(爬虫)
    hadoop编码问题,mapreduce中Tex与string的转化 乱码问题
  • 原文地址:https://www.cnblogs.com/xuexiaohei/p/4435999.html
Copyright © 2020-2023  润新知