Struct学习笔记(一)

来源:互联网 发布:拍电影的软件下载 编辑:程序博客网 时间:2024/05/15 15:16

一、配置环境

1·配置struct

复制app里的struct.xml,copy到src目录下,将action的名字改为你想要的名字,result改为你想要的返回结果,****.jsp。 namespace="/"

   2.将模式改为开发模式:

<constant name="struts.devMode" value=true />

改了之后改代码不需要重启服务器。默认是false

    3.将struct源码导入到到Myeclipse

   在架包中右键选java source attachment->右边选external folder->struct文件夹/src/core/main/java。

   

    4.将struct文档导入Myeclipse

    在架包中右键选javadoc Location->javadoc URL 点Browse->struct文件夹/docs/struts2-core/apidocs

   

    5.将struct的标签库导入Myeclipse

    找到 struct-x.x.x.jar,解压开。有struct2.0.dtd。

copy structs.xml里的http://structs.apache.org/dtds/structs-2.0.dtd Myeclipse菜单栏点window->proferences-input catalog->XML Catalog->add->Key Type 选URI->Key黏贴http://structs.apache.org/dtds/structs-2.0.dtd->Location填xx\xx\struct2.0.dtd->OK-OK

    二、运行机制

    1、运行过程

    客户端输入一个地址同过http协议传到tomcat,tomcat找到tomcat下面的web application来处理->读这个web application的web.xml->找到<filter>标签,然后交给在<filter-mapping>下面有<url-pattern>/*<url-pattern>,表示过滤所有的url地址,然后交给org.apache.structs2.***.StrutsPrepareAndExecuteFilter的类接受到。这个类会找到namespace="/",在斜杠后面有***,就会看有没有<ation name="***">,有的话,就找里面的<result>返回给客户端

 

  三、namespace

  1、 namespace决定了action的访问路径,默认为"",可以接受所有路径的action,namespace可以写成/ or /xxx /xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action or /xxx/yyy/index.action。 namespace最后使用模块来命名

   structs.xml里的package标签和java一样,起到命名空间的作用。

<package name="front" extends="struts-default" namespace="/xxx">

package的namespace必须是/开头。客户端想访问其package里面的action,就必须加上/xxx/***。在namespace不填,所有的action都可以处理。

 

《小题外》在复制项目时,他的默认url地址不变,项目上右键点Propertise->Myeclipse->Web->修改Web Context-root,这里才是部署到tomcat上面的项目名

 

   四、Action

   在structs.xml中修改<action name="yyy">为<action name="yyy" class="com.***.xxx">表示接到这个action后交给"com.***.xxx这个类,执行里面的public Sting execute(),这个类只需要一个普通的java类。根据返回的String来查找<result name="thisString">,在没有写class时,默认执行ActionSupport这个类,在写处理Action时也可以实现Action接口,也可以继承ActionSupport。在开发时用继承ActionSupport的方式。

   如果action中写<action name="yyy" class="com.***.xxx" method="zzz">,将不再执行里面的execute方法了,而是会执行zzz的方法,记住zzz一定要是返回String类型

   如果在structs.xml中不指定调用哪个方法可以通过***/yyy!zzz来指定调用里面的zzz方法,这称为动态方法调用DMI。

   structs2在每次访问的时候都会new一个class处理,而Struct1则使用同一个对象。

 

《小题外》修改默认的jsp编码,Myeclipse->Preference->input Jsp->Encodeing改为UTF-8

 

   五、路径文件说明

   struct2中的路径是根据action的路径而不是jsp的路径来确定的,所以尽量不要使用相对路径。所以在struct2中统一使用绝对路径。在Myeclipse中自动在jsp的<head>中加入<base href="<%=basePath%>" />这意思是当前页面中的所有连接的前面都加上<%=basePath%>,

 

  六、通配符的配置

   作用是降低配置量。

   <action name="xxx*" class="com.***.yyy" method="{1}">

其中{1}匹配第一个*号,name="xxx*"能匹配所有的xxx,后面无论是什么内容。result中也可以使用通配符来指定特定的jsp。

   在项目中约定优于配置。

   <action name="*_*" class="com.XXX.XXX.{1}Action" method="{2}">

      <result>/{1}_{2}_xxx.jsp</result> 

   </action>

约定好,配置文件就只有很多个*了,在实际中,struct会先找最精确的,如果没有,在找通配符的。

 

七、参数接收

   1.在Action类中写好成员变量,并且写好get和set方法,Struct会主动调用set方法。变量名和http://localhost:8080/xxx/yyy/zzz!add?name=oo&age=8,这中间的变量名必须一致才行(准确说是getName中的name与地址中的参数一致),类型struct会主动帮你转。

    2.使用Domain Model(域模型)来接收参数

    其实和第一种方法是一样的,只是提供了用实体类来接收参数,http://localhost:8080/xxx/yyy/zzz!?user.name=aa&user.age=8

在Action类中必须有User类的对象。实体类不需要实例化,struct会自动帮忙new出来。

    3.使用Model Driven Action的类必须实现ModelDrien<?>的接口,可以使用第一种方式传参,但是确实用第二种方式接收参数。不常用,思想很重要。在这种情况下,必须自己new这个对象。Action类中有,

   private User user = new User();

struct通过getModel来获得模型,然后在Model中填充数据。

   《小题外》jdk1.5和jdk1.6的区别:在jdk1.5中,实现接口是不能写@Override的,而在jdk1.6中,是可以写的。Myeclipse中设置编译环境:项目右键->Properties->java compiler->Compiler compliance level:1.6。

    《小题外》struct的默认参数可以在原先解压开的struct-x.x.x.jar中的default.properties的文件中找到,然后通过<content>标签进行修改覆盖。

原创粉丝点击