第一步:
创建学生表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文件可参考之前博客
运行截图: