优化
?
在test2的基础上做修改。
创建util包,在utils包中创建JdbcUtils.java工具类。为项目提供数据库连接和释放资源。内容如下:
JdbcUtils.java
package util;
?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
?
public class JdbcUtils {
?
??? //mysql数据库连接协议;mytest为数据库名称
??? private static String url = "jdbc:mysql://localhost:3306/mytest";
??? private static String user = "root";//mysql数据库用户名
??? private static String password = "root";//mysql的密码
?
??? private JdbcUtils() {
??? }
?
??? // 加载驱动类
??? static {
?????? try {
?????????? Class.forName("com.mysql.jdbc.Driver");
?????? } catch (ClassNotFoundException e) {
?????????? throw new ExceptionInInitializerError(e);
?????? }
??? }
?
??? // 得到连接
??? public static? Connection getConnection() throws SQLException {
?????? return DriverManager.getConnection(url, user, password);
??? }
?
??? // 释放资源
??? public static void free(ResultSet rs, Statement st, Connection conn) {
?????? try {
?????????? if (rs != null) {
????????????? rs.close();
?????????? }
?????? } catch (SQLException e) {
?????????? e.printStackTrace();
?????? } finally {
?????????? try {
????????????? if (st != null) {
????????????????? st.close();
????????????? }
?????????? } catch (SQLException e) {
????????????? e.printStackTrace();
?????????? } finally {
????????????? try {
????????????????? if (conn != null) {
???????????????????? conn.close();
????????????????? }
????????????? } catch (SQLException e) {
????????????????? e.printStackTrace();
????????????? }
?????????? }
?????? }
??? }
}
?
前面我们写了一个注册的例子,现在我们在前面基础上写一个登陆的类。创建LoginServlet.java,处理登陆操作。内容如下:
LoginServlet.java
package servlet;
?
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
?
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
?
import util.JdbcUtils;
?
public class LoginServlet extends HttpServlet {
?
??? public void doGet(HttpServletRequest request, HttpServletResponse response)
?????????? throws ServletException, IOException {
?????? doPost(request,response);
??? }
?
??? public void doPost(HttpServletRequest request, HttpServletResponse response)
?????????? throws ServletException, IOException {
?????? String registerName = request.getParameter("name");
?????? String registerPassword = request.getParameter("password");
??????
?????? Connection conn = null;
?????? PreparedStatement ps = null;
?????? ResultSet rs = null;
?????? try {
?????????? conn = JdbcUtils.getConnection();
?????????? String sql = "select name,password from user where name=? and password=?";
?????????? ps = conn.prepareStatement(sql);
?????????? ps.setString(1, registerName);
?????????? ps.setString(2, registerPassword);
?????????? rs = ps.executeQuery();
?????????? if(rs.next()){
????????????? String name = rs.getString(1);
????????????? String password = rs.getString(2);
????????????? System.out.println(name+password);
??? ?????????? request.setAttribute("name", name);// 将从数据库获得名字和密码set到request对象里
????????????? request.setAttribute("password", password);
????????????? request.getRequestDispatcher("/login_success.jsp").forward(request,response);
?????????? }else{
????????????? request.getRequestDispatcher("/login_fail.jsp").forward(request,response);
?????????? }
??????????
?????? } catch (SQLException e) {
?????????? e.printStackTrace();
?????? }finally{
?????????? JdbcUtils.free(rs, ps, conn);
?????? }
??? }
?
}
?
新建三个jsp页面――login.jsp 登陆页面;login_success.jsp登陆成功页面;login_fail.jsp登陆失败页面
?
login.jsp 内容如下:
?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <head>
? </head>
? <body>
??? <form action="servlet/LoginServlet" method="post">
??? Plase write your name and password!<br/>
??? name:<input type="text" name="name"/><br/>
??? password:<input type="password" name="password"/>
??? <input type="submit" value="login"/>
??? </form>
? </body>
</html>
?
login_success.jsp 内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <body>
??? <font color="red">login success!</font><br/>
??? <font color="blue">Your name is :</font><%=request.getAttribute("name") %><br/>
??? <font color="blue">Your password is :</font><%=request.getAttribute("password") %>
? </body>
</html>
?
login_fail.jsp 内容如下:
?
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <body>
??? <font color="red">login fail!</font><br/>
? </body>
</html>
?
测试地址:http://localhost:8080/test2/login.jsp
?