(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為空method為get時,提交資料時資料會全部顯示在位址列中
action為空method為post時,提交資料時位址列中不會出現任何資訊,常用方式為post,post提交方式更為安全
-->
<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類中age為int型別,故需要型別轉換
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)私有成員變數
* 3)get/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檔案可參考之前部落格
執行截圖: