Login.java
//登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class Login extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) { //业务逻辑 try{ //中文乱码 //浏览器默认ISO-8859 res.setContentType("text/html;charset=gbk"); PrintWriter pw = res.getWriter(); //返回登录界面 pw.println("<html>"); pw.println("<body>"); //得到error信息 String info = req.getParameter("info"); if(info != null) { pw.println("<h1>你的用户名或是密码错误!</h1>"); } pw.println("<h1>登录界面</h1>"); pw.println("<form action='loginCl' method=post>"); pw.println("用户名<input type='text' name='username'/><br/>"); pw.println("密码<input type='password' name='userpwd'/><br/>"); pw.println("<input type='submit' value='loing' /><br/>"); pw.println("</form>"); pw.println("</body>"); pw.println("</html>"); } catch(Exception ex) { ex.printStackTrace(); } } //处理get请求 //req用于获得客户端(浏览器)的信息 //res用于向 客户端(浏览器)返回信息 public void doPost(HttpServletRequest req, HttpServletResponse res) { this.doGet(req,res); } }
LoginCl.java
//登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java.sql.*; public class LoginCl extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) { Connection ct = null; Statement sm = null; ResultSet rs = null; //业务逻辑 try{ //接收用户名和密码 String u = req.getParameter("username"); String p = req.getParameter("userpwd"); //连接数据库,三部曲,加载驱动,建立连接 //加载驱动包 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //得到连接 ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","123456"); //创建一个Statement sm = ct.createStatement(); //top 1 会提高查询的效率,否则数据库查询完所有再把结果告诉你 rs = sm.executeQuery("select top 1 passwd from users where userName='"+u+"'"); //executeQuery返回的是一个ResultSet执行查询select语句用Query //executeUpdate返回的是int,因此是执行增加删除和修改 if(rs.next()) { //这说明用户是存在的 String dbPasswd = rs.getString(1); if(dbPasswd.equals(p)) { //真的合法 //合法 //将验证成功的信息写入session //得到session,得到session那张表 HttpSession hs = req.getSession(true); //默认30分钟,为了展示效果下面修改销毁时间 //该方法是按照秒来算的 hs.setMaxInactiveInterval(30); //写入属性 hs.setAttribute("uname",u); //跳转到welcome res.sendRedirect("wel?uname="+u+"&upass="+p); } }else{ //说明用户名不存在 //不合法 //写你要到的Servlet的那个URL res.sendRedirect("login"); } } catch(Exception ex) { ex.printStackTrace(); }finally{ try{ if(rs != null) rs.close(); if(sm != null) sm.close(); if(ct != null) ct.close(); }catch(Exception ex){ ex.printStackTrace(); } } } //处理get请求 //req用于获得客户端(浏览器)的信息 //res用于向 客户端(浏览器)返回信息 public void doPost(HttpServletRequest req, HttpServletResponse res) { this.doGet(req,res); } }
Welcome.java
//登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class Welcome extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) { //得到session,得到session那张表 HttpSession hs = req.getSession(true); //返回的是object类型,强转成String String myName = (String)hs.getAttribute("uname"); //得到从logincl传递的用户名和密码 //判断 if(myName == null) { try { //非法登录 res.sendRedirect("login?info=error1"); //立即直接返回 return; }catch(Exception ex) { ex.printStackTrace(); } } //业务逻辑 try{ PrintWriter pw = res.getWriter(); //返回登录界面 pw.println("Welcome,hello,"+myName); } catch(Exception ex) { ex.printStackTrace(); } } //处理get请求 //req用于获得客户端(浏览器)的信息 //res用于向 客户端(浏览器)返回信息 public void doPost(HttpServletRequest req, HttpServletResponse res) { this.doGet(req,res); } }