サーブレットでのJDBCによるデータベースへのアクセス
21589 ワード
(1)新規ユーザレジストリページindex.jsp
(2)ユーザの登録情報をカプセル化するためのUserInfoというJavaBeanクラスを新規作成する.
(3)servletでJDBCを使用してデータベースにアクセスする.データベースに接続されたコードを個別にクラスに書くことで、他の機能モジュールでコードの再利用が可能になります.MySQLDBConという名前のクラスを新規作成します.このクラスには、主にデータベース接続を確立する方法が含まれています.
(4)ユーザー登録情報をデータベースに保存する方法と、このインスタンスを取得する静的方法を含むLoginDaoという名前のクラスを新規作成する
(5)新規にLoginServiceという名前のServiceクラスを作成し、このクラスのdoPost()メソッドでフォームによって発行されたユーザ登録情報を取得し、これらの情報をユーザ情報クラスUserInfoにカプセル化し、LoginDaoのメソッドを呼び出して登録情報をデータベースに保存する
(6)エラーページerrorpageを新規作成する.jsp、エラー情報を表示します.
データベース接続を取得するコード、フォームデータ、およびデータベースの操作は独立したクラスにカプセル化され、サーブレットはこれらのクラスを呼び出すだけで、コントローラ(Controller)の役割としてサーブレットが十分に発揮されます.
"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)の役割としてサーブレットが十分に発揮されます.