Strust2框架搭建


1、         导包

官网下载Strust2


Strust2开发商并没有将这个jar分类,所以我们导包很难,所以进入到app文件下,这个文件下是一些war包,这些war包都是demo。将war包当中的包全部复制出来就是我们想要的包。将strust2_balank.war改成.rar文件然后解压,然将WEB-INF下面的lib包全部导入项目中,就完成了。

2、         创建action类

public class HelloAction {
    public String hello(){
        System.out.println("hello strust2");
        return "success";
    }
}

 

 

3、         创建配置文件strust.xml

(1)文件位置必须在src目录位置下,名字也必须是strust.xml

倒入约束,

 

 

<!DOCTYPEstrutsPUBLIC
       
"-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

然后引入strust标签.

(2)去配置action

<package name="holle"namespace="/holle" extends="struts-default">
    <actionname="helloAction" class="cn.hd.holle.HelloAction"method="hello">
        <resultname="success">/hello.html</result>
    </action>
</package>

(3)创建一个hello.html

(4)在web.xml中去配置过滤器。这是因为Struts2是基于过滤器。配置过滤器的类名比较长,打开编译器的全局搜索,输入StrutsP就可以复制这个类的相对路径

<filter>
    <filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

(5)测试

在浏览器中输入

页面上显示内容为hello.html中内容,控制台打印hello.struts2内容

总结:404错误

1、         struts.xml  文件位置放错了

2、         struts.xml文件名字写错了

3、         hello.xml文件位置放错了

4、         Tomcat启动失败

5、         struts.xml中配置写错了

一个packge中的namespace和地址不一样

action中的name和地址中的helloAction不一致

reulst里面name字段和action中的返回值不一致

reulst中值不是/hello.html写错了

配置文件详解

1、struts.xml

namespace对应的地址



(1)package配置详解

<!--
package:它跟项目里面的包没关系,它是用来管理action的
name:给这个package起个名字,没什么意义,一般情况下他的命名是按照当前package管理action的分类来命名
package和package的名字不能重复
namespace:访问路径地址前缀,跟name没有关系,给其他的package中的namespace能不能重复,没有要求。
extends:继承,继承自struts-default,必须写,名字不能改,他是从struts2核心包中 struts-2.2-core下面
struts-default.xml这里面配置了很多默认的属性。
abstract:抽象的意思,声明的一个标志,当前这个配置文件不能独立运行,等待被继承。
-->

 

(2)action配置详解

<!--
    action配置详解
    name:给action起名字,确定了访问路径最后的地址。
    class:访问的那个类,写上类的完整路径名
    method:访问类中的方法
-->

(3)result配置详解

<!--
result配置详解:
name:对应的action类中的method的返回值
名字可以随便写,只要和action类中的返回值结果一样,就可以,
但是一般情况下使用默认
type:dispatcher 转发
    redirect 重定向
标签中间的值:跳转页面的地址
-->

 
(4)include在src 下struts.xml可以去读取他位置的xml文件
要求:新创建得xml必须也有约束

约束代码:<includefile="cn/hd/dynamic/struts01.xml"></include>

2、常量配置

默认的常量配置,在struts2的核心包下的

默认的常量配置文件名是default.properties

如何修改这些常量:

(1)在struts.xml中去修改

<!--i18n 国际化,相当于在servlet中设置的编码
        解决了post请求的中文乱码
        -->
<constant name="struts.custom.i18n.resources"value="UTF-8"></constant>

(2)在src目录下,创建struts.properties文件,直接在该文件中修改常量即可。



param-name中书写常量名,param-value中书写常量值

三个地方同时修改那个生效?

web.xml > struts.properties > struts.xml

推荐使用第一个!

 

常用的常量配置:

(1)i18n.ecoding设置编码,解决了post请求的乱码

name="struts.custom.i18n.resources"value="UTF-8"

(2)struts.action.extension设置action的访问扩展名

<!--extension 使用设置action访问的扩展名     action,,     可以改成do,为什么要改成do?因为struts1用的是do

如果改成do,那么在访问路径中的action中访问必须加上.do,否则会有404错误 --> <constant name="struts.action.extension"value="do"></constant>

(3)struts.devMode设置开发者模式,默认关闭

<!-- developerMode 开发者模式     1、热部署 你修改配置文件后,等一段时间后会自动加载。     2、提高错误信息的提示(友好的错误提示) --> <constant name="struts.devMode" value="true"></constant>

3、      高级配置

为什么要使用动态方法?

 

如何配置动态方法:

(1)推荐使用

<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}">     <result na

Struts2访问流程

me ="success">/hello.html </ result > </ action >

Action配置中的name属性,决定着浏览器的访问地址。

Strust2可以采用通配符的方式默认区读取 method {1}会自动将路径中userAction….配置到method中

(2)开启动态方法的常量

首先要开启动态方法的常量

<constant    name="struts.enable.DynamicMethodInvocation"value="true"></constant>

将action中的method删除掉。

完成了动态方法的开启

测试的时候,在浏览器的路径中输入action的name值+!方法名(action中的方法名)

注意:

第一种方法,在struts2的高版本中会无效,

首先你先开启动态方法,然后增加allowed-methods属性

<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}">     <result name="success">/hello.html</result>     <allowed-methods>update,add,delete,query</allowed-methods> </action>

4、      默认配置(了解)

<!--     action标签中的method属性可以不写,默认方法 execute     result标签中的name属性可以不写,默认返回值success                             type:默认是dispatcher     class:可以不写,默认的类是ActionSupport打开这个类文件,他里面有execute     方法,该方法返回一个success字符串。 -->

 

<!--默认的Action地址 如果请求不存在,那么会默认访问default-action-ref里面的action -->  <default-action-ref name="defaultAction"></default-action-ref>

Struts2访问流程

1、         从浏览器输入地址

2、         进入到web.xml

3、         struts2过滤器去加载过滤文件 struts.xml

4、         路径中的第一个地址namespace了便利你的struts.xml中包package的namespace属性,如果他找到了和地址中匹配的就进入到该包,如果没有找到就报异常

5、         找到了该package再去路径后面的地址,然后去package找action的name属性如果找到匹配的,就进入到该action配置的Action类中

6、         通过action的method属性去执行action类对应的方法

7、         根据执行的Action类中的方法获得返回值,然后回到struts.xml里面的result标签,通过读取result中的配置打开相应的文件

 




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值