Struts常量 Struts2 action 定义 配置 操作内置对象

Struts常量: 用于改变struts框架的默认行为(如: 改变编码)可以定义在


在 struts.xml          struts.properties              web.xml   中定义


加载顺序: 从左到右

覆盖顺序:从右到左


1.   在struts.xml 中 通过<constant name=”常量属性名” value=”常量值”/> 配置常量


.properties文件:都是程序中使用的属性文件,在其中一般以键值对形式存储数据,方便修改

2.   在src下创建 struts.properties文件,在其中以属性名=值得形式存储变量struts.i18n.encoding=UTF-8 

 设置struts的编码为UTF-8,默认值就是 utf-8


3.  在web.xml 中通过设置  (一般不用)

<init-param>

      <param-name></param-name>

      <param-value></param-value>

</init-param>

建议:在实际开发中不建议在 web.xml 中配置常量,如果常量较少可以再struts.xml中配置,如果常量较多一般都是选择直接定义在 struts.properties文件方式

包:

    <package name="default" namespace="/"extends="struts-default">

        <default-action-refname="index" />

        <action name="Username" class="test.UsernameAction">

            <result name="success">success.jsp</result>

            <result name="error">error.jsp</result>

        </action>

</package>


Name:必须属性,指明被引用时的名称

Namespace:可选属性

Extends:指定继承默认的包,可选属性

默认包中有结果类型定义,拦截器及其引用


命名空间解决同名的action问题,同一命名空间不能出现相同名的action

namespace="/" 表示默认命名空间                                   命名空间错误会出现异常   


struts2 搜索action 的顺序

1.   找指定命名空间的action

2.   找默认命令空间的action

3.   如果还没有找到,就会抛出异常


 在Struts.xml 中引用其他xml 文件


<include file ="文件地址"> </include> 将其他xml文件的类容引用到 Struts.xml



定义action 有三种方式


1.普通的pojo类,pojo类  一般有一个execute()方法,返回值为String 类型, Struts底层自己会调用,


2.实现action接口


3.继承ActionSupport类


eg:

index.jsp界面   分别把上面三种方法做测试


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>pojo 实现 action</h1>
姓名:<form action="Username.action">
<input type="text" name="username" >
<input type="submit" value="提交">
</form>

<h1>接口实现 action</h1>
姓名:<form action="User.action">
<input type="text" name="username" >
<input type="submit" value="提交">
</form>

<h1>继承实现 action</h1>
姓名:<form action="Extend.action">
<input type="text" name="username" >
<input type="submit" value="提交">
</form>

<a href="Method!add.action?username=zhangsan">测试add</a>
<a href="Method!show.action?username=lisi">测试show</a>

</body>
</html>
编写java action 类

1.pojo 类

public class UsernameAction {

	private String username;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String execute(){
		if("zhangsan".equals(username)){
			return "success";
		}else{
			return "error";
		}
	}
}

2.实现action接口的类

public class UserAction implements Action {
	private String username;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	@Override
	public String execute() throws Exception {
		if("zhangsan".equals(username)){
			return "success";
		}else{
			return "error";
		}
	}
}

3.继承方式 (extends ActionSupport)

public class ExtendAction extends ActionSupport {
	private String username; 
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}

	@Override
	public String execute() throws Exception {
		if("zhangsan".equals(username)){
			return "success";
		}else{
			return "error";
		}
	}
	
	@Override
	public void validate() {
		if(username.length() < 6){
			this.addFieldError("name", "用户名小于6位");
		}
	}
}


然后配置 Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!--说明目前处于开发阶段,目前可以进行调试  -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	<!-- 运行使用动态命令 -->
	<constant name="struts.devMode" value="true" />
	<package name="default" namespace="/" extends="struts-default">

		<default-action-ref name="index" />
		<action name="Username" class="test.UsernameAction">
			<result name="success">success.jsp</result>
			<result name="error">error.jsp</result>
		</action>
		<action name="User" class="test.UserAction">
			<result name="success">success.jsp</result>
			<result name="error">error.jsp</result>
		</action>
		<action name="Extend" class="test.ExtendAction">
			<!-- 配置execute() 返回字符串与对应视图的关系 -->
			<result name="success" >success.jsp</result>
			<result name="error">error.jsp</result>
				<!-- addFieldError() 方法 底层会返回input 这个字符串-->
			<result name="input">no.jsp</result>
		</action>
	</package>

	<include file="example.xml" />

	<!-- Add packages here -->
</struts>
注: 这里的success.jsp  和 error.jsp  是测试用的   没有给来, 随意写点东西就可以了


在action 中获取servletAPI(内置对象)

1.通过ActionContext 获取

		ActionContext context = ActionContext.getContext();
		Map<String,Object> map =  context.getSession();
		map.get("msg"); //获取session当中的值
		map.put("name", "用户名长度大于4"); //设置session的属性   属性名为  name

相当于原来的
		HttpServletRequest request = null;
		HttpSession session = request.getSession();
		session.getAttribute("name"); //获取session当中的值

2.通过实现接口

实现ServletContextAware接口, 可以访问servletContext

实现ServletResponseAware接口,  可以访问HttpServletResponse

实现ServletRequestAware接口,可以访问HttpServletRequest


//使用方式:
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request){
	this.request=request;
}
//在实现接口后创建对应类型变量,重写的接口方法中给变量赋值。然后就可操作内置对象。
HttpSession session = request.getSession();
session.setAttribute(“msg”,”hello world”);

3.通过使用 ServletActionContext 类获取: 

ServletActionContext.getRequest().getSession()获取session ,该类为工具类提供多个static函数

		HttpSession session =  ServletActionContext.getRequest().getSession();	

		session.setAttribute(username, "asd");

		session.getAttribute(username);


最后一点:Action的配置


1.普通的请求配置  :  自定义名称.action



简答步骤

1).   在jsp中请求 <a href = “Method!add.action?name=zhangsan”></a>

2).   在处理Action请求的类中定义  String add()

 

public String add(){

      //其他逻辑代码

return  “addrs”;

}

3).   在Struts.xml 中配置action

<action name="method"class="test.MethodAction">

       <result name="addrs">/add.jsp</result>

</action>


2.动态函数请求   :    自定义名称.函数名.action


在action配置中使用method属性

public String add(){

      if(){

           return"rs1";

}else{

return "rs2";

}

}

<action name="method"class="test.MethodAction" method="add">
       <result name="rs1">/add1.jsp</result>
              <resultname="rs2">/add2.jsp</result>   //测试的jsp  不用管
</action>
<action name="method"class="test.MethodAction" method="show">
       <resultname="showrs">/show.jsp</result>
</action>


使用通配符*

*代表一个或多个任意字符串,在有了通配符后可以再定义Action的name时使用name=“*自定义名称”,然后在定义method时使用method=“{数字}”,数字表示前面的第几个*所代表的字符串。

 

eg:

<a href="add_Method!add.action?name=zhangsanAdd">添加</a>
<a href="show_Method!show.action?name=lisiShow">展示</a>   //页面代码
 ---------------------------  分割线
<action name="*_*"class="test.{2}Action" method="{1}">  //Struts.xml代码
       <resultname="addrs">/add.jsp</result>
       <result name="showrs">/show.jsp</result>
</action>


















































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值