首页 > 编程 > Java > 正文

JSP、Servlet与JavaBean实现从表单传输到数据库验证完成登录功能

2019-11-08 01:42:43
字体:
来源:转载
供稿:网友

这次我们做jsp、Servlet与javaBean实现从表单传输到数据库验证完成登录功能,如果有一些JAVA和HTML的基础的话,学习jsp是比较容易的!

我们从业务流程来一步步解释

表单Form

<form action="servlet/LoginServlet"> <div class="login form"> <div class="group"> <div class="group-ipt email"> <input type="text" name="id" id="email" class="ipt" value="" placeholder="账号" required> </div> <div class="group-ipt passWord"> <input type="password" name="PSD" id="password" class="ipt" value="" placeholder="输入您的登录密码" required> </div> </div> </div> <div class="button"> <button type="submit" class="login-btn register-btn" id="button">登录</button> </div> </form>

代码所属页面展示

登录界面展示 这是一个登录界面对应的表单代码,他实现的是接收用户填写的账号和密码,并且在点击了登陆按钮后提交到指定的服务Servlet中,我们可以看到账号和密码的输入框代码中都有一个“name”的属性,这个属性作为唯一标识符在Servlet中的接收会使用到,十分的重要,登录按钮的类型“type”属性是“submit”,提交的意思,就是在点击了这个按钮之后,会跳转到form中的“action”属性所指定的地方,并将表单中所有的数据传递过去,action的地址可以是任意地址,跳转服务的写法是“servlet/服务名,也可以跳到其他HTML页面,例如“register.html”

服务Servlet

在上面的表单中,表单的action传递地址是LoginServlet(登录服务),我们首先来创建一个LoginServlet

项目列表

这是myeclipse的web项目列表,我们将JSP和HTML代码文件放在WebRoot中,将Servlet和JavaBean等工具类放在src中,可以在src中添加包进行分类存储,我们在servlet包中添加一个LoginServlet吧!

创建servlet1

选中包后点击右键选择new,再选择Servlet,在弹出的框中填写好服务名后点击finish就可以快速完成服务创建

创建servlet2

在创建完成后会在项目的web.xml文件中生成配置代码,这是myeclipse的优点之一,有的软件不会自动配置就需要自己编写,一共有两个代码段,第一个是服务的信息,第二个是服务地址的映射,在前面的action中调用服务servlet/LoginServlet的时候,就会根据服务名找到对应的地址进行跳转。

web的xml

<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>LoginServlet</servlet-name> <servlet-class>servlet.LoginServlet</servlet-class> </servlet><servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping>

在服务的代码中处理数据的就是这两个方法,doGet和doPost,如果不清楚具体使用的哪一种方法就使用统一的方法,我的方法名叫做handle

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { handle(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { handle(request,response); }

具体的数据处理方法

String id=request.getParameter(“id”); String psd=request.getParameter(“psd”); 这两行是对数据的接收,根据先前的name属性作为标识符,将内容接收并保存在String中 User user=new User(id,psd); int type=User.login(user); 在这里使用了一个User对象,并将接收到的账号密码赋值给对象,并且在下一行调用了login方法,接收方法返回的结果,接下来需要讲到JavaBean 之后的代码就是根据返回结果进行处理和跳转

PRivate void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id=request.getParameter("id"); String psd=request.getParameter("psd"); //String toWeb=request.getParameter("toWeb"); User user=new User(id,psd); int type=User.login(user); switch(type){ case 1: Httpsession session = request.getSession(); session.setAttribute("userName", id); response.sendRedirect("../index.jsp"); break; case -1: case -2: } }

类与对象JavaBean

JSP就是采用了类与对象的思想处理问题,所以逻辑非常的清晰,登录服务中用户登录的行为,变换为类与对象的语言就是一个用户对象使用了登录的方法,并且得到登陆结果,所以很自然的,我们就需要一个用户类,和一个登录方法

首先创建了类过后,我们填写上需要的属性和构造方法和set、get方法,之后再编写业务逻辑所需的方法

public class User { private String id="";//编号 private String nickname="";//昵称 private String psd="";//密码 private int type=1;//类型}

登录方法的编写

我们是接收了一个user对象,所以我们先得到账号和密码,然后编写sql语句(这是一个查找user表的sql语句),得到数据库的查找结果,再然后对查找结果进行遍历和匹配,如果账号密码都匹配上了,则返回用户类型,否则返回初始的-2表示失败

/** * 这是登录方法 * @param user 用户 * @return 用户类型 */ public static int login(User user){ int type=-2;//返回类型,-1不存在或停用 String id=user.getId();//获取用户名 String psd=user.getPsd();//获取密码 String sql="SELECT * FROM user"; ResultSet rs=Db.select(sql);//sql执行结果 try { while(rs.next()){ String id1=rs.getString("user_id"); String psd1=rs.getString("user_psd"); //匹配成功,返回成功 if(id.equals(id1)&&psd.equals(psd1)){ type=rs.getInt("user_type"); break; } } } catch (SQLException e) { e.printStackTrace(); } return type; }

那么我们是如何获取到数据库的内容的呢

我们看到我们使用了Db数据库工具类(自己编写的)中的select方法,他执行语句并返回结果ResultSet,其中的各个对象都有说明,就不一一解释

public static ResultSet select(String sql){ System.out.println(sql); Connection con = null;//数据库连接 Statement stmt = null;//用于执行sql语句 ResultSet rs = null;//sql执行结果 try{ //打开数据库连接 con=Db.getConnection(); //获取数据库执行权力 stmt=con.createStatement(); //得到运行结果表 rs=stmt.executeQuery(sql); }catch(Exception e){ e.printStackTrace(); } return rs; }

获取数据库连接也使用了Db的工具类

连接地址uri是你的数据库地址,jdbc:MySQL://localhost:3306应该都是一样的,不一样的是后面的pretendfun是你创建的数据库的名字,创建连接中的root是你的数据库用户名,123456是你的数据库密码,可能会出各种问题,多问百度是很好的方法

使用数据库工具类是很有必要的,因为会大量的重用,尤其是数据库连接的部分,如果你修改了数据库的密码或者名字,不使用统一类的话就会在所有使用到的地方修改,非常的麻烦,我也是吃过亏的

/** * 创建数据库连接 * @return connection */ public static Connection getConnection() { Connection connection = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); //连接地址 String uri="jdbc:mysql://localhost:3306/pretendfun?useUnicode=true&characterEncoding=UTF-8"; //创建连接 connection=DriverManager.getConnection(uri,"root","123456"); } catch (Exception e) { e.printStackTrace(); } return connection; }

如果以上内容全部正确的话,应该回到了服务的返回阶段了,根据返回的结果进行了成功跳转后,一个登录功能就完成了!



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表