Struts常量 Struts2 action 定义 配置 操作内置对象
来源:互联网 发布:希区柯克剧场 知乎 编辑:程序博客网 时间:2024/05/01 04:12
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文件方式
包:
<packagename="default"namespace="/"extends="struts-default">
<default-action-refname="index"/>
<actionname="Username"class="test.UsernameAction">
<resultname="success">success.jsp</result>
<resultname="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;}@Overridepublic 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;}@Overridepublic String execute() throws Exception {if("zhangsan".equals(username)){return "success";}else{return "error";}}@Overridepublic void validate() {if(username.length() < 6){this.addFieldError("name", "用户名小于6位");}}}
<?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>
在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>
- Struts常量 Struts2 action 定义 配置 操作内置对象
- Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】
- Struts2学习笔记之struts.xml配置常量和Action处理流程
- Struts2学习笔记之struts.xml配置常量和Action处理流程
- struts2的action使用内置对象
- 如何在Struts2的Action中操作servletAPI(内置对象)
- struts2 struts.xml常用常量配置
- struts2的struts.xml常量配置
- Struts2 在struts.xml配置Action
- Struts2 Action与超链接 struts.xml配置
- Struts2-action在struts.xml中的配置
- Struts2的配置 struts.xml Action详解
- 5.struts.xml配置常量和Action处理流程
- 在Struts2的Action中访问Servlet内置对象
- Struts2中的Action获取JSP常用内置对象
- struts.xml配置及Action操作
- Struts2笔记05 action操作域对象
- 【Struts2】⑤常量定义
- 开始学习java和oracle
- [故障公告]博客站点遭遇超过20G的流量攻击被阿里云屏蔽
- 设计模式之单例模式
- ActiveMQ---遇到的args输入问题
- 《剑指offer》—11、二进制中1的个数
- Struts常量 Struts2 action 定义 配置 操作内置对象
- Python实现通讯录(1)
- qmake生成vs的vcproj/sln工程
- linux Nginx 安装
- Git常用命令快速一览
- 公共网络开放的WebService接口
- JS动态添加option和删除option
- postgresql dblink使用
- android rxjava的简单使用