重回struts

本文详细解析了Struts2框架的基本配置过程,包括web.xml的配置方式、struts.xml和example.xml的作用及内容,同时介绍了Action实现及返回机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然一直号称熟悉ssh,不过因为工作好久都没有亲手配置过了,前两天竟然被一个小兄弟问住了,决定仔细的复习一遍

首先我下载了struts-2.2.3-apps这是struts的一些范例

我从struts2-blank这个应用看起

首先看它的web.xml

它使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter这个filter来做前端控制器接管所有请求

欢迎页面配置的是index.html,在index.html里会自动重定向到/example/HelloWorld.action这个路径下

这个请求被struts容器接管了,由于没有进行特别的配置,strtus会使用class目录下的struts.xml中的配置来工作

在这里可以看到它配置了全局异常,使用/error.jsp来呈现

另外配置了一个名为index的action,它的相应类型是redirectAction也会转到/example/HelloWorld.action下

末尾它还include了一个配置文件example.xml

通过这一行下面的注释

<!-- Add packages here -->我们可以看出来strtus推荐把不同package的配置放到独立的文件中

接下来我再看example.xml中的配置

在example.xml中根目元素struts下面是一个package元素,这个元素不太熟悉先跳过

package下面是几个action元素

首先是HelloWord action使用的class是example.HelloWord(这显然是类的全路径),等下我们要依次看每个类如何实现的,result是/example/HelloWorld.jsp,就是说无论执行结果为何都使用这个jsp来呈现相应

第二个是Login_*其中的*是一个通配符,区别于第一个action,它有一个method属性method="{1}",它的class是example.Login,可以推测,当我们访问Login_input.action这个地址是,strtus框架会调用example.Lonin.input这个方法,它有两个result<result name="input">/example/Login.jsp</result>和<result type="redirectAction">Menu</result> ,也就是说当result为"input"时,使用/example/Login.jsp呈现,其他结果时重定向到Menu这个路径下

下一个action比较直白

<action name="*" class="example.ExampleSupport">
  <result>/example/{1}.jsp</result> 
</action>

可以看出来,/Menu.action会使用/eaxmple/Menu.jsp来呈现相应

{1}应该是表示*所匹配的字符,这是我根据正则的占位符规则猜测的。


接下来看HelloWorld.java的实现,他继承了strtus的ActionSupport继承,并且有一个属性message,在execute方法中设置了这个message的值

那么这个属性怎么呈现到相应中去呢,HelloWorld.jsp中给出了答案

<s:property value="message"/>

这是从ActionSupport里继承的action需要覆盖execute方法

我们再来看看Login.java是如何实现的,我们发现实际上Login也是从ActionSupport继承来了,并不像前面推测的有什么input方法,所以调用Login的时候永远都是调用它的execute方法

现在又多了一个疑问action中的method属性有什么作用呢?

通过观察action实现和strtus配置文件我们可以知道,action总是返回一个字符串作为抽象view名字,而action的result中配置抽象view和实际view的映射关系

最后我们再来看看jsp中海油那些tag

Login里有4个tag,功能一目了然

<s:form action="Login">
    <s:textfield key="username"/>
    <s:password key="password" />
    <s:submit/>
</s:form>


to be continued....



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值