您的位置:首页 > 编程语言 > Java开发

struts2之Action获取请求参数与web元素(四)

2013-03-21 16:23 429 查看
这一篇主要给大家讲两个问题:

1,Action如何获取请求参数

2,Action如何获取web元素

好的,先介绍Action获取请求参数的三种方法:

1、Action组件基本类型属性的自动填充

2、Action组件复杂类型属性的自动填充

3、基于模型驱动的自动填充

 

 下面还是像往常一样,以图和代码的形式讲解:

第一种:Action组件基本类型属性的自动填充

index.jsp

<form action="demo/demo1" method="post">

<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="提交">
</form>


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.i18n.encoding" value="UTF-8"></constant>
<package name="default" namespace="/demo"  extends="struts-default" >
<action name="demo1" class="action.demo1">
<result name="success">/demo1.jsp</result>
</action>
<action name="demo2" class="action.demo2">
<result name="success">/demo2.jsp</result>
</action>
<action name="demo3" class="action.demo3">
<result name="success">/demo3.jsp</result>
</action>
</package>

</struts>


demo1.java

package action;

import com.opensymphony.xwork2.ActionSupport;

////////获取参数Action参数的第一种方法:基本数据类型的自动填充

public class demo1 extends ActionSupport {

private String name,password;//变量名可以与form表单中的name一致,也可以不一致,但是set与get方法后的变量必须与form表单中的保持一致

public String execute() throws Exception {

this.name="demo1获取参数Action参数的第一种方法:基本数据类型的自动填充";

return super.execute();
}

public String getUsername() {
return name;
}

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

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}


demo1.jsp

<body>
${username}
</body>


第二种:Action组件复杂类型属性的自动填充

demo2.java

package action;

import bean.User;
//////////获取参数Action参数的第二种方法:复杂数据类型的自动填充
import com.opensymphony.xwork2.ActionSupport;

public class demo2 extends ActionSupport {

private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String execute() throws Exception {

return super.execute();
}

}


User.java

package bean;

public class User {

private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


demo2.jsp

${user.username}


index.jsp

<form action="demo/demo2" method="post">

<input type="text" name="user.username">
<input type="password" name="user.password">
<input type="submit" value="提交">
</form>

</body>


第三种:基于模型驱动的自动填充

demo3.java

package action;

import bean.User;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
//////基于模型驱动的自动填充
public class demo3 extends ActionSupport implements ModelDriven{
private User user=new User();
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}
public Object getModel() {
// TODO Auto-generated method stub
return user;
}

}


index.jsp

<form action="demo/demo3" method="post">

<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="提交">
</form>


 demo3.jsp

${username}


 以上就是三种方法,大家很容易就可以看到他们之间的区别~~~

以下是项目的文件结构:



接下来,介绍一下Action如何获取web元素,如:session,request,response等

 strust2获取web元素的方法有四种:

1.依赖于容器(ActionContext)获取Map类型的Web元素

2.依赖于容器(ServletActionContext)获取真实类型的Web元素

3.依赖于Struts2框架注入(IoC-控制反转)获取Map类型的Web元素(只用这种方法)

4.依赖于Struts2框架注入(IoC-控制反转)获取真实类型的Web元素(不讲,自学)

第一种方法:依赖于容器(ActionContext)获取Map类型的Web元素

 【ActionContext】是Action执行的上下文,提供一系列相关方法用于访问保存在HttpServletRequest、HttpSession、ServletContext中的信息,并将其存储在Map中。

【ActionContext对象获取】 通过ActionConext类的静态方法getContext()

【ActionContext常用方法】

public Object get(String key):获取ActionContext中指定键名的元素对象

public Map<String, Object> getSession():获取session元素对象

public Map<String, Object> getApplication():获取application元素对象

【Map常用方法】

public void put(String key,Object value):向Map对象中添加一个具有键名标识的元素

public Object get(Object key):从Map对象中获取指定的元素

 

 在Action中获取Web元素的方法】

 1.获取ActionContext对象

 ActionContext ac= ActionContext.getContext(); 

 2.通过ActionContext对象获取Map类型的Web元素

 Map<String,Object> s=ac.getSession();

 或: Map<String,Object> s=( Map<String,Object> )ac.get ("session");

 3.使用Map对象的put/get方法添加/获取属性

 s.put("username","lucky");

