struts2学习笔记(二)---实例应用

一.前言

    第一篇介绍了struts的原理,这里写一下如何利用struts框架进行系统的开发,引用下面一个简单的系统来讲讲如何实现系统的一些功能.

二.准备工作

struts框架的jar包可以去官网下载struts官网
下载完毕,里面有我们需要的包,对于新手来说可以直接将下载好的文件,里面 有apps文件夹,里面有例子,解压后将里面lib里的包给导入到自己新建的工程里.同时可以参考下它里面的代码,可以更好的对struts的了解

三.struts文件配置

struts.xml文件配置 这个是关键所在,附上代码
<struts>
	<!-- Overwrite Convention -->
	<package name="default" namespace="/" extends="struts-default">
		<action name="*_*" class="com.eduask.chp.action.{1}" method="{2}">
			<result name="list">list.jsp</result>
                        <allowed-methods>Action的方法名</allowed-methods>
                        </action>
         </package>
         </struts>
注意:如果使用通配符的话,注意版本,我用的是最新的2.5的版本 .一定要加这句话,不然在开发工程的时候会报错
来分析下这个配置
1.<package name="default" namespace="/" extends="struts-default">
name的作用是用来区分不同模块的
namespace="/":这个是地址分割符,
extends="struts-default":实际上是把package中name为"struts-default"的包中的所有的功能,你也可以继承某个包,写上对应的包名
2.<action name="*_*" class="com.eduask.chp.action.{1}" method="{2}">
这里的我用的是注解的模式,这样更快捷,你也可以直接写类名,和方法名.用{1}代表前一个的类名,{2}
3.<result name="list">list.jsp</result>
这里的是action层返回的结果的名字,后面是结果的jsp,中间可以设置type,默认为请求转发,你也可以加上type="redirect"表示重定向

三.控制层代码

action层也就是所说的控制层,基于mvc的结构,控制层的作用简单来说获取参数和传递结果,
(1)那如何获取参数呢?
新建一个用户的类
package com.eduask.chp.bean;
//用户类
public class User {
private int id;
private String userName;
private String passWord;
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUserName() {
	return userName;
}
public void setUserName(String userName) {
	this.userName = userName;
}
public String getPassWord() {
	return passWord;
}
public void setPassWord(String passWord) {
	this.passWord = passWord;
}

}

再新建一个控制层
public class MyAction extends ActionSupport{
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}//拦截器Params通过该方法,把网页穿过来的参数给action类里的属性赋值
	
	public String list() throws Exception {
     	 System.out.println("list===>"+user.getId()+"==>"+user.getUserName()+"==>"+user.getPassWord());
       如果能在控制台输出该参数,代表获取成功
	 return "list";
	}
为了简化操作,就不建立表单了,原谅我懒,直接在地址栏输入参数
http://localhost:8080/struts/MyAction_list?user.id=1&user.userName=abc&user.passWord=abc
重启服务器控制台输出,说明获取成功

但是这里地址栏输入的是对象.id,而我们在开发中没有这种习惯传递参数,但是如果不写 对象.会出现空指针错误.所以还有一种获取的方法
public class MyAction extends ActionSupport implements ModelDriven<User>{
	private User user =new User();
	public String list() throws Exception {
     	System.out.println("list===>"+user.getId()+"==>"+user.getUserName()+"==>"+user.getPassWord());
		return "list";
	}
	@Override
	public User getModel() {
		return user;
	}

}
http://localhost:8080/struts/MyAction_list?id=1&userName=abc&passWord=abc
重启服务器控制台输出,说明获取成功
(2)传递结果
在开发中如何将查询出来的结果返回给jsp呢?
接下来我就讲一种常用的,代码如下
public class MyAction  {
	private Map<String, Object> requestMap=(Map<String, Object>) ActionContext.getContext().get("request");
	private Map<String ,Object> sessionMap=ActionContext.getContext().getSession();
	private Map<String,Object> applicationMap=ActionContext.getContext().getApplication();
	
	public String list() throws Exception {
		requestMap.put("r", "requestMap的内容");
		sessionMap.put("s","sessionMap的内容");
		applicationMap.put("a", "applicationMap的内容");
		return "list";
	}

}
结果为

这三种存储的方式的区别是:

application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
request:请求作用域,就是客户端的一次请求。

补充:也可以实现以下三个接口来实现赋值
public class MyAction1 implements ApplicationAware,RequestAware,SessionAware{

	
	private  Map<String, Object> application;
	@Override
	public void setApplication(Map<String, Object> arg0) {
         application=arg0;
		
	}
	@Override
	public void setSession(Map<String, Object> arg0) {
		application=arg0;
		
	}
	
	@Override
	public void setRequest(Map<String, Object> arg0) {
		// TODO Auto-generated method stub
		
	}
	public String list() throws Exception {
		application.put("r", "requestMap的内容123");
		return "list";
	}

}
如果你多个方法需要用到这个map,则建议用实现接口的方法

小知识:
 Map<String ,Object> sessionMap=ActionContext.getContext().getSession();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值