快捷搜索: 长连接 前端 源码 pan

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可用!!");
		}
	}

这样注册的判断就好了 剩下的 只需要把拿到注册的东西插入数据库就好了 然后跳转成功页面就可以了 就不放代码了。

经验分享 程序员 微信小程序 职场和发展