快速入门Struts2

apache官方地址:http://struts.apache.org/文档清楚,示例简单,强推

[quote]在常见的mvc模型中,struts2实际上是解决C的功能,也就是控制器,系统核心控制器为Struts2框架提供的FilterDispatcher,它根据请求自动调用相应的Action。而业务逻辑控制器是指开发人员自行定义的一系列Action,在Action中负责调用相应的业务逻辑组件来完成处理。[/quote]

大概处理流程为
--------------------------------

人→浏览器发起http洗衣额request→服务器对请求进行分析→得到分析结果
↑ ↓
浏览器解析页面←通过http协议response传送页面←根据分析结果决定返回页面


--------------------------------
上面很白烂了……废话不多说我们还是来实战,工具采用最常见的MyEclipse。

[b]一 第一个struts2应用[/b]

[i]1 一个新的web project,暂时命名为StrutsDemo[/i]

[i]2 将附件中的jar包加入web-inf下的lib,这几个包是struts2所必须的包[/i]

[i]3 修改web.xml[/i]

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

注意<url-pattern>/*</url-pattern>这一行,决定监控url的类型,默认为.action/.do如果你想用其他结尾的,譬如像笔者有怪癖,可以详见附注1修改方法。

[i]4 开始编写自己的第一个action[/i]

public class TestAction extends ActionSupport {
private static final long serialVersionUID = 6241935194381649471L;
private String testValue;

public String getTestValue() {
return testValue;
}

public void setTestValue(String testValue) {
this.testValue = testValue;
}

public String execute() {
testValue = "你好";
return SUCCESS;
}
}


这是一个很简单的控制器,当调用到execute方法时,为testValue赋值,然后返回success

[i]5 写一个简单的jsp[/i]

在web-inf下建议page目录,然后新建一个StrutsTest.jsp


<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>StrutsTest</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<div>
<span>${testValue}</span>
</div>
</body>
</html>

利用el表达式获得testValue的值。

好啦,页面有了,控制也有了,那么怎么调用把两者关联起来呢?请往下看!

[i]6 在src目录下建立一个名为struts.xml的文件,其实也可以直接下classes目录下建立这个文件,效果是一样的。[/i]

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation"
value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.i18n.encoding" value="utf-8" />
<package name="" namespace="/" extends="struts-default">
<action name="test" class="action.TestAction">
<result name="success">/WEB-INF/page/StrutsTest.jsp</result>
</action>
</package>
</struts>

大概解释一下配置的内容,package继承自struts2的jar包中的struts-default.xml
action将浏览器访问的url和刚才编写的TestAction关系起来,而result表示不同的返回值分别对应的JSP页面。

[i]7 至此,一个很简单的struts2的web应用已经完成了[/i]
发布到tomcat,在浏览器上键入
http://localhost:8080/StrutsDemo/test.action
就会出现“你好”的字样。

二 引入struts标签

正是练武不练功,到老一场空,虽然是快速入门,但我们也还是介绍一下非常好用的struts标签。

所有支持的标签库请看这个
http://struts.apache.org/2.1.6/docs/tag-reference.html
既然是入门,这里只打算展示几个常见的控制标签的用法。

业务逻辑层代码稍微改动,我们需要输出一个list到页面上去:

public class TestAction extends ActionSupport {
private static final long serialVersionUID = 6241935194381649471L;

private ArrayList<String> aList = new ArrayList<String>();

public ArrayList<String> getAList() {
return aList;
}

public void setAList(ArrayList<String> list) {
aList = list;
}

public String execute() {
for (int i = 0; i < 10; i++) {
String temp = i + "";
aList.add(temp);
}
return "list";
}
}

页面jsp代码为

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>StrutsTest2</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<s:iterator value="aList" id="list" status="stat">
<s:if test="#stat.odd==true">
<span> <s:property value="list" /> </span>
</s:if>
<s:else>
<span>奇数项不显示</span>
</s:else>
</s:iterator>
</body>
</html>



注意这里,[color=red]<%@ taglib prefix="s" uri="/struts-tags"%>[/color],引入struts标签库,而后<s:>开头的标签都是struts标签。

s:iterator是一个很好用的循环标签,很多时候传送上来的数据是一个list或者map,这时候用这个标签会很方便。这个标签有个名为status的属性,利用这个属性可以控制list每一个数据显示的效果,譬如我们的例子中,分奇数、偶数行显示不同效果,就是利用status这个属性。

s:if也是一个很常见的控制标签,意思看字面就可以理解。

此外,struts标签库中还包括大量的ui标签,例如s:form/s:checkbox这些的,都会方便开发。不过白菜萝卜各有所好吧,笔者还是喜欢在传统html标签下开发js,所以不是很热衷于Struts的UI标签。


完成上面的工作后,接下来就是和之前类似的活路:修改struts.xml建立联系,发布到tomcat或是jboss诸如此类,访问得到结果,略过不谈。

[b]三 附注[/b]

1 struts2一般的url结尾多是.action或者.do,那么如果想设置其他后缀怎么办呢?
其实只需要在struts.xml同级目录新建一个struts.properites的配置文件,然后在里面写上下面这句话:
[quote]struts.action.extension=cssc[/quote]
好的,譬如xxxx/test.cssc的url也可以在我们的系统中运行了,其他后缀名以此类推。
事实上这个配置文件功能绝不仅限于此,那就是后话了。

2 当业务逻辑逐渐复杂时,如果每个action都需要一个新的类就实在太麻烦了,我们可以尝试一下这种方法解决。


<package name="" namespace="/" extends="struts-default">
<action name="test_*" method="{1}" class="action.TestAction">
<result name="success">/WEB-INF/page/StrutsTest.jsp</result>
<result name="list">/WEB-INF/page/StrutsTest2.jsp</result>
</action>
</package>

注意上面的struts.xml中action的写法,这里使用了一个通配符,这样我们在action类撰写时就可以不一定要使用默认的execute方法。譬如说我们如果定义一个名为first的方法,那么url为text_first.action就可以了。

[b]四 总结[/b]

既然是快速入门,必然简略,笔者仍然建议使用最上面那个连接,struts2的官方文档十分适合学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值