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位");}}}


然后配置 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>


















































0 0
原创粉丝点击