【JSP中获取Web元素属性方法】 

 1.通过JSP脚本元素

 <%=session.getAttribute("username")%>

 2.通过Struts2框架标签和OGNL表达式

 <s:property value="#session.username"/>

 

demo1.java

ActionContext ac=ActionContext.getContext();
//////ac已经算是获得了request
ac.put("sse", "request获取一");

Map<String,Object> sse=ac.getSession();

sse.put("sse", "session获取一");

Map<String,Object> app=ac.getApplication();

app.put("sse", "applaction获取一");

demo1.jsp中获取元素之代码

<%=" session内容为:"+session.getAttribute("sse")%><br>
<%=" aplication内容为:"+application.getAttribute("sse")%><br>
<%=" request内容为:"+request.getAttribute("sse")%><br>

第二种方法:依赖于容器(ServletActionContext)获取真实类型的Web元素

【问题】 通过ActionContext获取的Web元素是Map形式的,这对于习惯了Servlet编程的开发人员可能不太习惯

【解决方法】Struts2框架中可以通过ServletActionContext类 获取 ServletAPI对象

【ServletActionContext的常用方法】 

 public static HttpServletRequest  getRequest():获取请求对象

 public static ServletContext  getServletContext():获取应用程序对象

【思考】

  获取HttpSession的方法?

【基本思路】

  1、在Action中使用真实类型的Web元素,即通过ServletActionContext获取HttpServletRequest、HttpSession、ServletContext类型的Web元素。

  2、在视图中输出Web元素属性的方法不变。

demo2.java

HttpServletRequest request;
HttpSession session;
ServletContext application;
request=ServletActionContext.getRequest();
session=request.getSession();
application=ServletActionContext.getServletContext();

request.setAttribute("sse", "request获取二");
session.setAttribute("sse", "session获取二");
application.setAttribute("sse", "application获取二");

demo2.jsp和demo1.jsp一样

第三种方法:依赖于Struts2框架注入(IoC-控制反转)获取Map类型的Web元素(只用这种方法)

相关概念】

 DI:Dependency Injection—依赖注入

 IoC:Inversion of Control—控制反转

  两个概念表达相同的思想,即:

     当我们想得到某个对象时,不需要我们主动创建这个对象,或主动去获取这个对象,而是等待系统把这个对象自动交给我们,我们只是被动接受。(网购模式)

     我们需要的对象我们不去主动创建,而让系统自动填充的,叫依赖注入;本来是我们控制去获取这个对象,结果控制权交给了系统,我们被动接受,叫控制反转。

【依赖注入的相关接口】

  Action中通过实现相关接口,Web元素即可由框架自动注入,这组接口以Aware(知道,明白)结尾

  RequestAware:Map类型的request元素

  ServletRequestAware:HttpServletRequest类型

  ServletResponseAware:HttpServletResponse类型

  SessionAware:Map类型的session元素

  ApplicationAware:Map类型的application元素

  CookiesAware:Map类型的Cookie元素

【依赖注入的Web元素获取方法】

 1.创建Action时实现Web元素相关接口

 2.在Action中声明Map类型的私有变量

 3.在Aware接口的实现方法中为变量赋值

【基本思路】

  1、创建Action实现RequestAware、SessionAware、ApplicationAware三个接口,声明三个Map类型的私有变量,三个接口的实现方法分别对三个变量赋值,从页获取Web元素。

  2、在视图中输出Web元素属性的方法不变。

demo3.java

public class demo1 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {

private String name,password;//变量名可以与form表单中的name一致,也可以不一致,但是set与get方法后的变量必须与form表单中的保持一致

Map<String,Object> request;
Map<String,Object> session;
Map<String,Object> application;

public String execute() throws Exception {

this.name="demo1获取参数Action参数的第一种方法:基本数据类型的自动填充";

request.put("sse", "request获取三");
session.put("sse", "session获取三");
application.put("sse", "application获三");

return super.execute();
}

public String getUsername() {
return name;
}

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

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public void setRequest(Map<String, Object> request) {

this.request=request;

}

public void setApplication(Map<String, Object> application) {
this.application=application;

}

public void setSession(Map<String, Object> session) {
this.session=session;

}

}


demo3.jsp如同demo1.jsp

好了,到此就结束了~~~

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts
相关文章推荐