Servlet及JDBC、dao简单运用

来源:互联网 发布:web网络考勤管理系统 编辑:程序博客网 时间:2024/05/29 18:59

Servlet

在服务器上运行以处理客户端请求并作出响应的程序。

 init() . service() . destroy()

主要使用的是HttpServlet ,(主要处理HTTP协议的请求和响应)

doGet()   以get请求调用时使用

doPost()  以post请求调用时使用


JDBC

Jdbc是java数据库连接技术的简称

Jdbc  API:和数据库建立连接、执行SQL语句、处理结果。

查询用executeQuery()

增删改要用executeUpdate()

 

DAO:数据存取对象


分层模式:是一种结构模式(表示层、业务逻辑层、数据库访问层)

表示层依赖业务逻辑层,业务逻辑层依赖数据库访问层

上层依赖下一层,下层不能调用上层。(不能跨层)


例子:


1.首先建一个dao包 ,然后创建一个类--BaseDao.java             (里面放入与数据库相连接的代码等)

package second.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class BaseDao {
    
    private final String URL="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    private final String USER="*****";
    private final String PWD="******";
    
    private Connection conn;
    private PreparedStatement pstmt;
    private ResultSet rs;
    
    static{
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    private Connection getConnection(){
        Connection conn=null;
        try {
            conn=DriverManager.getConnection(URL,USER,PWD);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
    
    public int executeUpdate(String sql,List<Object> params){
        int count=0;
        //数据库连接
        conn=getConnection();
        
        try {
            pstmt=conn.prepareStatement(sql);
            //设置参数
            if(params!=null){
                for(int i=0;i<params.size();i++){
                    pstmt.setObject(i+1, params.get(i));
                }
            }
            count=pstmt.executeUpdate();
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            closeAll();
        }
        
        return count;
    }
    
    public ResultSet executeQuery(String sql,List<Object> params){
        conn=getConnection();
        
        try {
            pstmt=conn.prepareStatement(sql);
            if(params!=null){
                for(int i=0;i<params.size();i++){
                    pstmt.setObject(i+1, params.get(i));
                }
            }
            
            rs= pstmt.executeQuery();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        return rs;
    }
    
    public void closeAll(){
        
        try {
            if(rs!=null){
                rs.close();
                rs=null;
            }
            if(pstmt!=null){
                pstmt.close();
                pstmt=null;
                
            }
            if(conn!=null){
                conn.close();
                conn=null;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    
}

2.数据库中含有相应的表(user)及类User ,  servlet中的内容

package second.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import second.entity.Cusinfo;
import second.entity.User;
import second.service.CusinfoService;
import second.service.LoginBiz;
import second.service.impl.CusinfoServiceImpl;
import second.service.impl.LoginBizImpl;


public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String name=req.getParameter("username");
        String pwd=req.getParameter("userpwd");
        
        LoginBiz loginBiz= new LoginBizImpl();
        User user=loginBiz.login(name, pwd);
        if(user!=null){
            
            req.setAttribute("cusinfos", list);
            //转发
            RequestDispatcher rd = req.getRequestDispatcher("/login/dilogin_success.jsp");
            rd.forward(req, resp);
        }else{
            //重定向
            resp.sendRedirect(req.getContextPath()+"/login/login_fail.jsp");
        }
    }

}


package second.entity;

public class User {
    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;
    }
    private String name;
    private String pwd;

}



3.相应的接口及其实现


import second.entity.User;

public interface LoginBiz {
    public User login(String name,String pwd);
}


import second.dao.AccountDao;
import second.dao.impl.AccountDaoImpl;
import second.entity.User;
import second.service.LoginBiz;


public class LoginBizImpl implements LoginBiz {

    private  AccountDao accountDao =new AccountDaoImpl() ;
    
    @Override
    public User login(String name, String pwd) {
        User user = accountDao.findUserByName(name);
        if(user!=null && user.getPwd().equals(pwd)){
            return user;
        }
        return null;
    }
}

package second.dao;

import second.entity.User;


public interface AccountDao {
    public User findUserByName(String name);
}



import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import second.dao.AccountDao;
import second.dao.BaseDao;
import second.entity.User;


public class AccountDaoImpl extends BaseDao implements AccountDao{
    
    public User findUserByName(String name){
        User user = null;
        String select ="select uname,pwd from accounts where uname=?";
        List<Object> params = new ArrayList<Object>();
        params.add(name);
        
        ResultSet rs= this.executeQuery(select,params);
        
        try {
            if(rs.next()){
                user = new User();
                user.setName(rs.getString("uname"));
                user.setPwd(rs.getString("pwd"));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            this.closeAll();
        }
        return user;
            
    }
}

4.jsp中的内容,有相应的验证

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>登录页面</title>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-1.10.2.js"></script>
    <script type="text/javascript">
        $(function(){
            $("#myname").blur(function(){
                var uname=$("#myname").val();
                if(uname==""){
                    $("#nameTip").html("用户名不能为空!!");
                    //alert("用户名不能为空!!");
                    return;
                }else{
                    $("#nameTip").html("   ");
                }
            });
            $("#mypwd").blur(function(){
                var upwd=$("#mypwd").val();
                if(upwd==""){
                    $("#pwdTip").html("密码不能为空!!!");
                    return;
                }else{
                    $("pwdTip").html(" ");
                }
            });
        });
    </script>

  </head>
 
  <body>
       <form action="<%=request.getContextPath()%>/loginServlet.action" method="post" >
           <table>
               <tr>
                   <td>用户名:</td>
                   <td>
                       <input type="text" name="username" id="myname"><span id="nameTip"></span>
                   </td>
               </tr>
               <tr>
                   <td>密码:</td>
                   <td>
                       <input type="password" name="userpwd" id="mypwd"><span id="pwdTip"></span>
                   </td>
               </tr>
               <tr>
                   <td>
                       <input type="submit" value="登录" >
                   </td>
                   <td>
                       <input type="reset" value="重置">
                   </td>
               </tr>
           </table>
       </form>
  </body>
</html>





0 0
原创粉丝点击