1. 程式人生 > >JavaWeb實現登入註冊與驗證碼。

JavaWeb實現登入註冊與驗證碼。

寫JavaWeb的準備工作:
首先準備好資料庫和Myeclipse,這裡以mysql為例,再下載好SQL的圖形化操作介面SQLyog,在資料庫中建張表 這裡寫圖片描述
詳細步驟:
在Myeclipse 中新建一個Web工程:
這裡寫圖片描述
在src下建三個包ServletPackge,ModelPackage,TestPackage.
分別存放即將要建立的Servlet,和通過java連線資料庫對資料庫進行基本操作的java程式和測試程式。
導jar包:
將mysql-connector-java-5.0.3-bin .jar包匯入到 WEN-INF下的lib資料夾,右擊build path將包新增到Referenced Libraries下呈奶瓶狀。這裡寫圖片描述


在ModelPackage中寫入:

程式碼:add.java主要是向是資料庫中新增資料
package Mod;

import java.sql.DriverManager;
import java.sql.SQLException;




public class add {
    public static void main(String[] args) {

        final String driver ="com.mysql.jdbc.Driver";
        final String url ="jdbc:mysql://localhost:3306/students"
; try { Class.forName(driver); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { java.sql.Connection conn = DriverManager.getConnection(url,"root"
,"1234"); String sql ="insert into student(name) value=(?)"; java.sql.PreparedStatement pst =conn.prepareStatement(sql); pst.setString(1, "benben"); System.out.println("完成"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } DBOperator.java主要是對資料庫的連線操作: package Mod; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBOperator { private static final String driver ="com.mysql.jdbc.Driver"; private static final String url ="jdbc:mysql://localhost:3306/students"; static{ try { Class.forName(driver); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() { Connection conn =null; try { conn =(Connection) DriverManager.getConnection(url,"root","1234"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static void close(ResultSet rs, Statement st, Connection conn) { try { if(rs != null) { rs.close(); } if(st != null) { st.close(); } if(conn != null) { conn.close(); } }catch(Exception ex) { ex.printStackTrace(); } } public static void close(Statement st, Connection conn) { close(null,st,conn); } } student.java儲存學生的id,name,tel資訊與資料庫中相對應: package Mod; public class student { private int id; private String name; private int tel; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getTel() { return tel; } public void setTel(int tel) { this.tel = tel; } } StudentManger.java這是一個介面 寫入兩個方法分別對應登入時使用的checkLogin和註冊時用的add方法。 public interface StudentManger { public boolean add(student S); public boolean checkLogin(int tel, String name); } StudentMangerImpl 是上面介面的實現方法: package Mod; import java.sql.SQLException; //import com.mysql.jdbc.ResultSet; public class StudentMangerImpl implements StudentManger { public boolean add(student S) { boolean flag = false; java.sql.Connection conn = null; java.sql.PreparedStatement pst = null; conn = DBOperator.getConnection(); String sql = "insert into student(name,tel) value(?,?) "; try { pst = conn.prepareStatement(sql); pst.setString(1, S.getName()); pst.setInt(2, S.getTel()); int rows=pst.executeUpdate(); if(rows>0){ flag=true; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return flag; } @Override public boolean checkLogin(int tel, String name) { boolean flag=false; //student S = new student(); java.sql.Connection conn = null; java.sql.Statement st =null; java.sql.ResultSet rs = null; try { conn=DBOperator.getConnection(); String sql = "select * from student where tel="+tel; st=conn.createStatement(); rs = st.executeQuery(sql); while(rs.next()){ if(rs.getString("name").equals(name)); flag =true; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { DBOperator.close(rs, st, conn); } return flag; } }

在TestPackage中寫:

ConnectionTest.java對是否成功連線資料庫進行測試:
import Mod.DBOperator;

public class ConnectionTest {
    public static void main(String[] args) {
        java.sql.Connection conn = DBOperator.getConnection();
        if (conn != null) {
            System.out.println("連線成功!");
        }

    }

}
在testStudent:
package Test;

import java.sql.DriverManager;
import java.sql.SQLException;

import Mod.DBOperator;
import Mod.StudentMangerImpl;
import Mod.student;



public class testStudent {
    public static void main(String[] args) {
        final String driver ="com.mysql.jdbc.Driver";
        final String url ="jdbc:mysql://localhost:3306/students";

        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        DBOperator d= new DBOperator();
        try {
            java.sql.Connection conn = DriverManager.getConnection(url,"root","1234");
            if(conn!=null){
                System.out.println("連結成功");
            }
            else{
                System.out.println("連結失敗");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        StudentMangerImpl N = new StudentMangerImpl();
        student B =new student();
        B.setId(6);
        B.setName("yang");
        B.setTel(5);

        if(N.add(B)){
            System.out.println("新增成功");
        }
        else{
            System.out.println("新增失敗");
        }
        StudentMangerImpl S = new StudentMangerImpl() ;
        if(S.checkLogin(5, "yang")){
            System.out.println("成功");
        }
        else{
            System.out.println("失敗");
        }
    }

}

JSP的建立:
在WebRoot下建立index.jsp,load.jsp,zhuce.jsp分別是一個跳轉,一個登入介面和註冊成功介面
index.jsp程式碼:
點選跳轉
load.jsp程式碼:
在中新增
function reLoadCode(){
var t =new Date().getTime();
document.getElementById("imagecode").src="ImageServlet?t"+t;
}

在中寫:

<h1>使用者管理系統</h1>
    <form action="denglu" method="post">
      學&nbsp;號:<input name="id" type="text"><br/>
    <p></p>
    姓&nbsp;名: <input name="name" type="text"><br/>
      <p></p>
    電&nbsp;話:  <input name="tel" type="text"><br/>  
    <p></p>
     驗證碼:<input name="checkcode" type="text">
     <p></p> 
 <img alt="驗證碼" src="ImageServlet" id = "imagecode">
 <a href="javaScript:reLoadCode()">看不清</a><br/>

  <input type="submit" value="登入">&nbsp;&nbsp;&nbsp;&nbsp;<a href ="Main.jsp">新使用者</a>
    </form>
    </center>

在註冊頁面寫:

<form action="zhuce" method="post">
    學&nbsp;號:<input name="id" type="text"><br/>
    <p></p>
    姓&nbsp;名: <input name="name" type="text"><br/>
      <p></p>
    電&nbsp;話:  <input name="tel" type="text"><br/>  <p></p>
  <input type="submit" value="註冊">
    </form>
    </center>

其中action=”??”要與建立的servlet的URL地址相匹配:
這裡寫圖片描述

每一個action 的值都要匹配一個一個servlet。
寫Servlet:
load.java:

import java.io.IOException;
import java.io.PrintWriter;

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

import Mod.StudentManger;
import Mod.StudentMangerImpl;



public class denglu extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public denglu() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);

    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        request.setCharacterEncoding("GB18030");
        response.setCharacterEncoding("GB18030");

        int tel = Integer.parseInt(request.getParameter("tel"));
        String name = request.getParameter("name");
        String checkcode = request.getParameter("checkcode");
        String piccode = (String) request.getSession().getAttribute("piccode");


        Mod.student S = new Mod.student();
        StudentManger M = new StudentMangerImpl();
         boolean flag ;
        flag=M.checkLogin(tel, name);

        if(flag==true&&checkcode.equalsIgnoreCase(piccode)){
            response.sendRedirect("index.jsp");

        }
        else{
            response.setContentType("textml");
            PrintWriter out = response.getWriter();
            out.print("失敗!");
        }
    }


    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

zhuce.java

import java.io.IOException;

import java.io.PrintWriter;

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

import Mod.StudentManger;
import Mod.StudentMangerImpl;
import Mod.student;


public class zhuce extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public zhuce() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);

    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {




        request.setCharacterEncoding("GB18030");
        response.setCharacterEncoding("GB18030");

        StudentManger S = new StudentMangerImpl();
        student M = new student();

        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        int tel =Integer.parseInt(request.getParameter("tel"));


        M.setId(id);
        M.setName(name);
        M.setTel(tel);
        boolean flag = S.add(M);
        if(flag ==true){
            response.sendRedirect("load.jsp");
        }
        else{
            response.setContentType("textml");
            PrintWriter out = response.getWriter();
            out.print("失敗!");
        }
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

ImageServlet.java

import java.io.IOException;

import java.io.PrintWriter;

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

import Mod.StudentManger;
import Mod.StudentMangerImpl;
import Mod.student;


public class zhuce extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public zhuce() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);

    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {




        request.setCharacterEncoding("GB18030");
        response.setCharacterEncoding("GB18030");

        StudentManger S = new StudentMangerImpl();
        student M = new student();

        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        int tel =Integer.parseInt(request.getParameter("tel"));


        M.setId(id);
        M.setName(name);
        M.setTel(tel);
        boolean flag = S.add(M);
        if(flag ==true){
            response.sendRedirect("load.jsp");
        }
        else{
            response.setContentType("textml");
            PrintWriter out = response.getWriter();
            out.print("失敗!");
        }
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

工作已經全部完成。