一个小案例

一个小案例

蜗牛最近在学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("");
            pw.println("");


            //这里面action是提交到哪个页面,其实是吧信息封装到request之中了。
            pw.println("

登录界面

"
); pw.println("
"); pw.println("用户名:
"
); pw.println("密码:
"
); pw.println("
"
); pw.println(""
); pw.println(""); pw.println(""); } 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();
            }
        }
}

你可能感兴趣的:(web成长记)