Struts2中Action访问ServletAPI

Web应用中通常需要访问的ServletAPI就是HttpServletRequest,HttpSession,ServletContext,这三个类分别代表jsp内置对象中的request,session, application。Struts2提供了一个ActionContext类,action可以通过这个类来访问ServletAPI。

具体看以下例子,实现的是一个网站访问计数器的功能:

1、登录页面:输入用户名、密码后提交

  1. login.jsp:  
  2. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  3. <%@taglib prefix="s" uri="/struts-tags"  %>  
  4.   
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html>  
  7.   <head>  
  8.     <title>My JSP 'index.jsp' starting page</title>  
  9.   </head>  
  10.     
  11.   <body>  
  12.     <s:form action="loginAction">  
  13.         <s:textfield name="username" key="user"></s:textfield>  
  14.         <s:textfield name="password" key="pass"></s:textfield>  
  15.         <s:submit key="login"></s:submit>  
  16.     </s:form>   
  17.   </body>  
  18. </html>  
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"  %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  
  <body>
    <s:form action="loginAction">
    	<s:textfield name="username" key="user"></s:textfield>
    	<s:textfield name="password" key="pass"></s:textfield>
    	<s:submit key="login"></s:submit>
    </s:form> 
  </body>
</html>
2、web.xml配置文件
  1. web.xml:  
  2. <?xml version="1.0" encoding="UTF-8"?>  
  3. <web-app version="2.5"   
  4.     xmlns="http://java.sun.com/xml/ns/javaee"   
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  6.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  7.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  8.   <welcome-file-list>  
  9.     <welcome-file>index.jsp</welcome-file>  
  10.   </welcome-file-list>  
  11.   <!-- 定义struts2的FIlterDispatcher的FIlter -->  
  12.   <filter>  
  13.   <!-- 定义核心filter的名字 -->  
  14.     <filter-name>struts2</filter-name>  
  15.     <!-- 定义核心filter的实现类 -->  
  16.     <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  17.   </filter>  
  18.   <!-- FilterDispatcherY哦你过来初始化Struts2并且处理所有的请求 -->  
  19.   <filter-mapping>  
  20.     <filter-name>struts2</filter-name>  
  21.     <url-pattern>/*</url-pattern>  
  22.   </filter-mapping>  
  23. </web-app>  
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 定义struts2的FIlterDispatcher的FIlter -->
  <filter>
  <!-- 定义核心filter的名字 -->
  	<filter-name>struts2</filter-name>
  	<!-- 定义核心filter的实现类 -->
  	<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <!-- FilterDispatcherY哦你过来初始化Struts2并且处理所有的请求 -->
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
3、Struts.xml配置文件:
  1. Struts.xml  
  2. <?xml version="1.0" encoding="UTF-8"?>  
  3. <!DOCTYPE struts PUBLIC  
  4.           "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  5.           "http://struts.apache.org/dtds/struts-2.0.dtd">  
  6.   
  7. <!-- 指定struts2配置文件的根元素 -->  
  8. <struts>  
  9.     <!-- 指定全局国际化资源文件 -->  
  10.     <constant name="struts.custom.i18n.resources" value="messageResource"></constant>  
  11.     <!-- 指定国际化编码所使用的字符集 -->  
  12.     <constant name="struts.i18n.encoding" value="GBK"></constant>  
  13.     <!-- 所有的action定义都应该放在package内部 -->  
  14.     <package name="struts2" extends="struts-default">  
  15.         <action name="loginAction" class="com.struts2.LoginAction">  
  16.             <!-- 定义3个逻辑视图和物理资源之间的映射 -->  
  17.             <result name="success">/success.jsp</result>  
  18.             <result name="input">/login.jsp</result>  
  19.             <result name="error">/error.jsp</result>  
  20.         </action>  
  21.     </package>  
  22. </struts>  
Struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">

<!-- 指定struts2配置文件的根元素 -->
<struts>
	<!-- 指定全局国际化资源文件 -->
	<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
	<!-- 指定国际化编码所使用的字符集 -->
	<constant name="struts.i18n.encoding" value="GBK"></constant>
	<!-- 所有的action定义都应该放在package内部 -->
	<package name="struts2" extends="struts-default">
		<action name="loginAction" class="com.struts2.LoginAction">
			<!-- 定义3个逻辑视图和物理资源之间的映射 -->
			<result name="success">/success.jsp</result>
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
	</package>
</struts>
4、LoginAction.java类:
  1. public class LoginAction extends ActionSupport{  
  2.     private String username;  
  3.     private String password;  
  4.     private String result;  
  5.       
  6.     public String getUsername() {  
  7.         return username;  
  8.     }  
  9.     public void setUsername(String username) {  
  10.         this.username = username;  
  11.     }  
  12.     public String getPassword() {  
  13.         return password;  
  14.     }  
  15.     public void setPassword(String password) {  
  16.         this.password = password;  
  17.     }  
  18.     public String getResult() {  
  19.         return result;  
  20.     }  
  21.     public void setResult(String result) {  
  22.         this.result = result;  
  23.     }  
  24.     @Override  
  25.     public String execute() throws Exception {  
  26.         ActionContext context = ActionContext.getContext();  
  27.         //通过ActionContext访问application范围内的属性  
  28.         Integer count = (Integer)context.getApplication().get("counter");  
  29.         if(count == null){  
  30.             count = 1;  
  31.         }else {  
  32.             count ++;  
  33.         }  
  34.         //通过ActionContext设置application范围内的属性  
  35.         context.getApplication().put("counter", count);  
  36.         //通过ActionContext设置session范围内的属性  
  37.         context.getSession().put("user", getUsername());  
  38.         if(getUsername().equals("scott") && getPassword().equals("tiger")){  
  39.             //通过ActionContext设置request范围内的属性  
  40.             context.put("tip""服务器提示:您已经成功登陆");  
  41.             this.result = this.getText("succTip"new String[]{this.username});  
  42.             return SUCCESS;  
  43.         }  
  44.         {  
  45.             //通过ActionContext设置request范围内的属性  
  46.             context.put("tip""服务器提示:登陆失败");  
  47.             this.result = this.getText("failTip");  
  48.             return ERROR;  
  49.         }  
  50.     }  
  51. }  
public class LoginAction extends ActionSupport{
	private String username;
	private String password;
	private String result;
	
	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;
	}
	public String getResult() {
		return result;
	}
	public void setResult(String result) {
		this.result = result;
	}
	@Override
	public String execute() throws Exception {
		ActionContext context = ActionContext.getContext();
		//通过ActionContext访问application范围内的属性
		Integer count = (Integer)context.getApplication().get("counter");
		if(count == null){
			count = 1;
		}else {
			count ++;
		}
		//通过ActionContext设置application范围内的属性
		context.getApplication().put("counter", count);
		//通过ActionContext设置session范围内的属性
		context.getSession().put("user", getUsername());
		if(getUsername().equals("scott") && getPassword().equals("tiger")){
			//通过ActionContext设置request范围内的属性
			context.put("tip", "服务器提示:您已经成功登陆");
			this.result = this.getText("succTip", new String[]{this.username});
			return SUCCESS;
		}
		{
			//通过ActionContext设置request范围内的属性
			context.put("tip", "服务器提示:登陆失败");
			this.result = this.getText("failTip");
			return ERROR;
		}
	}
}
5、错误页面:

  1. error.jsp:  
  2. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags"  %>  
  4.   
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html>  
  7.   <head>  
  8.     <title>My JSP 'error.jsp' starting page</title>  
  9.   </head>  
  10.     
  11.   <body>  
  12.    ${sessionScope.user },登陆失败<br/>  
  13.   ${requestScope.tip }<br/>  
  14.     <s:property value="result"></s:property>  
  15.   </body>  
  16. </html>  
error.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"  %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'error.jsp' starting page</title>
  </head>
  
  <body>
   ${sessionScope.user },登陆失败<br/>
  ${requestScope.tip }<br/>
  	<s:property value="result"></s:property>
  </body>
</html>
6、成功登陆页面:

  1. success.jsp:  
  2. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags"  %>  
  4.   
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html>  
  7.   <head>  
  8.     <title>My JSP 'success.jsp' starting page</title>  
  9.   </head>  
  10.     
  11.   <body>  
  12.   本站访问次数为:${applicationScope.counter }<br/>  
  13.   ${sessionScope.user },您已经登陆成功<br/>  
  14.   ${requestScope.tip }<br/>  
  15.     <s:property value="result"></s:property>  
  16.   </body>  
  17. </html> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值