1、访问servelt API:
在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request。而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得HttpServletResponse或HttpServletRequest对象了。
但在Struts2 Action类中仍然有很多方法可以获得这些对象。下面就列出四种获得这些对象的方法。
【方法1】使用Struts2 Aware拦截器 :
package action;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import org.apache.struts2.interceptor.*;
public class MyAction extends ActionSupport implements ServletResponseAware
{
private javax.servlet.http.HttpServletResponse response;
// 获得HttpServletResponse对象
public void setServletResponse(HttpServletResponse response)
{
this.response = response;
}
public String execute() throws Exception
{
response.getWriter().write("实现ServletResponseAware接口");
}
}
【方法2】使用RequestAware拦截器
package action;
import java.util.Map;
import org.apache.struts2.*;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import com.opensymphony.xwork2.util.*;
import org.apache.struts2.interceptor.*;
public class FirstAction extends ActionSupport implements RequestAware
{
private Map request;
private HttpServletResponse response;
public void setRequest(Map request)
{
this.request = request;
}
public String execute() throws Exception
{
java.util.Set<String> keys = request.keySet();
// 枚举所有的key值。实际上只有一个key:struts.valueStack
for(String key: keys)
System.out.println(key);
// 获得OgnlValueStack 对象
OgnlValueStack stack = (OgnlValueStack)request.get("struts.valueStack");
// 获得HttpServletResponse对象
response = (HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE);
response.getWriter().write("实现RequestAware 接口");
}
}
方法3】使用ActionContext类
HttpServletResponse response = (HttpServletResponse)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
HttpServletRequest request = (HttpServletRequest)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
【方法4】使用ServletActionContext类
Struts2为我们提供了一种最简单的方法获得HttpServletResponse及其他对象。这就是org.apache.struts2.ServletActionContext类。我们可以直接使用ServletActionContext类的getRequest、getResponse方法来获得HttpServletRequest、HttpServletResponse对象。代码如下:
HttpServletResponse response = ServletActionContext.getResponse()
response.getWriter().write("hello world");
1、ActionContext获取request,session,值栈。将对象压人栈顶:获取值栈,push。<s:属性>:是OGNL,获取栈顶的对象。
2、<result type="json" name="users">
<param name="root">names</param>
</result>
3、(1)、 request.setAttribute("s004po", s004po);
主题:${s004po.ma002}<br>
内容:${s004po.ma003}
(2)、List<Map<String, Object>> replyList
request.setAttribute("replyList", replyList);
<s:iterator value="#request.replyList" id="column">
<s:iterator value="#column" id="map">
key: <s:property value="#map.key"/>
value: <s:property value="#map.value"/> <br>
</s:iterator>
</s:iterator>
4、hidden标签中的value我在js脚本中取得hidden中value时为什么得到的是<s:property value="#session.LOGIN_USER"/>,我用<s:textfield value="<s:property value='#session.LOGIN_USER'/>"/>测试时在文本框中的显示也是<s:property value="#session.LOGIN_USER"/>,求教…………
解答:
<s:hidden>标签的value属性的类型是String类型,所以把<s:property value="#session.LOGIN_USER"/>当成是字符串,如果要获取值栈中的数据要用
<s:hidden name="loginUser" id="loginUser" value="%{#session.LOGIN_USER}"/>
http://lj6684.iteye.com/blog/1002279
Struts2文件上传原理及示例
http://blog.sina.com.cn/s/blog_87720b870100zkn2.html
struts2上传文件问题汇总
http://jingyan.baidu.com/article/acf728fd1222d8f8e510a38e.html
http://localhost:8080/YunVideo/pda/pdaLogin
http://localhost:8080/YunVideo/pda/pdaRegister
<action name="pda*" class="com.hw.hwsafe.pda.action.PdaUserAction" method="pda{1}">
<result type="json"></result>
</action>
public void pdaRegister() throws Exception {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = null;
out = response.getWriter();
out.write("注册");
out.flush();
out.close();
}
public void pdaLogin() throws Exception {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = null;
out = response.getWriter();
out.write("登录");
out.flush();
out.close();
}