index.jsp

<body><jsp:forward page="/WEB-INF/login.jsp"></jsp:forward></body>

为了安全,一般把jsp页面设置在web-inf 目录下面。然后留一个入口,往web-inf 跳转。

login.jsp

<body style="text-align:center; margin:0 auto; "><h1>登陆界面</h1><form action="/shopping/GoHallUI" method="post"><!-- 注意ACTION的值 --><div class="login"><table border="1px" align="center"><tr><td>用户ID:</td><td><input type="text" name="id"/></td></tr><tr><td>密 码:</td><td><input type="password" name="password"/></td></tr><tr><td><input type="submit" value="登陆"/></td><td><input type="reset" value="清空"/></td></tr></table></div></form>
</body>

一个简单的登录页面,输入用户名和密码,提交给GoHallUI这个servlet处理


GoHallUI

public class GoHallUI extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out=response.getWriter();//得到从登陆页面传递的用户ID和密码String id=request.getParameter("id");String p=request.getParameter("password"); //先判断该用户是否登录或此用户曾登录的session是否已经过期if(request.getSession().getAttribute("loginUser")!=null){//给下一个页面准备要显示的数据BookService bookservice=new BookService();ArrayList al=bookservice.getAllBook();//把要显示的数据放在request,原因是request的生命周期最短request.setAttribute("books", al);request.getRequestDispatcher("/WEB-INF/hall.jsp").forward(request, response);return;//不要往下走了!}       //创建一个Users对象()//String->intUsers loginUser=new Users(Integer.parseInt(id),p);      //使用业务逻辑类,完成验证。UsersService usersService=new UsersService();if(usersService.checkUser(loginUser)){//说明是合法用户,跳转到购物大厅.//把用户信息放到session中request.getSession().setAttribute("loginUser",loginUser);//创建一个购物车MyCart myCart=new MyCart();request.getSession().setAttribute("myCart", myCart);//给下一个页面hall.jsp准备要显示的数据BookService bookService=new BookService();ArrayList al=bookService.getAllBook();            //把要显示的数据放入request,原因是request对象的生命周期最短request.setAttribute("books", al);request.getRequestDispatcher("/WEB-INF/hall.jsp").forward(request, response);}else{//不合法request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);}}   public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}
}


这个servlet干了很多事,暂时先看用户登录与验证那一块儿。

1.创建了users对象

users.java

package com.wxh.domain;
//这是一个javabean,和数据库中的users表对应。
public class Users {private int id; private String name;private String pwd;private String email;private String tel;private int grade;   public Users(int id, String pwd) {super();this.id = id;this.pwd = pwd;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}
}

2.使用了UsersService类

UsersService.java

package com.wxh.service;import java.util.ArrayList;
import com.wxh.utils.*;
import com.wxh.domain.Users;//这是专门处理业务逻辑的类
//处理和users表相关的业务逻辑
public class UsersService {//验证用户是否合法的方法,合法则返回该用户的其他信息//不仅判断用户合不合法,还要把用户本身作为一个数据拿来用public boolean checkUser(Users user){//到数据库去验证String sql="select * from users where id=? and pwd=?";String paras[]={user.getId()+"",user.getPwd()};ArrayList al=new SqlHelper().executeQuery(sql, paras);if(al.size()==0){return false;}else{Object[] objects=(Object[])al.get(0);//把对象数组封装到Users对象           user.setName((String)objects[1]);user.setEmail((String)objects[3]);user.setGrade(Integer.parseInt(objects[5].toString()));//在用户登陆后同时还需要取出该用户的其他信息,故封装到一个对象return true;} }
}

在这里UsersService又调用了SqlHelper类来完成一些对数据库的操作。

SqlHelper.java


//这是工具类,主要用于完成对数据库的crud操作
public class SqlHelper
{   private static Connection ct=null;//连接private static ResultSet rs=null;//结果private static PreparedStatement ps=null;public ArrayList executeQuery(String sql,String []paras){ArrayList al=new ArrayList();try {ct=DBUtil.getCon();ps=ct.prepareStatement(sql);//给sql问号赋值for (int i = 0; i < paras.length; i++) {ps.setString(i+1, paras[i]);}rs=ps.executeQuery();//非常有用ResultSetMetaData rsmd=rs.getMetaData();//用法rs可以的到有多少列int columnNum=rsmd.getColumnCount();//循环从a1中取出数据封装到ArrayListwhile(rs.next()){Object []objects=new Object[columnNum];for(int i=0;i<objects.length;i++){objects[i]=rs.getObject(i+1); //返回对象数组}al.add(objects);}return al;} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());}finally{DBUtil.close(rs,ps,ct);}}public ResultSet executeQuery(String sqlstr) {Statement stmt = null;try{//得到连接ct=DBUtil.getCon();//ps=ct.prepareStatement(sqlstr);stmt = ct.createStatement();//创建结果集rs = stmt.executeQuery(sqlstr); //将结果集返回return rs;}catch(SQLException e){System.out.print("错误");}return null;}
}

这里又用到了DBUtil 类

DBUtil.java

