- 浏览: 1524683 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
用户登陆页面user_login.jsp对应action为login.do:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>用户登陆</title> <script type="text/javascript"> function confirmCodeNew(o){ o.src="<s:url action='confirm' namespace='/validation'/>"; } </script> </head> <body> <form id="loginform" name="loginform" method="post" action="<s:url action='process'/>" onsubmit="return checkLoginForm();"> <table width="308" height="232" border="0" cellpadding="0" cellspacing="0" class="table3"> <tr> <td colspan="10"><span class="font_red"><s:actionerror/></span></td> </tr> <tr> <td width="82" height="40" align="right" valign="middle" class="font06">用户名:</td> <td colspan="3" align="left" valign="middle"><input type="text" name="username" id="username" tabindex="1" /></td> </tr> <tr> <td width="82" height="40" align="right" valign="middle" class="font06">密 码:</td> <td colspan="3" align="left" valign="middle"><input type="password" name="pwd" id="pwd" tabindex="2" /></td> </tr> <tr> <td width="82" height="40" align="right" valign="middle" class="font06">验证码:</td> <td width="59" align="left" valign="middle"><input name="confirm_code" type="text" class="table3" size="5" maxlength="4" /></td> <td width="79"><img src="<s:url action='confirm' namespace='/validation'/>" onclick="confirmCodeNew(this)" style="cursor:pointer" /></td> <td width="86" align="left" valign="middle" class="font06"> </td> </tr> <tr> <td height="40"> </td> <td colspan="3" align="left" valign="middle"><input type="checkbox" name="rember_me" onclick="remeber_me_change(this);"/> <span class="font06">记住用户名</span></td> </tr> <tr> <td height="50"> </td> <td height="50" colspan="3" align="left" valign="middle"><img src="<s:url value='/images/3vsxdt_36.gif'/>" onclick="checkLoginForm()" style="cursor:pointer" width="158" height="42" border="0" /></td> </tr> </table> </form> </body> </html>
用户登陆类(UserLogin.java):
package com.web.struts.action; import javax.servlet.http.Cookie; import org.apache.commons.lang.StringUtils; import commodel.Member; import com.service.IMemberService; import com.tools.Constant; import com.tools.MD5Bean; /** * title:用户登陆 * * @author conkeyn * @时间 2009-3-24:上午10:06:25 */ public class UserLogin extends BaseAction { /** */ private static final long serialVersionUID = -8059803575427183277L; private Member member; public void setMemberService(IMemberService memberService) { this.memberService = memberService; } private IMemberService memberService; /** * 退出 * * @return */ public String logout() { getSession().removeAttribute(Constant.MEMBER_SESSION_ID); Cookie[] cookies = getRequest().getCookies(); Cookie member_cookie = null; for (int i = 0; i < cookies.length; i++) { member_cookie = cookies[i]; if (member_cookie != null && StringUtils.isNotBlank(member_cookie.getName()) && StringUtils.isNotBlank(member_cookie.getValue()) && member_cookie.getName().equals( Constant.MEMBER_SESSION_ID)) { member_cookie.setMaxAge(-1);// 设置有效期为-1秒,浏览器会自动删除 getResponse().addCookie(member_cookie); break; } } return SUCCESS; } /** * 用户登陆 * * @return */ public String login() { return "login"; } /** * 处理用户登陆 * * @return */ public String process() { String confirm_code = getRequest().getParameter("confirm_code"); String confirmcode = (String) getSession().getAttribute("confirmcode"); if (StringUtils.isNotBlank(confirm_code) && StringUtils.isNotBlank(confirmcode) && confirm_code.equals(confirmcode)) { String username = getRequest().getParameter("username"); String pwd = getRequest().getParameter("pwd"); String rember_me = getRequest().getParameter("rember_me"); MD5Bean md5 = new MD5Bean(); pwd = md5.MD5Encrypt(pwd); member = memberService.getMember(username); if (member == null) { this.addActionError("不存在该用户,请注册后再登陆!"); return ERROR; } else if (!pwd.equalsIgnoreCase(member.getPwd())) { this.addActionError("密码错误,请重新输入!"); return ERROR; } getSession().setAttribute(Constant.MEMBER_SESSION_ID, member.getUsername()); // 设置cookie if (StringUtils.isNotBlank(rember_me) && rember_me.equalsIgnoreCase("true")) { Cookie cookie = new Cookie(Constant.MEMBER_SESSION_ID, member .getUsername()); cookie.setMaxAge(60 * 60 * 24 * 365); getResponse().addCookie(cookie); } member.setLoged(true); memberService.saveMember(member); } else { this.addActionError("验证码错误,请重新输入!"); return ERROR; } return SUCCESS; } public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } }
Struts配置文件(struts-login.xml):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > <struts> <package name="login" extends="struts-default"> <!-- 登陆 --> <action name="login" class="memberAction" method="login"> <result name="login" type="dispatcher"> /WEB-INF/pages/userlogin.jsp </result> </action> <action name="logout" class="memberAction" method="logout"> <result name="success" type="redirectAction">login</result> </action> <action name="process" class="memberAction" method="process"> <result name="error" type="dispatcher">/WEB-INF/pages/userlogin.jsp </result> <result name="success" type="dispatcher">/WEB-INF/pages/userlogin_msg.jsp </result> </action> </package> </struts>
发表评论
-
Struts2 (Json) + jQuery 组合的简单用法
2011-03-01 23:02 10311、将struts2的json插件加入web工程的lib,js ... -
Struts2中$,#,%的区别
2011-03-01 22:57 1378转自:http://hi.baidu.com/di ... -
<s:generator>
2011-02-27 21:54 1420<s:generator val="%{'aa ... -
<s:merge>
2011-02-27 21:45 888<s:set var="americanCar ... -
<s:append>
2011-02-27 21:44 1246<s:set var="list1" ... -
<s:iterator>
2011-02-27 21:01 1389属性名称 必填项 默认值 ... -
<s:bean>
2011-02-27 18:32 950public class DegreeConverter { ... -
<s:param>
2011-02-27 18:21 3601param标签用来把一个参数传递给包含着它的那个标签。 不管 ... -
updownselect
2011-02-27 16:24 1398<s:updownselect name="c ... -
combobox
2011-02-27 16:08 958<s:combobox name="combo ... -
checkboxlist
2011-02-27 12:15 891ddd public class LoginAction ... -
select optgroup
2011-02-27 11:58 717代码片段: public class LoginAction ... -
select标签
2011-02-23 21:17 1019import com.opensymphony.xwork2. ... -
radio标签
2011-02-23 21:13 1009import java.util.SortedMap; ... -
list、listkey、listValue属性
2011-02-22 21:07 7251list、listKey、listValue属性对 ... -
Ongl 与 ValueStack ActionContext
2011-01-09 21:03 1475转自:http://blog.sina.com.c ... -
struts2.0的ognl表达式研究
2011-01-09 21:02 1036OGNL —— 完美的催化剂 为了解决数据从V ... -
关于Struts2.0 标签中采用%{} 的处理原理
2011-01-09 20:57 1591项目中采用struts2.0时,常常使用计算表单式的处理源码 ... -
struts2 tags
2010-01-08 13:22 12261.<s:property> propert ... -
Struts2和Freemarker整合应用批量静态页面的生成
2009-11-07 23:19 3855利用Struts2生成静态页面其实很灵活,很强大,尤其是利用S ...
相关推荐
这可能涉及使用单点登录(SSO)机制或者令牌管理,但这超出了基本的JSP和Struts用户退出功能的范围。 总的来说,JSP和Struts应用系统中实现用户退出的完美解决方案不仅包括清除Session和Cookie,还应考虑防止缓存,...
本文将深入探讨如何使用这两种技术解决用户退出登录的问题,确保用户的安全性和系统的稳定性。 首先,理解JSP的基本概念至关重要。JSP是一种Java技术,允许开发者将HTML或者XML文档与Java代码结合起来,生成动态...
6. **退出功能**:用户退出功能通常通过点击“注销”按钮实现,这会清除用户的会话信息,将他们重定向回登录页面。在JSP中,这可以通过调用`session.invalidate()`方法来完成,该方法会终止当前用户会话。 7. **...
这套代码示例提供了一个基本的会员管理系统,包括登录、退出以及会员状态判断的功能。接下来,我们将详细探讨这些知识点。 首先,`database.php`文件通常包含数据库连接的设置。在PHP中,我们可以使用`mysqli`或`...
本项目"Viewpager仿QQ横滑退出"旨在模仿QQ应用中的页面滑动手势,允许用户通过水平滑动页面来退出当前界面,这为用户提供了一种直观且友好的交互体验。 要实现这一功能,首先需要理解`ViewPager`的基本用法。`...
在Android应用开发中,"一键退出"功能通常指的是允许用户通过单次操作关闭应用程序的全部活动,从而结束应用进程。这个功能虽然在某些情况下不是必须的(因为Android系统本身会管理应用的内存使用),但在一些特定...
2. **使用Intent.FLAG_ACTIVITY_CLEAR_TASK**:在启动Activity时,添加`FLAG_ACTIVITY_NEW_TASK`和`FLAG_ACTIVITY_CLEAR_TASK`标志,这将清除当前任务栈并启动新的Activity,达到退出的效果。例如: ```java Intent...
在Android开发中,"侧滑退出Activity"是一个常见的交互设计,它允许用户通过从屏幕边缘向内滑动来关闭或返回上一级界面。这个功能在许多应用中都可以看到,如Google Maps、微信等,提供了更加直观和便捷的操作体验。...
在IT行业中,用户登录和注销是任何Web应用...通过以上步骤,我们就构建了一个基本的用户登录和注销系统,实现了用户身份验证、会话管理以及权限控制。这个系统在MyEclipse和Struts框架下提供了稳定和安全的用户体验。
5. **Session管理**:为了保持登录状态,Struts可能会使用Session来存储用户的登录信息,直到用户退出或Session超时。 6. **拦截器(Interceptor)**:在Struts 2中,拦截器是处理请求的重要组成部分,它可以用来...
在Android应用开发中,Activity是用户界面的基本组件,它负责展示屏幕上的交互元素并处理用户事件。当用户完成某个操作或者需要节省系统资源时,安全退出Activity是非常重要的。本篇文章将详细探讨多种安全退出...
第四章“A place for Components”中,详细介绍了各种组件的使用方法,包括按钮、标签、输入框等,并通过示例演示了如何将它们组合在一起以构建更复杂的用户界面。第五章“Organizing Components”则探讨了如何使用...
2. 编写Servlet,获取用户输入,调用模型类进行验证。 3. 模型类(如`UserBean`)与数据库交互,对比用户输入。 4. 根据验证结果,Servlet进行相应操作,如重定向或显示错误信息。 对于初学者来说,实践这些步骤是...
其中一个常见的需求是,当用户连续快速点击两次返回键时,应用能够优雅地退出,而不是简单地回退到上一个活动或关闭当前页面。这个功能在很多应用中被采用,以防止意外的退出或者增加应用的安全性。下面我们将详细...
**标题与描述解析** ...这个入门级的项目实例对于理解JSP、Struts2和MyBatis的集成应用非常有帮助,同时也涵盖了基本的用户认证逻辑。通过学习和实践,开发者可以深入掌握Java Web开发的基础知识。
4. **注销功能**:提供一个注销Action,清除session中的登录信息,使用户退出系统。 5. **单表增删查实现分页功能**:使用Hibernate的CRUD操作对用户数据进行增删查改,并结合分页插件或自定义分页逻辑,实现数据的...
在Android开发中,微信右滑退出功能是一种常见的交互方式,让用户能够通过简单的手势来关闭或切换活动(Activity)。本文将详细介绍如何实现这一功能,并提供相关的代码示例。 首先,要实现微信右滑退出,我们需要...
总结来说,这个Java Web用户登录实例展示了如何使用Struts2框架、Servlet API(特别是Session和Cookie)以及基本的验证逻辑来构建一个完整的登录系统。这个系统能够确保用户的身份,保持登录状态,并提供用户友好的...
如果用户在2秒内再次按下返回键,`isExit`仍为true,那么就会调用`getActivity().onBackPressed()`,从而退出Activity和Fragment。 而对于其他Fragment,保持默认的返回行为,即单次返回键事件就移除或隐藏当前...
同时,登录成功后,系统通常会创建一个会话(Session)来跟踪用户状态,直到用户退出或会话超时。 5. **安全考虑**:在实际应用中,除了基本的登录功能,还需要考虑安全性问题,如防止SQL注入、XSS攻击,以及使用...