- 浏览: 116946 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
panqun:
jquery.mytime.js这个js请问你有么
基于JFinal的后台业务框架通用模块 -
tyc1920:
http://localhost/jcbase/res/js/ ...
基于JFinal的后台业务框架通用模块 -
breeze_86:
哥们有没有源码啊?能不能发一份!353474917@qq.co ...
dwr之IM项目(一) -
逍遥bxf飞雪:
哥们有没有源码啊?能不能发一份!396941223@qq.co ...
dwr之IM项目(一) -
yulon:
w156445045 写道nameKey JSONArray ...
jquery autoComplete 在实际项目的运用
实现用户注册与登陆模块
注册界面:
登陆界面:
一、定义UserService其它接口并将其实现
/** * 用户注册 * @param user */ public void register(User user); /** * 判断用户是否存在 * @param username * @return */ public boolean exsit(String username); /** * 判断用户名及密码是否通过 * @param username * @param password * @return */ public boolean validate(String username,String password); /** * 更新密码 * @param username 用户名 * @param newpassword 新密码 */ public void updatePassword(String username, String newpassword); /** * 判断邮箱是否已注册 * @param email * @return */ public boolean exsitEmail(String email); /** * 更新注册邮箱 * @param username * @param newemail */ public void updateEmail(String username,String newemail);
实现类:
@Service("userServiceBean") public class UserServiceBean extends DaoSupport<User> implements UserService { @Resource(name="userRoleServiceBean") private UserRoleService userRoleService; public void updateEmail(String username,String newemail){ em.createQuery("update User o set o.email=?1 where o.username=?2") .setParameter(1, newemail).setParameter(2, username).executeUpdate(); } public void updatePassword(String username, String newpassword){ em.createQuery("update User o set o.password=?1 where o.username=?2") .setParameter(1, MD5.MD5Encode(newpassword)).setParameter(2, username).executeUpdate(); } public void register(User user){ //对密码进行md5加密 user.setUserrole(userRoleService.getReference("user")); UserGrade userGrade = new UserGrade(); user.setUsergrade(userGrade); UserInfo userInfo = new UserInfo(); userInfo.setNickname(user.getUsername()); user.setUserinfo(userInfo); user.setPassword(MD5.MD5Encode(user.getPassword())); super.save(user); } @Transactional(propagation=Propagation.NOT_SUPPORTED) public boolean exsitEmail(String email){ long count = (Long)em.createQuery("select count(o) from User o where o.email=?1") .setParameter(1, email).getSingleResult(); return count>0; } @Transactional(propagation=Propagation.NOT_SUPPORTED) public boolean exsit(String username){ long count = (Long)em.createQuery("select count(o) from User o where o.username=?1") .setParameter(1, username).getSingleResult(); return count>0; } @Transactional(propagation=Propagation.NOT_SUPPORTED) public boolean validate(String username,String password){ long count = (Long)em.createQuery("select count(o) from User o where o.username=?1 and o.password=?2") .setParameter(1, username).setParameter(2, MD5.MD5Encode(password)).getSingleResult(); return count>0; } }
知识提示: 注册的同时需对密码进行md5加密
二、UserRegAction类的实现
@Controller("userRegAction") @Scope("prototype") public class UserRegAction extends ActionSupport{ private static final long serialVersionUID = 1159518406043666180L; private User user; private String repassword; private String code; @Resource(name="userServiceBean") private UserService userService; public String getRepassword() { return repassword; } public void setRepassword(String repassword) { this.repassword = repassword; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } /** * 打开用户注册界面 * @return * @throws Exception */ public String registerUI()throws Exception{ return Action.SUCCESS; } /** * 用户注册 * @return * @throws Exception */ public String register() throws Exception { String validateCode = (String)ActionContext.getContext().getSession().get("validateCode"); if(!validateCode.equals(this.getCode())){ this.addFieldError("codeerror","验证码有误!"); return Action.INPUT; } //判断用户是否存在 if(userService.exsit(user.getUsername().trim())){ this.addFieldError("user.username", "用户名已存在!"); return Action.INPUT; } //判断邮箱是否已初注册过 if(userService.exsitEmail(user.getEmail().trim())){ this.addFieldError("user.email", "邮箱已被注册过!"); return Action.INPUT; } userService.register(user); return Action.SUCCESS; } }
基于xml的数据验证,文件跟action在同一个目录下,并命名为:UserRegAction-register-validation.xml,register是action名.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <validators> <field name="user.username"> <field-validator type="requiredstring"> <!-- 默认为true --> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> <field-validator type="stringlength"> <param name="maxLength">15</param> <param name="minLength">6</param> <!-- 给用户显示的提示信息,可以国际化 --> <message>用户名长度在${minLength}~${maxLength}之间!</message> </field-validator> </field> <field name="user.password"> <field-validator type="requiredstring"> <!-- 默认为true --> <param name="trim">true</param> <message>密码不能为空!</message> </field-validator> <field-validator type="stringlength"> <param name="maxLength">15</param> <param name="minLength">6</param> <!-- 给用户显示的提示信息,可以国际化 --> <message>密码长度在${minLength}~${maxLength}之间!</message> </field-validator> </field> <field name="repassword"> <field-validator type="requiredstring"> <!-- 默认为true --> <param name="trim">true</param> <message>重复密码不能为空!</message> </field-validator> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[repassword.equals(user.password)]]></param> <message>密码输入不一致!</message> </field-validator> </field> <field name="user.email"> <field-validator type="requiredstring"> <message>电子邮箱不能为空!</message> </field-validator> <field-validator type="email"> <message>电子邮箱格式不正确!</message> </field-validator> </field> </validators>
知识提示: 这个配置文件支持正则表达式(如:${minLength})和ognl表达式(如:repassword.equals(user.password))
2.2 配置struts-user.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="forward" namespace="/" extends="struts-default"> <!-- 用户注册界面 --> <action name="registerUI" class="userRegAction" method="registerUI"> <result>/WEB-INF/forward/register.jsp</result> </action> <!-- 用户注册 --> <action name="register" class="userRegAction" method="register"> <result name="input">/WEB-INF/forward/register.jsp</result> <result name="success">/WEB-INF/forward/register_comp.jsp</result> </action> <!-- 用户登陆界面 --> <action name="loginUI" class="userLoginAction" method="loginUI"> <result name="success">/WEB-INF/forward/login.jsp</result> </action> <!-- 用户登陆 --> <action name="login" class="userLoginAction" method="login"> <result name="input">/WEB-INF/forward/login.jsp</result> <result name="success" type="redirectAction">index</result> </action> <!-- 判断用户或邮箱是否被注册过 --> <action name="*_Exist" class="usernameOrEmailExistAction" method="{1}"> </action> <!-- 前台主页 --> <action name="index"> <result>/WEB-INF/forward/index.jsp</result> </action> </package> </struts>
2.3 验证码Servlet: VerifyCodeServlet,这个验证的实现也不是很好! 大家有没有更好的实现.在web.xml文件配置:
<!-- 验证码 --> <servlet> <servlet-name>VerifyCodeServlet</servlet-name> <servlet-class>cn.daxia.web.servlet.verify.VerifyCodeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>VerifyCodeServlet</servlet-name> <url-pattern>/verifyCodeServlet</url-pattern> </servlet-mapping>
2.4 设置basePath: 写一个filter-->MyPrepareAndExecuteFilter,继承StrutsPrepareAndExecuteFilter,重新配置web.xml文件
public class MyPrepareAndExecuteFilter extends StrutsPrepareAndExecuteFilter { @Override public void init(FilterConfig filterConfig) throws ServletException { super.init(filterConfig); } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { //转换成HttpServletRequest HttpServletRequest request = (HttpServletRequest)req; ServletContext context = request.getSession().getServletContext(); if(context.getAttribute("basePath")==null){ String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; context.setAttribute("basePath", basePath); } super.doFilter(req, res, chain); } }
改写filter,此解决方案个人觉得不是很好,大家有没有其他方案
<filter> <filter-name>struts2</filter-name> <filter-class>cn.daxia.web.filter.MyPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.5 用户注册js验证文件在/js/user/register.js,验证用户或邮箱是否存在用了ajax实现,使用的js库是jquery1.3,js代码没有重构,比较乱
function ajaxUserNameSumbit(url,post){ $.ajax({ type: "post", url: url, data: post, success: function(msg){ if(msg=='notexist'){ document.forms[0].uservalidate.value='true'; $("#usermsg").css("display","inline").html("<div class='rightSign'></div><font color='green'>您可以使用该用户名!</font>").fadeIn("slow"); }else{ document.forms[0].uservalidate.value='false'; $("#usermsg").css("display","inline").html("<div class='errorSign'></div><font color='red'>此用户名已被使用!</font>").fadeIn("slow");; } } }); }
三、用户登陆部分大家不访自己去实现一下
发表评论
-
dw之IM项目(第一个简单的dwr推送程序)
2011-03-05 14:36 26732.3第一个简单的dwr推送程序 第一步à 将dwr相关 ... -
dw之IM项目(第一个简单的dwr推送程序)
2011-03-05 14:34 02.3第一个简单的dwr推送程序 第一步à 将dwr相关 ... -
js异步加载下拉树的实现
2011-03-05 14:06 6958下拉树图示: 主要实现部分: 第一,freemarker ... -
dwr之IM项目(二)
2011-02-24 00:32 12392.2 领域对象设计 1 用户与用户分 ... -
dwr之IM项目(一)
2011-02-17 20:22 1751本项目的基本架构主要是基于Struts2+JPA1.0+Sp ... -
quartz之任务调度在项目中的运用(可管理)
2011-02-16 17:12 11481、调度任务列表 2、添加任务定义 3、 ... -
多浏览器窗口共享购物车
2010-11-13 08:46 01、首先要说明的是浏览器是同一类型(IE、火狐..)的浏览器。 ... -
跟我一起写大虾网(第2天)
2010-02-06 19:11 1219一、设计用户相关实体类 积分等级类: @Enti ... -
补跟我一起写大虾网(第1天源码)
2010-02-05 11:48 1130补上源码 -
跟我一起写大虾网(第1天)
2010-02-05 11:14 1748一、先整合spring2.5+jpa1.0,使用扫描加注解的方 ... -
跟我一起写大虾网(第0天)
2010-02-04 11:52 44201、项目模块介绍 本项目是提供给用户一个学习和交流 ...
相关推荐
NULL 博文链接:https://yulon.iteye.com/blog/588941
跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟...
跟我一起写Makefile-陈皓.pdf
跟我一起写 Makefile跟我一起写 Makefile跟我一起写 Makefile
陈皓大佬的博客最新版跟我一起写Makefile.pdf
跟我一起写makefile
跟我一起写Makefile Makefile学习
跟我一起写 Makefile.doc 跟我一起写 Makefile.doc 跟我一起写 Makefile.doc 跟我一起写 Makefile.doc 跟我一起写 Makefile.doc 跟我一起写 Makefile.doc
跟我一起写 Makefile 作者:陈皓 整理:祝冬华 来源网络,希望能与大家分享这份学习资料,资源分数也设置了最低值,如有侵权,请联系我删除文件。 第一部分、概述 (6) 第二部分、关于程序的编译和链接 (6) 第三部分...
跟我一起写 Makefile.pdf
5积分即可下载,为你为我为大家
跟我一起写makefile
make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样...
Makefile 跟我一起写Makefile;Makefile 跟我一起写Makefile;Makefile 跟我一起写Makefile