Struts2学习——(二)开发实例-我的第一个Struts2工程

回顾了上一次的学习过程,感觉还是有点条理不够清晰,因此这次我决定动手写一个过程,牢记一下Myeclipse下配置Struts2以及建立工程的过程。

IDE:MyEclipse10

1、新建一个web project

2、在工程上单击右键,选择“MyEclipse”下的“Add Struts Capabilities...”


在这里我们选择Struts2.0版本,同时加入core库,其中包含了我们所需要的基本jar。

之后我们可以看到,在src文件夹下已经自动生成了struts.xml文件

同时可以看到在web.xml文件中也已经对filter做好了映射。


3、打开struts.xml,配置action

<struts>
	<package name="struts_demo" namespace="/" extends="struts-default">
		<action name="login" class="cn.wqy.LoginAction" method="execute">
			<result name="success">/loginsuc.jsp</result>
			<result name="error">/loginfal.jsp</result>		
		</action>
	</package>
</struts>
   直接在<struts>标签下配置即可。一个<package>标签下可以有多个action。<package>标签的属性有name(不是java目录下的包),namespace(命名空间,用来组成访问action的路径,减少重复代码),extends(继承的类,struts-default包是struts内置的,它定义了很多拦截器,而Struts2很多核心的功能都是通过这些内置的拦截器实现,如:从文件上传、数据验证、自动封装前台传过来的参数等等。我们写的包继承了struts-default包才能使用struts2为我们提供的这些功能,所以通常我们写的每个包都应该继承它。)。

<action>标签的属性有name(action的名,参与组成访问action的路径),class(action所用的类),method指定了所用的方法,缺省则为execute()。

<result>代表的是结果集,即通过action的返回值来确定返回的视图。根据其name属性值返回该标签体中的页面。在只有一个<result>的情况下,缺省name则默认为“success”。

result标签中有一个属性type,默认值为“dispatcher“,服务器端跳转(只可以跳转页面HTML、JSP,但是不能使Action)。还可以取值为:(常用)

redirect:重定向(只可以跳转页面HTML、JSP,但是不能使Action

chain:forward到一个Action

redirectAction:客户端跳转到一个Action

Ps:如果要跳转到另一个包中的action时:

<package name="p1" namespace="/p1" extends="xxxxx">
   <action name="a1" class="xxxx">
       <result>/1.jsp</result>
   </action>
</package>

<package name="p2" namespace="/p2" extends="xxxxx">
   <action name="a2" class="xxxx">
       <result type="redirectAction">这里</result>
   </action>
</package>
应该在一个action的result标签下作如下配置:

<result type="redirectAction">
   <param name="namespace">/p1</param> (这里要写package的namespace)
   <param name="actionName">a1</param> (这里写action的name)
</result>

(其余不常见的以后再补充................)


>>Global results全局结果集

如果有一个包中有几个Action同时想回到某个结果集,则可以把这个结果集设置为全局结果集。<global-results>,内部结构完全相同。在Action之外设置。则该包中所有Action都可以访问这个结果集。

>>如果别的包中的Action也想用这个全局结果集怎么办呢?

将另一个包继承含有想使用的全局结果集的包(即包的extends属性),由于父包继承了"struts-default",故子包也继承了该类,不必担心缺少一些必要的方法等。


要注意的是,struts.xml的配置中有一种<include>标签,eg:<include file="xxx.xml">,这样写起来板块更加明确。可以在每一个被包含的xml中写相关的一组Action。


4、写action对应的类

package cn.wqy;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String name;
	private String pass;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	
	public String execute(){
		if(name.equals("wqy")&&pass.equals("aaa")){
			return SUCCESS;
		}
		else{
			return ERROR;	
		}	
	}
}
注意类名和struts.xml中要对应起来,返回值常量和<result>中对应起来。

5、写其他的jsp

jsp的编写这里就不展示了


注意路径问题:/ 表示的是绝对路径,不加表示的是相对路径,即和当前文件同目录级别。

struts.xml中

<result name="success">/loginsuc.jsp</result>
<result name="error">/loginfal.jsp</result>
此处的jsp页面要使用绝对路径,表示在工程目录下。

而页面间超链接跳转是相对路径:

<body>
    fail!<br>
    <a href="login.jsp">click here!</a>
  </body>

至此,一个简单的struts工程就创建好了。

在链接栏里输入:http://localhost:8080/Struts2_001/login.jsp


ps:在这里可能有一个疑问。没有request对象的声明,name和pass两个属性是如何获得值的呢?答案是:框架帮我们把属性注射进去了。利用反射原理,获得了action中的setter,getter方法,根据属性名的对应,struts2框架帮我们将String,int,double等各种类型的数据注射入action,并且转换成我们所定义的数据类型。

而且,action类中向视图传递参数时,不必像servlet一样setAttibute,直接可以在JSP中访问action中的属性,比如${ XXX }即可。


pps.如果在实际开发中,action的package的namespace不为默认值,比如说设置为“/demo”,那么在访问action时,跳转的链接就应该写成“demo/xxx.action”。


ppps:如果要表示上级目录,则正确格式为“../”表示上一级目录,“../../”表示上两级目录,以此类推。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值