(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文件可参考之前博客

运行截图:

猜你喜欢

转载自blog.csdn.net/z774884795/article/details/84646994