版本:struts2.1.6

此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面。

代码如下:

一、页面

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>yuewei'Login</title>
<!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
-->
</head> <body>
<form action="login.action" method="post">
User:<input type="text" name="username"><br>
Passoword:<input type="password" name="password"><br>
<input type="submit" value="submit">
</form> </body>
</html>

welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title> yuewei's Welcome</title> <!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
--> </head> <body>
<h1>登录成功后显示此页面</h1>
<a href="show.action" mce_href="show.action">show</a>
</body>
</html>

show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>yuewei's Show</title> <!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
--> </head> <body>
Show This Page
登录后执行此页面<br>
</body>
</html>

二、Action

LoginFormAction

package com.ywjava.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginFormAction extends ActionSupport {
public String exexcute() {
return "success";
}
}

LoginAction

package com.ywjava.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.ywjava.utils.Constants; public class LoginAction extends ActionSupport{
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
} private boolean isInvalid(String value) {
return (value == null || value.length() == );
}
public String execute(){
System.out.println(username);
System.out.println(password); if (isInvalid(getUsername()))
return INPUT; if (isInvalid(getPassword()))
return INPUT; if(this.getUsername().equals("yuewei")&& this.getPassword().equals("yuewei")){
ActionContext.getContext().getSession().put(Constants.USER_SESSION,getUsername());
ActionContext.getContext().getSession().put(Constants.PASS,getPassword());
return "success";
}
return "error";
}
}

ShowAction

package com.ywjava.action;

import com.opensymphony.xwork2.ActionSupport;

public class ShowAction extends ActionSupport {
public String execute() {
return "success";
}
}

三、拦截器

package com.ywjava.interceptot;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.ywjava.utils.Constants; public class LoginInterceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation invocation) throws Exception { // 取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
String user = (String) session.get(Constants.USER_SESSION); // 如果没有登陆,或者登陆所有的用户名不是yuewei,都返回重新登陆 if (user != null && user.equals("yuewei")) {
System.out.println("test");
return invocation.invoke();
} ctx.put("tip", "你还没有登录");
return Action.LOGIN; } }

四 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.1.dtd">
<struts>
<package name="authority" extends="struts-default"> <!-- 定义一个拦截器 -->
<interceptors>
<interceptor name="authority"
class="com.ywjava.interceptot.LoginInterceptor">
</interceptor>
<!-- 拦截器栈 -->
<interceptor-stack name="mydefault">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="authority" />
</interceptor-stack>
</interceptors> <!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results> <action name="loginform"
class="com.ywjava.action.LoginFormAction">
<result name="success">/login.jsp</result>
</action> <action name="login" class="com.ywjava.action.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/login.jsp</result>
<result name="input">/login.jsp</result>
</action> <action name="show" class="com.ywjava.action.ShowAction">
<result name="success">/show.jsp</result>
<!-- 使用此拦截器 -->
<interceptor-ref name="mydefault" />
</action> </package>
</struts>

最新文章

  1. javascript表单操作方法
  2. GCD创建一个单例
  3. 关于MVC中DropDownListFor的一个bug
  4. 【转】win7与VMware ubuntu虚拟机实现文件共享(最后一定要装open-vm-dkms插件)
  5. QT正则表达式
  6. NET版微信客户端.
  7. hibernate 使用sql 查询(setResultTransformer)
  8. jquery 引号问题
  9. MVC详解
  10. libmysqlclient.so.16: cannot open shared object file: No such file or directory
  11. .NET拾忆:反射的本质——元数据
  12. c++引用和指针的彻底理解
  13. 关于DDOS的主动与智能防御
  14. spring boot IDEA 开发微服务(二)
  15. Codeforces Round #510 (Div. 2) D. Petya and Array(离散化+反向树状数组)
  16. 【设计模式】—— 访问者模式Visitor
  17. [Docker] Building a Node.js Image
  18. qq飞车精灵家园里的背景音乐:Mysterious Town pooka 下载
  19. 3. python 字符串的一般使用
  20. VirtualBox vbox not found

热门文章

  1. HDOJ2000ASCII码排序
  2. iPad accessory communication through UART
  3. sql常识-like
  4. (转)Mongodb相对于关系型数据库的优缺点
  5. echarts标准饼图(二)——标题(title)配置
  6. Windows7下安装搭建play框架
  7. 详解null
  8. Navicat for mysql linux 破解方法
  9. ZigBee2006,2007,pro各个版本的区别
  10. css圆角 四边投影