1. 程式人生 > >(jsp二)簡單功能的實現:註冊

(jsp二)簡單功能的實現:註冊

第一步:

建立學生表Student,結構如圖:

第二步:建立新Dynameic Web Project工程

File→new→Next→Dynameic Web Project→勾選Generate web.xml deployment descriptor,意為新增web.xml動態配置檔案→Finish→是否開啟javaee檢視,選擇No。

注:資料夾WebContent中為所有頁面資訊,也可以存放.Class檔案,src檔案中為所有.java檔案(原始碼),新建工程結構如圖:

第三步:實現註冊功能

*如何新建jsp檔案:在WebContent資料夾下新建一個JSP File→Next→File name欄中輸入檔名,因為要完成註冊功能,所以起名為register.jsp→Finish

*新建jsp檔案位置如圖

*Jsp檔案內容解釋:

新建jsp檔案內容如圖

其中,<%@ page language=”java” contentType=”text/html;charset=UTF-8” pageEncoding=”UTF-8”%>是一條指令,指明瞭使用的語言,資料型別(html文字)和字符集。<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">為一個約束,<html></html>為主體結構,包括兩部分,頭<head></head>和身體<body></body>,其中在頭部中<title></title>標籤為標題,也就是本網頁的標題,<body></body>為網頁整題佈局,通過對其新增元件來實現頁面的佈局及資訊的提交與接收。在執行頁面之後,此時Tomacat資料夾中webapps資料夾下會出現StudentProject資料夾,存放了WebContent下所有的內容。而在WEB-INF資料夾下存放了web.xml檔案並在其資料夾下的classes資料夾中存放了.class檔案。lib資料夾,內部存放外部匯入的jar包。Work資料夾中存放的是所有jsp檔案編譯成的原始檔。

*新建servlet檔案步驟

src檔案下新建servlet包下new→Other→Wizards欄下輸入Servlet→Next→輸入Class name→Finish

*新建servlet檔案位置如圖

過程敘述:首先需要可輸入資訊並提交資訊的網頁register.jsp,資訊提交至服務端需要通過servlelt來實現,所以新建StudentServlet,在接收到前端發來的資訊後,需要生成一個學生物件,所以需要新建包entity建立實體類Student,生成學生物件後需要通過saveStudent(Student stu)方法將實體類物件存入到資料庫中,所以需要新建dao包下新建IStudentDAO介面,有了介面需要實現,所以需要新建daoImpl包下新建StudentDAOImpl類實現介面方法,存入資料庫就需要連線資料庫,所以需要新建util包下新建db.properties檔案存放連線資料庫必要資訊與DBUtil類獲取及關閉連線。

工程內部結構如圖:

a.前端程式碼

<title>學員註冊</title>

</head>

<body>

    <!--

    action:表單提交的路徑

    method:表單提交的方式

        get(預設方式)--Servlet--doGet()

        post--Servlet--doPost()

    沒有表單情況下,預設呼叫doGet()方法

    因為在某些時候不知道究竟呼叫doGet方法還是doPost方法,故在Servlet中一般在doPost方法中呼叫doGet方法

    action為空methodget時,提交資料時資料會全部顯示在位址列中

    action為空methodpost時,提交資料時位址列中不會出現任何資訊,常用方式為postpost提交方式更為安全

    -->

    <form action="StudentServlet" method="post">

        姓名:<input type="text" name="sname"><br/>

        密碼:<input type="password" name="spwd" /><br/>

        年齡:<input type="text" name="sage" /><br/>

        <!--單選按鈕傳送值為value屬性的值,若不加value值,則傳送至服務端資料為on,且同一組單選按鈕name值必須相等-->

        性別:<input type="radio" name="ssex" value="" />

              <input type="radio" name="ssex" value="" /><br/>

        <input type="submit" value="提交" />

        <input type="reset" value="清空" />

    </form>

</body>

 

b.StudentServlet程式碼

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //由於瀏覽器端設定編碼集為UTF-8,而伺服器端未設定編碼集,所以伺服器端會預設使用ISO-8859-1編碼集進行解碼,就會出現亂碼,故需要在伺服器端也設定編碼集為UTF-8

        request.setCharacterEncoding("UTF-8");

        //拿到表單傳送的資料

        //getParameter()方法為獲取對應表單值,返回值為字串型別

        //根據表單中的引數名獲取引數值,如果引數名與表單中所寫表單名不一致,則服務端接受到的表單值為null

        String sname=request.getParameter("sname");

        String spwd=request.getParameter("spwd");

        //因為拿到的為字串型別,而student類中ageint型別,故需要型別轉換

        int sage=Integer.parseInt(request.getParameter("sage"));

        String ssex=request.getParameter("ssex");

        //將資料存入到資料庫

        //將資料封裝為Student物件

        Student stu=new Student(sname,spwd,sage,ssex);

        //建立dao物件

        IStudentDAO dao=new StudentDAOImpl();

        //呼叫dao的儲存方法,將stu物件儲存到資料庫

        dao.saveStudent(stu);

       

    }

 

c.Student類程式碼

import java.io.Serializable;

/**

 * 實體類,與資料庫中的student表相對應,屬性即為資料庫表中欄位,

 * 且該類滿足JAVABEAN規範:

 * 1)實現序列化介面

 * 2)私有成員變數

 * 3get/set方法

 * 4)無參構造器

 * @author 2

 *

 */

public class Student implements Serializable{

   

    private Integer sid;

    private String sname;

    private String spwd;

    private Integer sage;

    private String ssex;

   

    public Student() {

        super();

    }

   

    public Student(String sname, String spwd, Integer sage, String ssex) {

        this.sname = sname;

        this.spwd = spwd;

        this.sage = sage;

        this.ssex = ssex;

    }

   

    public Integer getSid() {

        return sid;

    }

   

    public void setSid(Integer sid) {

        this.sid = sid;

    }

   

    public String getSname() {

        return sname;

    }

   

    public void setSname(String sname) {

        this.sname = sname;

    }

 

    public String getSpwd() {

        return spwd;

    }

 

    public void setSpwd(String spwd) {

        this.spwd = spwd;

    }

 

    public Integer getSage() {

        return sage;

    }

 

    public void setSage(Integer sage) {

        this.sage = sage;

    }

 

    public String getSsex() {

        return ssex;

    }

 

    public void setSsex(String ssex) {

        this.ssex = ssex;

    }

   

}

 

d.IStudentDAO程式碼

import entity.Student;

 

public interface IStudentDAO {

 

    public void saveStudent(Student stu);

   

}

 

e.StudentDAOImpl程式碼

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import dao.IStudentDAO;

import entity.Student;

import util.DBUtil;

 

public class StudentDAOImpl implements IStudentDAO {

 

       private Connection conn;

       private PreparedStatement ps;

       private ResultSet rs;

      

       @Override

       public void saveStudent(Student stu) {

              try{

                     conn=DBUtil.getConnection();

                     ps=conn.prepareStatement("INSERT INTO student VALUES(null,?,?,?,?)");

                     ps.setString(1,stu.getSname());

                     ps.setString(2,stu.getSpwd());

                     ps.setInt(3,stu.getSage());

                     ps.setString(4,stu.getSsex());

                     ps.executeUpdate();

              }catch(Exception e){

                     e.printStackTrace();

              }finally{

                     DBUtil.closeConnection(ps, conn);

              }

       }

 

}

注:類中未貼上程式碼即為建立類後保持原始碼未改動,DBUtil類及db.properties檔案可參考之前部落格

執行截圖: