java_web论坛项目2
java_web论坛项目2(注册登录页面实现)
登录注册前端页面我是用bootstrap框架拖拽出来的,下面重点说一下后端代码的实现 在src下面 我分了这么几个包 放不同的java代码 dao里面的类都是放链接数据库的代码 model包里面的有存放不同的模型的类 service包里面有处理不同的业务的类 接受dao返回上面的数据进行业务处理的代码 servlet包里面的类是接受参数 传递数据给service处理 然后控制跳转 util包是自己做的工具类
base 里面只有一个类,该类继承了HttpServlet,重写了service方法 , servlet里面的类直接继承这个类 然后可以做到更好的分类管理 下面是base下面这个类的实现代码
public class Base extends HttpServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { String action = request.getParameter("act"); Class cla = this.getClass(); try { Method method = cla.getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class); method.invoke(this, request,response); } catch (NoSuchMethodException | SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
首先来说登录 这个自我感觉还是比较好实现的 直接根据数据库里面查表,查不到刷新改页面,查到的话把改用户的值设置范围为session(方便以后调用),然后跳转。 先来看一下dao包下userDaoImp类下面登录的数据库链接查询实现
@Override public User login(String userId,String userPassWord) { User userMessage = new User(); try { //JDBC数据库连接 1.加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //2.创建链接 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "ADMIN"); //3.获取一个Preparestatement String sql ="select * from tb_user where userId= ?and userPassWord=?"; PreparedStatement psmt = conn.prepareStatement(sql); psmt.setObject(1, userId); psmt.setObject(2, userPassWord); ResultSet rs = psmt.executeQuery(); if(rs.next()){ userMessage.setUserName(rs.getString(1)); userMessage.setUserId(rs.getString(2)); userMessage.setUserPassWord(rs.getString(3)); } return userMessage; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
servlet包下面的页面跳转控制实现
//登录判断 public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User user = new User(); //通过工具类 给每一个 属性赋值给model类 Conversion.conver(user, request); User userMessage =new UserServiceImp().login(user); if(userMessage.getUserName()==null){ request.getRequestDispatcher("LoginAndRegister.jsp").forward(request, response); }else{ HttpSession session= request.getSession(); session.setAttribute("user", userMessage); response.sendRedirect("leader.jsp"); } }
注册 注册其中判断用户是否输入合法,用的是jquery来进行判断的,如果不合法,就让登录的点击事件无用
$(document).ready(function() { //点击后运行 如果返回false后改点击事件不起作用 $(#reg).click(function() { if ($(#userid).val() == "") { $(#userCue).html("<font color=red><b>×id不可以为空</b></font>"); return false; } if ($(#user).val() == "") { $(#userCue).html("<font color=red><b>×用户名不能为空</b></font>"); return false; } if ($(#user).val().length < 4 || $(#user).val().length > 16) { $(#userCue).html("<font color=red><b>×用户名位4-16字符</b></font>"); return false; } if ($(#passwd).val().length < 6) { $(#userCue).html("<font color=red><b>×密码不能小于" + 6 + "位</b></font>"); return false; } if ($(#passwd2).val() != $(#passwd).val()) { $(#userCue).html("<font color=red><b>×两次密码不一致!</b></font>"); return false; } }); });
其中账号也就是id号码,因为id考虑的是主键,所有肯定是不可能让他重复的,所以id的判断我用的是ajax来做的。
//找到进行操作的输入框 定义焦点离开事件 var p=true; //全局变量 在上面的点击事件上面把p进行判断一下如果是false就返回false那么注册的点击事件就没用 $("#userid").blur(function(){ var val = $(this).val();//得到输入框的值 $.ajax({ url:"LoginServlet?act=search",//请求地址 data:{"val":val},//请求的参数 type:"post",//请求的类型 dataType:"text",//接受的数据类型 text html xml json //回调函数 success:function(result){ if(result=="该id不可用!!"){ p=false; //如果不可以用就把p设置为false } $("#userCue").html("<font color=red><b>"+result+"</b></font>"); }, error:function(){ alert("ajax请求失败"); } }) });
servlet后台处理ajax
//ajax判断账号是否重复 回调函数 public void search(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求和响应的编码格式 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String val = request.getParameter("val"); String userId = new UserServiceImp().search(val);//根据传入的id查询数据库 if(val.equals(userId)){ response.getWriter().print("该id不可用!!"); }else{ response.getWriter().print("id可用!!"); } }
这样注册的判断就好了 剩下的 只需要把拿到注册的东西插入数据库就好了 然后跳转成功页面就可以了 就不放代码了。
上一篇:
多线程四大经典案例