Struts 2 第12part 访问Web元素

2013年2月15日 天气晴

Struts 2 第12part 访问Web元素

实例:/Struts2_AccessWebElements

关于Struts 2访问Web元素这一块,稍微有点迷糊,因为调试程序老是出现一个空指针异常,暂时不知道为什么这样。但为了不阻碍学习的进度,还是稍微写写博客。

部署项目,在浏览器访问效果如下

可以看到,Struts中的Web元素是Map类型,而真实的类型是分别是HttpServletRequest,HttpSession,ServletContext的引用。

随便输入用户名和密码,点击任何一个submit都会跳转不成功。

struts.xml代码如下:

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  5.  
  6. <struts> 
  7.     <constant name="struts.devMode" value="true" /> 
  8.     <package name="login" extends="struts-default" namespace="/login"> 
  9.         <action name="login*" class="com.wwj.struts2.user.action.LoginAction{1}"> 
  10.             <result name="success">/user_login_success.jsp</result> 
  11.         </action> 
  12.     </package> 
  13. </struts> 

还是通过DMI动态来调用方法

user_login_success.jsp代码如下:

  
  
  
  
  1. <?xml version="1.0" encoding="GB18030" ?> 
  2. <%@ page language="java" contentType="text/html; charset=GB18030" 
  3.     pageEncoding="GB18030"%> 
  4.     <%@taglib uri="/struts-tags" prefix="s" %> 
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  6. <html xmlns="http://www.w3.org/1999/xhtml"> 
  7. <head> 
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
  9. <title>Insert title here</title> 
  10. </head> 
  11. <body> 
  12.     User Login Success!  
  13.     <br /> 
  14.     <s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br /> 
  15.     <s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br /> 
  16.     <s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br /> 
  17.     <s:debug></s:debug> 
  18.     <br /> 
  19. </body> 
  20. </html> 

小巫真的找不到出错的地方,但总是报空指针的错误。

不过是否报错,这还是不影响说明问题的,这篇博客要总结的只是Struts2是如何访问Web元素的,还有就是如何把取到的值显示出来。

LoginAction1.java代码如下:

  
  
  
  
  1. package com.wwj.struts2.user.action;  
  2.  
  3. import java.util.Map;  
  4.  
  5. import com.opensymphony.xwork2.ActionContext;  
  6. import com.opensymphony.xwork2.ActionSupport;  
  7.  
  8. public class LoginAction1 extends ActionSupport {  
  9.     private Map request;  
  10.     private Map session;  
  11.     private Map application;  
  12.       
  13.     public LoginAction1() {  
  14.         request = (Map) ActionContext.getContext().get("request");  
  15.         session = ActionContext.getContext().getSession();  
  16.         application = ActionContext.getContext().getApplication();  
  17.     }     
  18.     public String execute() {  
  19.         request.put("r1""r1");  
  20.         session.put("s1""s1");  
  21.         application.put("a1""a1");  
  22.         return SUCCESS;   
  23.     }  
  24. }  

以上代码就是获取Web元素的引用的方法,通过ActionContext这个类,调用getContext()方法,获取到上下文对象,再调用相应的方法来获取到不同的Web元素。这里要说明关于ActionContext,它代表了Action所处的环境,翻译为上下文是不太准确的。

 LoginAction2.java

  
  
  
  
  1. package com.wwj.struts2.user.action;  
  2.  
  3. import java.util.Map;  
  4.  
  5. import org.apache.struts2.interceptor.ApplicationAware;  
  6. import org.apache.struts2.interceptor.RequestAware;  
  7. import org.apache.struts2.interceptor.SessionAware;  
  8.  
  9. import com.opensymphony.xwork2.ActionContext;  
  10. import com.opensymphony.xwork2.ActionSupport;  
  11.  
  12. public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware{  
  13.     private Map<String, Object> request;  
  14.     private Map<String, Object> session;  
  15.     private Map<String, Object> application;  
  16.       
  17.     //DI dependency injection  
  18.     //IoC inverse of control  
  19.     public String execute() {  
  20.         request.put("r1""r1");  
  21.         session.put("s1""s1");  
  22.         application.put("a1""a1");  
  23.         return SUCCESS;   
  24.     }  
  25.  
  26.     public void setApplication(Map<String, Object> application) {  
  27.         // TODO Auto-generated method stub  
  28.         this.application = application;  
  29.     }  
  30.  
  31.     public void setSession(Map<String, Object> session) {  
  32.         // TODO Auto-generated method stub  
  33.         this.session = session;  
  34.     }  
  35.  
  36.     public void setRequest(Map<String, Object> request) {  
  37.         // TODO Auto-generated method stub  
  38.         this.request = request;  
  39.     }  
  40. }  
  41.  
  42.       
  43.       

上面是使用IOC控制反转的方法来访问Web元素

控制反转的意思把原本由自己控制的对象,反过来交给其他对象控制。

LoginAction3.java

  
  
  
  
  1. package com.wwj.struts2.user.action;  
  2.  
  3. import javax.servlet.ServletContext;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpSession;  
  6.  
  7. import org.apache.struts2.ServletActionContext;  
  8.  
  9. import com.opensymphony.xwork2.ActionSupport;  
  10.  
  11. public class LoginAction3 extends ActionSupport {  
  12.     private HttpServletRequest request;  
  13.     private HttpSession session;  
  14.     private ServletContext application;  
  15.       
  16.     public LoginAction3() {  
  17.         request = ServletActionContext.getRequest();  
  18.         session = request.getSession();  
  19.         application = session.getServletContext();  
  20.     }  
  21.       
  22.     public String execute() {  
  23.         request.setAttribute("r1""r1");  
  24.         session.setAttribute("s1""s1");  
  25.         application.setAttribute("a1""a1");  
  26.         return SUCCESS;   
  27.     }  
  28. }  

LoginAction4.java

  
  
  
  
  1. package com.wwj.struts2.user.action;  
  2.  
  3. import javax.servlet.ServletContext;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpSession;  
  6.  
  7. import org.apache.struts2.interceptor.ServletRequestAware;  
  8.  
  9. import com.opensymphony.xwork2.ActionSupport;  
  10.  
  11. public class LoginAction4 extends ActionSupport implements ServletRequestAware{  
  12.     private HttpServletRequest request;  
  13.     private HttpSession session;  
  14.     private ServletContext application;  
  15.       
  16.       
  17.       
  18.     public String execute() {  
  19.         request.setAttribute("r1""r1");  
  20.         session.setAttribute("s1""s1");  
  21.         application.setAttribute("a1""a1");  
  22.         return SUCCESS;   
  23.     }  
  24.  
  25.  
  26.  
  27.     public void setServletRequest(HttpServletRequest request) {  
  28.         // TODO Auto-generated method stub  
  29.         this.request = request;  
  30.         this.session = request.getSession();  
  31.         this.application = session.getServletContext();  
  32.     }  
  33.  
  34.  
  35.  
  36.  
  37. }  

 

你可能感兴趣的:(struts,2)