SSH框架学习笔记--Struts2的核心配置

配置struts.xml文件

struts.xml是Struts2框架的核心配置文件,主要用来配置Action和请求的对应关系,以及配置逻辑视图和物理视图资源的对应关系
<struts>是根元素
<constant>用于常量配置
<package>用于包配置,包用来组织Action和拦截器等,每个包都是零个及以上个拦截器以及Action所组成的集合
<include>用于在一个struts.xml配置文件中包含其他配置文件

<!--设置默认编码集为UTF-8-->
	<constanst name="struts.il8n.encoding" value="UTF-8" />
	<!--设置使用开发者模式-->
	<constanst name="struts.devMode" value="true" />

常量配置

Struts2常量配置通常采用三种方式
*在struts.xml文件中使用<constant>元素来配置常量

	<!--设置默认编码集为UTF-8-->
	<constant name="struts.il8n.encoding" value="UTF-8"/>
	<!--设置使用开发模式-->
	<constant name="struts.devMode" value="true"/>
	<!--name属性指定常量名,value实行指定常量值,两者都是必填属性-->

*在struts.properties中配置常量(key-value形式)
.properties中能配置的常量都可以在struts.xml中使用constant元素来配置

###设置action请求的扩展名为action或者没有扩展名
struts.action.extension=action,,
###设置不开启动态方法调用
struts.enable.DynamicMethodInvocation=false

*在web.xml文件中通过<inti-param>元素配置常量
在web.xml中配置核心过滤器StrutsPrepareAndExecuteFilter时,通过初始化参数来配置常量

<filter>
...
<init-param>
<param-name>struts.il8n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

包配置

Struts框架使用包来管理核心组件–Acion和拦截器,每个包就是多个Action,多个拦截器,多个拦截器引用的集合。
name 必填属性,它指定该包的名字,此名字是该包被其他包引用的key。
namespace 可选属性,定义包的命名空间,默认为空,“/”
extends 可选属性,它指定该包继承自其他包。一般都写上,内容为 “struts-default”。这样该包就中的Action就具有了Strurs框架默认的拦截器功能。
abstract 可选属性,它指定该包是否是一个抽象,抽象包中不能包含Action定义

包含配置
<include>元素用来在一个struts.xml配置文件中包含其他配置文件,包含配置体现的是软件工程中的分而治之的原则

<struts>
	<!--包含了4个配置文件-->
	<!--不指定路径,默认在src下的方式-->
	<include file="struts-shop.xml"/>
	<include file="struts-user.xml"/>
	<include file="struts-shoppingcart.xml"/>
	<!--配置文件在具体包中时的方式->
	<include file="cn/itcast/action/struts-product.xml"/>
</struts>

Action的配置

实现action控制类
Action作为框架的核心类,实现对用户请求的处理,Action类被称为业务逻辑控制器。Action用来处理一次用户请求的对象
POJO的实现
在Struts2中,Action可以不继承特殊的类或者实现任何特殊结构,仅仅是一个POJO(Plain Ordinary Java Object)—具有一部分getter/setter方法,一般要有一个公共的无参构造方法和一个execute()方法
public Sting execute() thorws Exception{ return “success” }
实现Action接口
Action接口具体代码

package com.opensymphony.xwork2;
public interface Aciton{
	//定义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";
	//定义用户请求的execute()方法
	public String execute() thorws Exception;
}

继承ActionSupport类
由于Action接口简单,帮助太小所以通常都是继承ActionSupport类。

import com.opensymphony.xwork2.ActionSupport;
publi class LoginAction extends ActionSupport{
	@override
	public String execute() thorws Exception{
		return super.execute();
	}
}

ActionSupport类还实现了Validateable、ValidationAware、TextProvider、LocaleProvider和Serializable(因为继承该接口的类都必须声明变量private static final long serialVersionUID=1L;)等接口

配置Aciton

<!-- 定义action,该action对应的类为cn.itcast.action.UserAction类 -->
<action name="userAction" class="cn.itcast.action.UserAction">
	<!-- 定义处理结果和视图资源之间的映射关系 -->
	<result name="success">/success.jsp</result>
</action>

使用通配符

