核心提示:一个小案例蜗牛最近在学javaweb,据说这是一个很难的技术,蜗牛在门外饶了大半年的圈子,终于稍微进来一点点了。首先,蜗牛也很奇怪,为啥连接数据库这个看起来应该很难的东西,几行代码就搞清楚了。另外,真...
一个小案例
蜗牛最近在学javaweb,据说这是一个很难的技术,蜗牛在门外饶了大半年的圈子,终于稍微进来一点点了。
首先,蜗牛也很奇怪,为啥连接数据库这个看起来应该很难的东西,几行代码就搞清楚了。
另外,真的,学好sql语句才是王道啊。
我是看韩顺平老师的教程学会的,下面的代码也是韩顺平老师的。不过韩老师用的是sqlserver,我用的是mysql,换了一下里面的内容。
ps:韩顺平老师的servlet和jsp真的是很好的教程。
这里只是写上代码,防止自己忘记了。
package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class Login extends HttpServlet { //处理get请求 //req: 用于获得客户端(浏览器)的信息 //res: 用于向客户端(浏览器)返回信息 public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑 try { //中文乱码,虽然我加了,中文还是会乱码 res.setContentType("text/html;charset=gbk"); PrintWriter pw=res.getWriter(); //返回登录界面 pw.println("<html>"); pw.println("<body bgcolor=#CED3FF>"); //这里面action是提交到哪个页面,其实是吧信息封装到request之中了。 pw.println("<h1>登录界面</h1>"); pw.println("<form action=LoginCl method=post>"); pw.println("用户名:<input type=text name=usrename><br>"); pw.println("密码:<input type=password name=passwd><br>"); pw.println("<input type=submit value=login><br>"); pw.println("</form>"); pw.println("</body>"); pw.println("</html>"); } catch (Exception ex) { ex.printStackTrace(); } } //处理post请求 //req: 用于获得客户端(浏览器)的信息 //res: 用于向客户端(浏览器)返回信息 public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res); } }
package com.tsinghua; import java.sql.*; import javax.sql.*; import javax.naming.*; public class ConnDB { private Connection ct=null; public Connection getConn(){ //这是使用jdbc的方式来连接数据库 try { //1加载驱动,这个是连接mysql的驱动。 Class.forName("com.mysql.jdbc.Driver"); //得到连接,这三个参数是url,用户,密码,安装mysql的时候奥配置用户名和密码 ct=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/spdb1" , "root" , "1123"); } catch (Exception ex) { ex.printStackTrace(); } System.out.println ("连接完成"); return ct; /*使用数据源连接池的方式连接数据库 try { //创建一个上下文环境 Context con=new javax.naming.InitialContext(); //通过con得到数据源 DataSource ds=(DataSource) con.lookup("java:comp/env/shunping"); ct=ds.getConnection(); System.out.println ("使用连接池的方式"); } catch (Exception ex) { ex.printStackTrace(); } return ct;*/ } }
验证用户的下面这个代码其实没什么可讲的,就是新建了一个bean类,去调用其中的方法。
ps:里面有很多没用的代码,为了以后要用先不删除
//用户验证servlet //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java.sql.*; public class LoginCl extends HttpServlet { //重写init函数 public void init(){ try { System.out.println ("inti 被调用"); } catch (Exception ex) { ex.printStackTrace(); } } //重写destroy函数 public void destroy(){ try { System.out.println ("destroy 被调用"); } catch (Exception ex) { ex.printStackTrace(); } } //处理get请求 //req: 用于获得客户端(浏览器)的信息 //res: 用于向客户端(浏览器)返回信息 public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑 Connection ct=null; Statement sm=null; ResultSet rs=null; try { //接受用户名和密码 String u=req.getParameter("usrename"); String p=req.getParameter("passwd"); //调用UserBeanCl,1.创建一个对象 UserBeanCl ubc=new UserBeanCl(); //2.使用UserBeanCl的方法 if(ubc.checkUser(u,p)){ try { PrintWriter pw=res.getWriter(); //返回登录界面 pw.println("admin"); } catch (Exception ex) { ex.printStackTrace(); } }else{ try { PrintWriter pw=res.getWriter(); //返回登录界面 pw.println("BUPIPEI"); } catch (Exception ex) { ex.printStackTrace(); } } } 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(); } } } //处理post请求 //req: 用于获得客户端(浏览器)的信息 //res: 用于向客户端(浏览器)返回信息 public void doPost(HttpServletRequest req,HttpServletResponse res){ this.doGet(req,res); } }
一个Bean代码。因为是按着mvc的形式写的于是将功能抽象成了Bean。
//这是一个处理类(处理users表)<--->操作UserBean //业务逻辑在这里 package com.tsinghua; import java.sql.*; import java.util.*; public class UserBeanCl { //业务逻辑 private Connection ct=null; private Statement ps=null; private ResultSet rs=null; //验证用户 public boolean checkUser(String u,String p){ boolean b=false; try { //得到连接,下面的控制台输出都是调试的时候用的 ConnDB cd=new ConnDB(); System.out.println ("连接完成userBeancl"); ct=cd.getConn(); System.out.println ("又回来了"); ps=ct.createStatement(); System.out.println ("查询有问题"); //注意sql语句一定要写对。 rs=ps.executeQuery("select passwd from users where username = 'admin'"); System.out.println (rs); if(rs.next()){ String dbPasswd=rs.getString(1); System.out.println (dbPasswd); if(dbPasswd.equals(p)){ b=true; } } } catch (Exception ex) { ex.printStackTrace(); }finally{ this.close(); } return b; } //关闭资源 public void close(){ try { if(rs!=null){ rs.close(); rs=null; } if(ps!=null){ ps.close(); ps=null; } if(ct!=null){ ct.close(); ct=null; } } catch (Exception ex) { ex.printStackTrace(); } } }