サーブレットでのJDBCによるデータベースへのアクセス


(1)新規ユーザレジストリページindex.jsp
"java" import="java.util.*" pageEncoding="UTF-8"%>

<html>
  <head>
  head>

  <body>
    <form action="login" method="post" id="myform">
        <table align="center">
            <tr>
                <td>td>
                <td><input type="text" name="name" title="   "/>td>
            tr>
            <tr>
                <td>td>
                <td><input type="password" name="pwd" title="  " />td>
            tr>
            <tr>
                <td>td>
                <td>
                    <input type="radio" name="sex" value=" " title="  "/> 
                    <input type="radio" name="sex" value=" " title="  "/> 
                td>
            tr>
            <tr>
                <td>td>
                <td><input type="text" name="age" title="  " />td>
            tr>
            <tr>
                <td>Email:td>
                <td><input type="text" name="email" title="Email" />td>
            tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="button" value="   " onclick="check()"/>
                    <input type="reset" value="   " />
                td>
            tr>
        table>
    form>
  body>
  <script type="text/javascript">
  //             
    function check(){
        var myform = document.getElementById("myform");
        for(var i=0; iif(myform.elements[i].value == ""){
                alert(myform.elements[i].title + "    ");
                myform.elements[i].focus();
                return;
            }
        }
    myform.submit();    //      input       button  ,       , js                。
    }
  script>
html>

(2)ユーザの登録情報をカプセル化するためのUserInfoというJavaBeanクラスを新規作成する.
package com.user;

/**
 * UerInfo JavaBean ,             
 * 
 * @author yilong
 * 
 */
public class UserInfo {
    private String userName;
    private String userPwd;
    private String userSex;
    private int userAge;
    private String email;

    public UserInfo() {
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}


(3)servletでJDBCを使用してデータベースにアクセスする.データベースに接続されたコードを個別にクラスに書くことで、他の機能モジュールでコードの再利用が可能になります.MySQLDBConという名前のクラスを新規作成します.このクラスには、主にデータベース接続を確立する方法が含まれています.
package com.dbCon;

import java.sql.Connection;
import java.sql.DriverManager;

public class MySQLDBCon {
    private static Connection conn = null;

    public static Connection getCon() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String user = "root";
            String pwd = "123456";
            String url = "jdbc:mysql://localhost:3306/login_user";
            conn = DriverManager.getConnection(url, user, pwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
}

(4)ユーザー登録情報をデータベースに保存する方法と、このインスタンスを取得する静的方法を含むLoginDaoという名前のクラスを新規作成する
package com.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import com.dbCon.MySQLDBCon;
import com.user.UserInfo;

public class LoginDao {
    private static LoginDao instance = null;

    public static LoginDao getInstance() {
        if (instance == null) {
            instance = new LoginDao();
        }
        return instance;
    }

    //         
    public boolean saveUser(UserInfo user) {
        Connection conn = null;
        try {
            conn = MySQLDBCon.getCon(); //        
            String sql = "insert into userinfo(userName,userPwd,userSex,userAge,email) values(?,?,?,?,?)"; // insert
                                                                                                            // SQL  =
            PreparedStatement pstmt = conn.prepareStatement(sql); //         SQL   PreparedStatement  
            pstmt.setString(1, user.getUserName());
            pstmt.setString(2, user.getUserPwd());
            pstmt.setString(3, user.getUserSex());
            pstmt.setInt(4, user.getUserAge());
            pstmt.setString(5, user.getEmail());
            pstmt.executeUpdate(); //     insert  
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}

(5)新規にLoginServiceという名前のServiceクラスを作成し、このクラスのdoPost()メソッドでフォームによって発行されたユーザ登録情報を取得し、これらの情報をユーザ情報クラスUserInfoにカプセル化し、LoginDaoのメソッドを呼び出して登録情報をデータベースに保存する
package com.servlet.login;

import java.io.IOException;

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

import com.dao.LoginDao;
import com.user.UserInfo;

public class LoginServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        request.setCharacterEncoding("UTF-8"); //            , JSP             

        /**               **/
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        String sex = request.getParameter("sex");
        String age = request.getParameter("age");
        int userAge = 0;
        if (age != null && !age.equals("")) {
            userAge = Integer.parseInt(age);
        }
        String email = request.getParameter("email");

        /**                       **/
        UserInfo user = new UserInfo();
        user.setUserName(name);
        user.setUserPwd(pwd);
        user.setUserSex(sex);
        user.setUserAge(userAge);
        user.setEmail(email);
        boolean flag = LoginDao.getInstance().saveUser(user); //              
        // [request.getRequestDispatcher] [response.sendRedirect]         :
        //      ,URL      ,      URL     。  ,           ,                 。
        if(flag){       //       ,   success.jsp  
            request.getSession().setAttribute("userName", user.getUserName());
            request.getRequestDispatcher("success.jsp").forward(request, response);
        }else{      //   ,   errorpage.jsp  ,      !
            response.sendRedirect("errorpage.jsp");
        }
    }

}

(6)エラーページerrorpageを新規作成する.jsp、エラー情報を表示します.
"java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>    title>
head>
<body>
    <h2>    ,     !h2>
    
    <a href="javascript:history.back()">  a>

    
    
body>
html>

データベース接続を取得するコード、フォームデータ、およびデータベースの操作は独立したクラスにカプセル化され、サーブレットはこれらのクラスを呼び出すだけで、コントローラ(Controller)の役割としてサーブレットが十分に発揮されます.