<package name="user" namespace="/user" extends="struts-default">
	<action name="userAction_*" 
	class="cn.itcast.action.UserAction" method="{1}">//匹配第一个星花
	<result>/*.jsp</result>//假如客户端发送/user/userAction_login.action请求时,<action>会变成userAction_login,method属性会设置成login,同样也会跳转到login.jsp
</action>
</package>

Action访问Servlet API

通过ActionContext类访问
ActionContext是Action执行的上下文对象,其中保存了Action执行所需要的所有对象,包括parameters,request,session,application等。推荐使用此方式。

ActionContext context=ActionContext.getContext();
context.put("name","itcast");//在request中放kv对
context.getApplication().put("name","itcast");//在Application中放kv对
context.getSession().put("name","itcast");//在Session中放kv对

通过特定接口访问
ActionContext可以访问但是无法直接获得Servlet API实例。
ServletRequestAware:实现该接口的Action可以直接访问Web应用的HttpServletRequest实例
ServletResponseAware:实现该接口的Action可以直接访问Web应用的HttpServletResponse实例
SessionAware:实现该接口的Action可以直接访问Web应用的HttpSession实例
ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例

AwareAction.java
public class AwareAction extends ActionSupport implements ServletRequestAware{
	HttpServletRequest request;
	//获得HttpServletRequest实例
	@override
	public void setServletRequest(HttpServletRequest request){
		this.request=request;
	}
	@override
	public String execute() throws Exception{
		request.setAttribute("message","通过ServletRequestAware接口实现了访问Servlet API");
		return SUCCESS;
	}
}

AwareAction类必须实现setServletRequest方法(得到HTTPServletRequest实例)跟execute方法,页面访问:${requestScope.message}
通过ServletActionContext访问
直接访问Servlet API
static HttpServletRequest getRequest():获取Web应用的HttpServletRequest对象
static HttpServletResponse getResponse():获取Web应用的HttpServletResponse对象
static ServletContext getServletContext():获取Web应用的ServletContext对象
static PageContext getPageContext():获取Web应用的PageContext对象

MessageAction.java
public class MessageAction extends ActionSupport{
	@override
	public String execute() throws Exception{
		ServeltActionContext.getRequest().setAttribute("message","通过ServletActionContext类直接访问Servlet API");
		return SUCCESS;
	}
}

Action处理请求参数

属性驱动
属性驱动是指通过字段进行数据传递,包括两种情况:
基本数据类型字段驱动方式的数据传递

public class UserAction{
	private String username;//需要对应登录页面的用户名
	private String password;
	//getter,setter省略
	execute();//execute方法省略
}

直接作用域对象字段驱动方式的数据传递
把属性和对应的getter/setter方法从Action提取出来,单独作为一个域对象,用来封装这些数据。
采用这种方式一般以JavaBean来实现,所封装的属性和表单的属性一一对应,JavaBean将成为数据传递的载体

public class User{
	private String username
	//省略getter setter
}

UserLoginAction.java
public class UserLoginAction extends ActionSupport{
	private User user;
	//省略user属性的getter/setter
	public String execute() throws Exception{
		ActionContext context=ActionContext.getContext();
		if("itcast".equals(user.getUsername())&&"123"..equals(user.getPassword()){
			//将用户名和密码放到session中
			context,getSession().put("username",user.getUsername());
		}
		return SUCCESS;
	}
}
userLogin.jsp
<form name="form1" action="userlogin.action" method="post">
<input type="text" name="user.username">
</form>

使用域对象的属性驱动方式传值时,如果JSP页面时负责取值的,那么取值格式必须为“对象.属性名”
如果JSP页面时负责传值的,那么传值的格式可以为“模型对象名.属性名”,也可以为“属性名”

模型驱动
通过实现ModelDriven接口来接受请求参数,Action类必须实现ModelDriven接口,并且重写getModel(),返回Action所使用的数据模型对象
模型驱动方式通过JavaBean模型进行数据传递,封装的属性与表单的属性一一对应

public class UserLoginAction extends ActionSupport implements ModelDriven<User>{
	private User user=new User();
	public User getModel(){
		return user;
	}
	public String executer() throws Exception{
		return SUCCESS;
	}
}

userLogin.jsp
<input type="text" name="username">//使用ModelDriver的方式,一个Action只能对应一个Model。因此不需要添加前缀。

Result结果类型

使用来配置Result逻辑视图与物理视图之间的映射
name属性,可选,逻辑视图的名称,默认为success
type属性,可选,返回的视图资源类型,默认为dispatcher

<result name="success" type="dispatcher">
	<param name="location">/success,jsp</param>//parse属性指定在资源视图名称中是否可以使用OGNL表达式。默认为true
</result>
绝对路径要以斜杠开头,相当于Web应用程序的上下文路径
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值