首页 > 其他分享 >登录功能

登录功能

时间:2024-05-08 17:01:00浏览次数:21  
标签:功能 登录 userCode rs req user null

  1. 整体思路

  1. 设置欢迎页:设置完欢迎页之后,tomcat启动后会自动跳转到欢迎页而不是index.jsp

  1. 登录的整体步骤:

    • 已经拥有前端页面:login.jsp,登录成功,跳转到业务主页面,登录失败输出提示信息,回到登录页面
    • 编写Dao层:接口和实现类,它的作用是从数据库中获取登录的用户
      //通过userCode从数据库中查询数据,并将其赋值给Java实体类user
      public User getLoginUser(Connection connection, String userCode) throws Exception {
      		PreparedStatement pstm = null;
      		ResultSet rs = null;
      		User user = null;
      		if(null != connection){
      			String sql = "select * from smbms_user where userCode=?";
      			Object[] params = {userCode};
      			rs = BaseDao.execute(connection, pstm, rs, sql, params);
      			if(rs.next()){
      				user = new User();
      				user.setId(rs.getInt("id"));
      				user.setUserCode(rs.getString("userCode"));
      				user.setUserName(rs.getString("userName"));
      				user.setUserPassword(rs.getString("userPassword"));
      				user.setGender(rs.getInt("gender"));
      				user.setBirthday(rs.getDate("birthday"));
      				user.setPhone(rs.getString("phone"));
      				user.setAddress(rs.getString("address"));
      				user.setUserRole(rs.getInt("userRole"));
      				user.setCreatedBy(rs.getInt("createdBy"));
      				user.setCreationDate(rs.getTimestamp("creationDate"));
      				user.setModifyBy(rs.getInt("modifyBy"));
      				user.setModifyDate(rs.getTimestamp("modifyDate"));
      			}
      			//connection设成null不让其关闭,是因为后面业务层还需要数据库连接。
      			BaseDao.closeResource(null, pstm, rs);
      		}
      		return user;
      	}
    
    • 编写Service层:调用Dao层,获取业务所需要的数据,登录的接口及其实现类
      public class UserServiceImpl implements UserService{
      	//创建UserServiceImpl就会实例化userDao
      	private UserDao userDao;
      	public UserServiceImpl(){
      		userDao = new UserDaoImpl();
      	}
        //通过前端传过来的姓名和密码对比数据库中查询到的
      	public User login(String userCode, String userPassword) {
      		Connection connection = null;
      		User user = null;
      		try {
      			connection = BaseDao.getConnection();
      			user = userDao.getLoginUser(connection, userCode);
      		} catch (Exception e) {
      			e.printStackTrace();
      		}finally{
      			BaseDao.closeResource(connection, null, null);
      		}
      		
      		//匹配密码
      		if(null != user){
      			if(!user.getUserPassword().equals(userPassword))
      				user = null;
      		}
      		
      		return user;
      	}
      }
    
    • 编写servlet:接受用户的请求交给业务层去做,这里用户的请求是登录,业务层要做的是在数据库中匹配输入的用户名和密码。
      public class LoginServlet extends HttpServlet {
          //servlet:控制层,接收用户的请求,调用业务层代码。
    
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              //从前端获取用户名和密码(接收用户的请求)
              String userCode = req.getParameter("userCode");
              String userPassword = req.getParameter("userPassword");
    
              //接收请求后需处理业务,业务是:和数据库中的数据进行对比,所以需调用业务层
              UserServiceImpl userService = new UserServiceImpl();
              User user = userService.login(userCode, userPassword);//这里已经把登录的人给查出来了
              
              //service层返回的就是user对象
              if(user != null){//查有此人,可以登录
                  //将用户的信息放入Session中
                  req.getSession().setAttribute(Constant.USER_SESSION , user);
                  //跳转主页(跳转到另一个页面,地址变了,所以用重定向)
                  resp.sendRedirect("jsp/frame.jsp");
    
              }else{//查无此人,无法登录
                  //转发会登录页面,顺带提示它,用户名或密码错误。((跳转到本页面,只是在本页面加了些信息(用户名或密码错误),地址没变,所以用请求转发))
                  req.setAttribute("error" , "用户名或密码错误");//请求可以携带数据
                  req.getRequestDispatcher("login.jsp").forward(req , resp);
    
              }
          }
    
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              doGet(req, resp);
          }
      }
    
    • 注册servlet
      <!--servlet-->
      <servlet>
          <servlet-name>LoginServlet</servlet-name>
          <servlet-class>com.tong.servlet.user.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>LoginServlet</servlet-name>
          <url-pattern>/login.do</url-pattern>
      </servlet-mapping>
    

