精华帖 (1) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-19
最后修改:2008-12-08
myeclipse5.5 + tomcat5.5 + jdk1.5 需要的朋友可以直接下载看看 ^_^ ...
首先是 actions 包里的类 (2个 action ,一个拦截器)
1.CheckLoginInterceptor
/************************************************* @Copyright (C), 2008, lzpeng @File name: CheckLoginInterceptor.java @Author: lzpeng @CreateDate: 2008-6-17 @Description: CheckLoginInterceptor拦截器 @Extends: AbstractInterceptor @Function List: 1. public String intercept() *************************************************/ package cn.com.lzpeng.actions; import java.util.Map; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class CheckLoginInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 1L; public static final String USER_SESSION_KEY="user"; @Override public String intercept(ActionInvocation actionInvocation) throws Exception { System.out.println("begin check login interceptor"); // 对LoginAction不做该项拦截 Object action = actionInvocation.getAction(); if (action instanceof LoginAction) { System.out .println("exit check login, because this is login action."); return actionInvocation.invoke(); } // 验证 session Map session = actionInvocation.getInvocationContext().getSession(); String username = (String) session.get(USER_SESSION_KEY); if (username != null) { // 存在的情况下进行后续操作。 System.out.println(username+" already login!"); return actionInvocation.invoke(); } else { // 否则终止后续操作,返回LOGIN System.out.println("no login, forward login page!"); return Action.LOGIN; } } }
2.LoginAction
/************************************************* @Copyright (C), 2008, lzpeng @File name: LoginAction.java @Author: lzpeng @CreateDate: 2008-6-17 @Description: LoginAction控制类 @Extends: ActionSupport @Function List: 1. public UserBean getUserBean() 返回一个UserBean实体 2. public void setUserBean(UserBean userBean) 设置一个UserBean实体 3. public String execute() 执行Action的方法 4.public void setSession() 设置 session 值 *************************************************/ package cn.com.lzpeng.actions; import com.opensymphony.xwork2.ActionSupport; import cn.com.lzpeng.entity.UserBean; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; public class LoginAction extends ActionSupport implements SessionAware { private static final long serialVersionUID = 1L; private UserBean userBean; private Map<String, String> session; public UserBean getUserBean() { return userBean; } public void setUserBean(UserBean userBean) { this.userBean = userBean; } @Override public String execute() { if (userBean == null) { return LOGIN; } String name = userBean.getName(); String pwd = userBean.getPassword(); session.put(CheckLoginInterceptor.USER_SESSION_KEY, name); if (name.equals("java") && pwd.equals("struts")) { return SUCCESS; } else { return ERROR; } } public void setSession(Map session) { this.session = session; } }
3.TestInterceptorAction
/************************************************* @Copyright (C), 2008, lzpeng @File name: LoginAction.java @Author: lzpeng @CreateDate: 2008-6-17 @Description: TestInterceptorAction控制类 @Extends: ActionSupport @Function List: 1.public String execute() 执行 Action 的方法 *************************************************/ package cn.com.lzpeng.actions; import com.opensymphony.xwork2.ActionSupport; public class TestInterceptorAction extends ActionSupport { private static final long serialVersionUID = 1L; @Override public String execute() { return SUCCESS; } }
这个是实体类 UserBean.java
/************************************************* @Copyright (C), 2008, lzpeng @File name: LoginAction.java @Author: lzpeng @CreateDate: 2008-6-17 @Description: UserBean实体类 *************************************************/ package cn.com.lzpeng.entity; public class UserBean { private String name; private String password; public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public String getPassword() { return password; } }
struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 加载默认的 struts2 配置文件 --> <include file="struts-default.xml" /> <!-- 继承默认的 struts2 配置文件 --> <package name="default" extends="struts-default"> <!-- 定义一个名为 checkLogin 的拦截器 --> <interceptors> <!-- 定义权限检查拦截器 --> <interceptor name="checkLogin" class="cn.com.lzpeng.actions.CheckLoginInterceptor" /> <!-- 定义一个包含权限检查的拦截器栈 --> <interceptor-stack name="myDefaultStack"> <!-- 定义拦截器栈包含checkLogin拦截器 --> <interceptor-ref name="checkLogin"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 设置全局 全局默认的拦截器栈--> <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref> <!-- 定义全局Result --> <global-results> <!-- 当返回login视图名时,转入/login.jsp页面 --> <result name="login">/login.jsp</result> </global-results> <!-- action 标签里 name属性代表我们要处理的.action的前面部分 action 标签里 class属性代表我们需要哪个类来处理 result 标签的 name属性代表action类的执行方法的返回值, action类的默认执行方法是public String execute() --> <action name="login" class="cn.com.lzpeng.actions.LoginAction"> <result name="success">success.jsp</result> <result name="error">error.jsp</result> <result name="login">login.jsp</result> <!--拦截器一般配置在 result 元素之后 --> <interceptor-ref name="myDefaultStack" /> </action> <action name="testInterceptor" class="cn.com.lzpeng.actions.TestInterceptorAction"> <result name="success">content.jsp</result> <result name="login">login.jsp</result> </action> </package> </struts>
最后是 4个 jsp界面
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>struts2</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <!—- 注意这里action="login.action" 因为要与Struts.xml里你注册的那个别名叫"login" --> <form action="login.action" method="post" > <fieldset> <legend> 用户登录 </legend> <p align="center"> 帐 号: <input type="text" name="userBean.name" /> <!—- 注意这里一定要写name="bean.name", 因为要与LoginAction.java里面定义的bean对应 name是它的helloWorld的属性 --> </p> <p align="center"> 密 码: <input type="password" name="userBean.password" /> </p> <p align="center"> <input type="submit" value="登 录" /> </p> </fieldset> </form> </body> </html>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>成功了</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="testInterceptor.action"> <div align="center"> 恭喜${userBean.name}登录成功了 ! <br> 只有通过这才能访问 content.jsp! <br> <br> <input type="submit" value=" content.jsp"> <br> <br> 主要演示拦截器 CheckLoginInterceptor 对 TestInterceptorAction 的拦截情况(可以试直接访问 TestInterceptorAction.action) </div> </form> </body> </html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>error</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <div align="center"> 这是一个错误界面 ! 用以下帐号试试:<br> id : java<br> password: struts </div> <div> <a href="login.jsp">返回登录界面</a> </div> </body> </html>
content.jsp //为测试 拦截器 写的
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>content</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body><div align="center"> 这里是 content.jsp! <br> 成功通过拦截器 CheckLoginInterceptor...... <br> 复制上边地址 , 在新打开的窗口里粘贴 , 回车试试...... </div> </body> </html>
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-19
刚学struts,自己总结的 , 希望对初学者有帮助..
|
|
返回顶楼 | |
发表时间:2008-06-20
多谢,正找这个呢!
|
|
返回顶楼 | |
发表时间:2008-06-20
其实注册页面也要避免
我一般会重新用一个interceptor-stack 不过你这个方法也可以,把所有不需要登陆就能看的都放到loginAction里面来 |
|
返回顶楼 | |
发表时间:2008-06-20
嗯,下来看看再说,谢谢楼主共享经验~
|
|
返回顶楼 | |
发表时间:2008-06-21
答楼上:
serialVersionUID 用来表明类的不同版本间的兼容性<如更换jdk版本或web容器等>。产生的serial versionUID可能不同,所以程序可能会在以后出现运行不兼容的问题。为了避免这些问题,对实现了串行化的类最好按官方的要求显式的指明serialVersionUID。(1L就是long类型的ID,可按实际情况更改) |
|
返回顶楼 | |
发表时间:2008-06-24
对楼主有几点点评:
有好例子分享一下,挺不错,注释方面很不错; 现在都用sturts2了,为什么还是myeclipse5.5+jdk1.5+tomcat5.5,应该换成myeclipse6.0+jdk1.6+tomcat6.0了吧 代码不格式化,特别是jsp,不删除多余的代码,又浪费流量了,阅读性不好 哈哈,乱说话,不要介意 |
|
返回顶楼 | |
发表时间:2008-08-13
我的环境:struts2.0.11.2+spring2.5.5+jpa,我点了登录后,老报
No result defined for action quickstart.action.LoginAction and result success 包名我换了,报错的大概意思是找不到对应的success和error的页面。 |
|
返回顶楼 | |
发表时间:2008-09-08
如果用注释,怎么配置相关Action的拦截器?
|
|
返回顶楼 | |
发表时间:2008-12-05
我想在struts.xml中配置一个全局的过滤器,其他的xml配置文件里都能直接引用,怎么使用呢?
|
|
返回顶楼 | |