SSH框架--struts2浅析《二》之配置文件

一、struts2配置文件解析

struts2配置文件共以下几个:

a、default.properties:在struts2的核心包中,程序员只能看;

b、struts-default.xml:在struts2的核心包中,程序员只能看;

c、struts-plugin.xml:在插件jar包中,程序员只能看;

d、struts.xml:在构建路径顶端,程序员自己定义的struts配置文件(推荐)

f、struts.properties:在构建路径顶端,程序员自己定义的struts配置文件(不推荐)

g、web.xml:配置过滤器时,指定参数。程序员可以编写(不推荐)

注:前三个都是struts2框架提供的配置信息,是不可以改动的,并且默认使用到,但是根据以上顺序,下边的配置文件可以把上边配置文件的相同配置信息覆盖掉

大家可以根据struts.action.extension = action,,来进行测试

如果想要在struts.xml配置文件中覆盖默认配置可以用constant标签

<constant name="struts.action.extension" value="do"></constant>

二、struts2配置文件

1、package元素

意义:分模块开发

   属性:

name:必须的,配置文件中要唯一

extends:指定父包,会把父包中配置内容继承下来。一般需要直接或者间接继承一个叫做“struts-default”的包(该包位于struts-default.xml文件中)。如果不继承该包,struts2的核心功能将不能使用。

abstract:是否为抽象包,没有任何action子元素的包可以声明为抽象包。

namespace:指定名称空间。一般以“/”开头。访问路径为“名称空间+动作名”

注:说到namespace,他有一个相对重要的原则:

2、action元素

作用:定义一个动作

属性:

name:必须的。动作名称,要和用户发出的请求的动作一致,包中唯一

class:指定动作类的全名称。框架会根据反射机制实例化。

默认为:com.opensymphony.xwork2.ActionSupport

method:指定动作类中的动作方法。框架会执行该方法。默认是execute()

注:之所以默认类为com.opensymphony.xwork2.ActionSupport,是因为在struts-default.xml文件中有如下配置:

<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
根据上边所讲的配置信息覆盖,我们可以在自己定义的配置文件中覆盖它

<default-class-ref class="com.struts.action.HelloWorldAction" />
三、动作类

1、pojo(plain old Java object)

public class HelloWorldAction {	
	public String sayHello(){
		System.out.println("动作方法执行了");
		return "success";
	}
}
2、实现 com.opensymphony.xwork2.Action接口

public class HelloWorldAction1 implements Action {
	public String execute() throws Exception {
		
		return null;
	}
}
打开action底层源码可知,他提供了几个常量:

public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
success:一切正常;

none:动作方法执行完成后不返回任何视图;类似于return null;

error:动作方法遇到异常时可以跳转到错误试图;

input:验证、转换失败,转向输入页面;

login:检测用户是否登录,没有登录转向登录界面;

3、继承com.opensymphony.xwork2.ActionSupport(推荐)

意义:提供了一些基本功能,比如:验证、国际化详细提示

public class HelloWorldAction2 extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
}
看源码可以发现ActionSupport实现action接口,也就意味着可以使用接口中的常量

四、动作类中获取ServletAPI

1、推荐,简单

public class HelloWorldAction2 extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public String execute(){
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		ServletContext application = ServletActionContext.getServletContext();
		System.out.println(request);
		System.out.println(response);
		System.out.println(application);
		return null;
	}	
}
2、复杂,好用
public class HelloWorldAction3 extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private HttpServletRequest request;
	private HttpServletResponse response;
	private ServletContext application;

	@Override
	public void setServletContext(ServletContext application) {
		// TODO Auto-generated method stub
		this.application = application;
	}

	@Override
	public void setServletResponse(HttpServletResponse response) {
		// TODO Auto-generated method stub
		this.response = response;
	}

	@Override
	public void setServletRequest(HttpServletRequest request) {
		// TODO Auto-generated method stub
		this.request = request;
	}
	
	public String execute(){
		System.out.println(request);
		System.out.println(response);
		System.out.println(application);
		return null;
	}
	
	
}
注:有依赖注入的思想,拦截器(servletConfig)给我们注入这些实例,后期讲到spring时会细说DI(依赖注入)。

===================================================================================

尽人事,听天命。我相信只有那些疯狂到自以为能改变世界的人才会真正改变世界。
坚持别人不能坚持的坚持,终将收获别人不能收获的收获。这就是我,一个纯粹想靠技术改变命运的人。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值