标签:功能,登录,userCode,rs,req,user,null
From: https://www.cnblogs.com/hytip/p/18180232

相关文章

  • python+selenium+excel自动登录,自动填写网页
    经常有些网页要登录,然后频繁填写一些重复的内容,本文暂只考虑不需要验证码的情况,可以通过selenium模拟用户行为在页面操作,用excel拖出相似内容,用xlrd读取并填写到网页中。导入相关包fromseleniumimportwebdriverimportosimportxlrdimportxlwtimportjsonimportreq......
  • 功能强大的截图工具---Snipaste
    给大家推荐一个功能十分强大的截图工具---Snipaste是什么Snipaste是一个功能十分强大的截图工具,可以使用它来捕捉屏幕上的任何部分。进行标注和编辑优点有哪些简单易用:Snipaste提供了简洁直观的用户界面,使得截图和编辑变得非常容易上手。快捷操作:Snipaste支持各种快捷键操......
  • 使用Selenium做网站登录的免验证
    我发现,我已经三年多没有更新博客了。这几年一直感觉没什么可写的,工作上没遇到的问题python的不多,主要是前端页面上遇到的问题,感觉写起来比较困难,一写就要贴上去很多代码,还没什么必要,不贴又说不明白,所以干脆不写了。 今年换了工作,开始研究新玩意儿了——爬虫。俗话说,爬虫爬得好,......
  • vCenter 7.3 证书过期无法登录处理方法
    ​ 登录报错:如下图Exceptionininvkingauthenticationhandler[SSL:CERTIFICATE_VERIFY_FAILED]certificatevertifyfailed:certificatehasexpired(_ssl.c:1076)​ 处理方法1:推荐,可行登录vCenter控制台,Alt+F3切换至命令行模式,使用root登录,更改系统时间为过期前时......
  • [18] C++虚幻引擎功能拓展
    Day1添加轴动作EAxis::Type//轴方向枚举//旋转输入轴UInputModifierSwizzleAxis*SwizzleAxis=NewObject<UInputModifierSwizzleAxis>(MappingContext);KeyMapping.Modifiers.Add(SwizzleAxis);//取反输入轴UInputModifierNegate*Negate=NewObject<UInputModifierNe......
  • 常用功能方法记录
    #region获取物料辅助操作记录分页数据///<summary>///获取物料辅助操作记录分页数据///</summary>///<paramname="query"></param>///<returns></returns>publicasyncTask<PageModel<WoMaterialOperationRecorDTO>>GetWoMateri......
  • Summer '24来啦!15个最热门的功能抢先看!
    SalesforceSummer'24即将发布!本篇文章我们将深入了解Summer'24最热门的声明性功能。01自动化Lightning应用程序新的自动化Lightning应用程序中包含所有与自动化相关的内容。访问该应用程序的用户可以在主应用程序中看到Flow、错误信息和其他基于社区的链接。02Einsteinf......
  • thumbor:功能强大的图片处理库
    Github地址:https://github.com/thumbor/thumborThumbor是一个功能强大的Python图片处理库,可以用于生成、裁剪、缩放、旋转和优化图像,同时还提供了安全性和缓存等功能。本文将详细介绍Thumbor库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。Thumbor是一个......
  • mybatisplus批量插入,分批的功能
    默认分批是1000一般也就改成100-1000之间示业务而定 比较简洁的一种方式如下原代码publicBooleaninsertTasks(List<TaskInfoEntity>tasks,StringagentId){//todo分批List<AgentTaskRelationEntity>entities=tasks.stream().map((......
  • 功能全面的外发文件控制方案,拿走不谢!
    在日常办公中,很多企业往往只采取各种措施来确保存储数据的安全,却忽略了文件外发的安全。因此企业由于自身的安全防护机制不严谨,引发的数据安全事件频发,经常导致严重的经济损失。使用较多的外发方式有邮件、IM通讯工具、网盘、U盘硬件介质等,在外发文件控制上,存在一定问题:  1.......