这是数据库工具类,用于得到连接和关闭连接
public class DBUtil
{private static Connection ct=null;//连接private static ResultSet rs=null;//结果private static PreparedStatement ps=null;//连接数据库参数private static String url = ""; private static String drivername = "";private static String username = "";private static String password = "" ;//加载驱动
static{try {                Properties properties=new Properties();InputStream is=DBUtil.class.getClassLoader().getResourceAsStream("com/wxh/utils/dbinfo.properties");properties.load(is);//属性文件读取信息drivername=properties.getProperty("driver");username=properties.getProperty("username");password=properties.getProperty("password");url=properties.getProperty("url");} catch (Exception e) {e.printStackTrace();System.exit(-1);}}//得到连接
public static  Connection getCon()
{try {Class.forName(drivername);ct= DriverManager.getConnection(url,username,password);//注意配置文件} catch (Exception e) {e.printStackTrace();}return ct;//谁调用谁拿到Connection
}
public static void main(String args [])
{System.out.println(drivername);System.out.println(username);System.out.println(password);System.out.println(url);
}
//关闭资源函数
public static void close(ResultSet rs,Statement ps,Connection ct)
{if(rs!=null){ try{rs.close();}catch(Exception e){}rs=null;//使用垃圾回收}if(ps!=null){try{ps.close();}catch(SQLException e){e.printStackTrace();}ps=null;}if(ct!=null){try{ct.close();}catch(SQLException e){e.printStackTrace();}ct=null;}}}

存放数据库连接参数的属性文件

dbinfo.properties

url=jdbc:oracle:thin:@127.0.0.1:1521:test
driver=oracle.jdbc.driver.OracleDriverusername=hrpassword=hr

———摘自《韩顺平细说jsp》

韩顺平细说jsp购物车项目--用户登录及验证相关推荐

  1. 韩顺平Java自学笔记 项目 QQ聊天室

    目录 一.项目前的准备 1.为什么选择这个项目 2.项目开发的流程 3.项目的需求 二.开发阶段 1.登录功能实现 2.拉取在线用户实现 3.无异常退出的实现 4.私聊功能的实现 5.群发的实现 6. ...

  2. 基于 JSP + Servlet 的用户登录验证

    综合案例--基于 JSP + Servlet 的用户登录验证 [例6-1] 实现一个简单的用户登录验证程序,如果用户名是 abc ,密码是 123,则显示欢迎用户的信息,否则显示"用户名或密 ...

  3. java springmvc权限校验_springmvc拦截器实现用户登录权限验证

    实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 1 package cn.lzc.po; 2 3 public class User ...

  4. Spring MVC拦截器实现用户登录权限验证案例

    本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...

  5. java spring登录验证_springMVC 用户登录权限验证实现过程解析

    通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor ...

  6. php yanzhengm,php登录验证_php用户登录与验证的代码举例

    摘要 腾兴网为您分享:php用户登录与验证的代码举例,雨课堂版,新东方,小度音响,手机互联等软件知识,以及py平台,折扇app,内蒙古税务局,货代,兰斯10,新浪长微博,吉民生,yy球球直播视频,速优 ...

  7. Jsp—02—项目:登录案例

    运用Jsp技术和Servlet技术,完成一个注册登录退出模块: 一.开发文档编写 项目名称: 后台管理系统 项目需求: 实现用户登录 实现用户退出 实现用户注册 功能分析: 用户登录: 根据用户名和密 ...

  8. jsp实现简单用户登录(用户7天内免登录)

    (1)登陆页面:login.jsp <%@ page language="java" contentType="text/html; charset=utf-8&q ...

  9. 客户关系管理项目——用户登录模块设计

    一 模块需求细化 登录的用户,默认情况有三个不同角色,分别为:系统管理员,前台客服,信息管理员. 用户登录后能够根据其角色来进行相关工作,进行完工作需要能够注销. 细化需求如下: 用户登录之后按角色分 ...

  10. 韩顺平老师坦克大战项目总结

    韩顺平老师讲的坦克大战项目,用代码进行了复现,有几个自己的总结 1 有个别功能没有实现,EnemyTank中敌人坦克向四周移动功能没有实现,只是实现了随机转向,但一直停在原地不动,没有找到bug所在. ...

最新文章

  1. Java学习总结:47(打印流)
  2. 【算法学习笔记】43.动态规划 逆向思维 SJTU OJ 1012 增长率问题
  3. 给定两个数r和n_输出r的n次方 java_滴滴出行2018编程题
  4. maven上传本地仓库
  5. python找最长的字符串_在字符串python中查找最长的唯一子字符串
  6. Jquery高级编程
  7. 15秋计算机基础作业3,东师15秋《计算机应用基础》在线作业3介绍.doc
  8. 05-雷海林-mysql备份原理与在TDSQL中的实践
  9. 【QCustomPlot】1.3 - 运行官方例程Demo,介绍功能
  10. python遥感影像分类代码_Python 实现遥感影像波段组合的示例代码
  11. 【机器学习】隐马尔可夫模型及其三个基本问题(一)
  12. webview是什么东西_做性能优化前需要考虑什么?
  13. 百度区块链 xuperchain 如何剪枝 裁剪区块
  14. Java微信支付APIV3密钥生成全过程
  15. css video 样式,css自定义video播放器样式的方法
  16. EMERGENCYEUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEYRE NOT
  17. java mysql vo mybatis 分页_Mybatis Plus 使用VO分页查询
  18. JS封装小写字母转大写
  19. oracle omf管理,Oracle OMF文件管理
  20. python语言程序设计 陈东_程序设计导论python语言实践学习笔记2

热门文章

  1. python安装plotly教程_python plotly 使用教程
  2. ext2、ext3、ext4文件系统区别
  3. Android游戏引擎汇总,android开发模拟器
  4. NCRE计算机等级考试三级 | 信息安全笔记
  5. 跟我一起写大虾网(第0天)
  6. 为什么“隐性知识”比“刻意练习”更重要?
  7. 海龟编辑器 html版,海龟编辑器官方版
  8. axure创建自定义元件库
  9. mysql数据库开发环境_MySQL数据库教程-环境与集成开发工具
  10. win10安装马上6卡在icon.ico的一种解决方案