【日记本系统】4–用户登录 后台

2016-12-14 23:36    600人浏览    标签:,     

后台主要是与数据打交道,这里则是来根据用户输入的账号密码来与数据中的账号密码来匹配,如果是正确的则登录成功,否则就登录失败。

首先先创建dao,entity,web个包,dao中主要写方法操作数据库,entity主要是放各个实体,web则主要写servlet,很多的工程一般都有dao,daoImpl,service,serviceImpl这些,但是这里的项目简单,所以我这里就全部写在dao中。

这里的主要流程差不多就是用户前台通过填写表单登录发送,前台就会发送请求给后台,后台servlet接受请求,然后根据不同的请求处理,这个处理的过程中涉及到的对数据库的操作就是通过调用dao中的方法来实现的。

主要项目结构:

blob.png

下面再写具体的实现步骤,看怎么做的,基本所以的实现步骤都是差不多的,无论是什么项目:

1.将用户表转换为实体类,表的字段就是这个实体类的属性

blob.png

这里自定义的方法是用户在用户登录的时候根据用户名和密码来判断是否登录成功。

构造方法及各个字段属性的get和set的生成方法:

右键-->source -->.....

blob.png

这样user的实体类就生成了,实体类一般叫POJO,一般在程序中用来持久化存储数据用。其实就是封装对象,这里user实体类就是将表user封装起来了,用在程序中。

UserDao.java

package cn.javabb.dao;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
import cn.javabb.entity.User;
import cn.javabb.util.BbUtil;
 
/**
 * 用户dao
 * @author javabb.cn
 * 2016年12月11日
 */
public class UserDao {
/**
 * 
 * @param con
 * @param user
 * @return User
 * @throws Exception
 */
	public User login(Connection con,User user)throws Exception{
		User resultUser=null;
		String sql="select * from t_user where userName=? and password=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, user.getUserName());
		pstmt.setString(2, user.getPassword());
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			resultUser=new User();
			resultUser.setUserId(rs.getInt("userId"));
			resultUser.setUserName(rs.getString("userName"));
			resultUser.setPassword(rs.getString("password"));
			resultUser.setNickName(rs.getString("nickName"));
			resultUser.setImageName(BbUtil.getValue("imageFile")+rs.getString("imageName"));
			resultUser.setMood(rs.getString("mood"));
		}
		return resultUser;
	}

这里的方法logi()方法有一个参数是User,在这里的作用就是通过User参数来判断是否在数据库中有这个User,如果没有则返回null,如果这个User在数据库中有,则返回这个User的具体对象。

LoginServlet.java

servlet的创建:File-New-others-然后输入Servlet,servlet我们主要实现的方法主要是doGet()和doPost(),具体的代码如下:

LoginServlet.java

package cn.javabb.web;
 
import java.io.IOException;
import java.sql.Connection;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import cn.javabb.dao.UserDao;
import cn.javabb.entity.User;
import cn.javabb.util.BbUtil;
/**
 * 登录servlet
 * @author javabb.cn
 * 2016年12月11日
 */
public class LoginServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
	
	UserDao userDao=new UserDao();
 
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
 
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		HttpSession session=request.getSession();
		//获取前台传过来的值
		String userName=request.getParameter("userName");
		String password=request.getParameter("password");
		
		Connection con=null;
		try{
			con=BbUtil.getCon();
			User user=new User(userName,password);
			User currentUser=userDao.login(con, user);
			if(currentUser==null){
				request.setAttribute("user", user);
				request.setAttribute("error", "登录失败");
				request.getRequestDispatcher("login.jsp").forward(request, response);
			}else{
				session.setAttribute("currentUser", currentUser);
				request.getRequestDispatcher("index.jsp").forward(request, response);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				BbUtil.closeCon(con);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

代码写的还是很简单,通过获取前台传来的username和password,来调用userDao中的login方法,再根据login方法返回的值判断是否为空,来确定用户是否登录成功,如果错误则返回到登录页面,并且提示登陆失败,成功则返回到index.jsp页面。

服务器要知道用户的请求还需要在web.xml中配置对用户的请求地址过滤

具体配置:

 <servlet>
    <servlet-name>loginServlet</servlet-name>
    <servlet-class>cn.javabb.web.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>

url-pattern表示过滤的请求是/login类型的,因为在前台表单提交的时候action是“/login”,如果浏览器的地址是以/login结尾的则调用名为loginServlet的servlet,在配置中则还需要配置servlet的处理类,<servlet-class>需要写清楚servlet的具体类的地址。

配置好了后打开浏览器测试:

3.gif

登陆成功,跳转成功

源码下载地址:http://pan.baidu.com/s/1dFMHLst

相关文章

留言评论

评论已关闭。