Skip to content

4.Servlet基本应用

4.1 动态响应内容

  • 实体类
package com.neuedu.entity;

import java.util.Date;

/**
 * 项目:      jdbc
 * 类名:       User
 * 创建时间:  2020/11/25  14:40
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io 实体类
 */
public class User {
    private Integer id;
    private String username;
    private String displayname;
    private String password;
    private Date birthday;
    private String gender;
    private String telephone;
    private String email;
    private Date last_logintime;
    private Date create_time;
    private String valid;

    public User() {
    }

    public User(Integer id, String username, String displayname, String password, Date birthday, String gender, String telephone, String email, Date last_logintime, Date create_time, String valid) {
        this.id = id;
        this.username = username;
        this.displayname = displayname;
        this.password = password;
        this.birthday = birthday;
        this.gender = gender;
        this.telephone = telephone;
        this.email = email;
        this.last_logintime = last_logintime;
        this.create_time = create_time;
        this.valid = valid;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getDisplayname() {
        return displayname;
    }

    public void setDisplayname(String displayname) {
        this.displayname = displayname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getLast_logintime() {
        return last_logintime;
    }

    public void setLast_logintime(Date last_logintime) {
        this.last_logintime = last_logintime;
    }

    public Date getCreate_time() {
        return create_time;
    }

    public void setCreate_time(Date create_time) {
        this.create_time = create_time;
    }

    public String getValid() {
        return valid;
    }

    public void setValid(String valid) {
        this.valid = valid;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", displayname='" + displayname + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                ", gender='" + gender + '\'' +
                ", telephone='" + telephone + '\'' +
                ", email='" + email + '\'' +
                ", last_logintime=" + last_logintime +
                ", create_time=" + create_time +
                ", valid='" + valid + '\'' +
                '}';
    }
}
  • Servlet
java
package com.neuedu.servlet;

import com.neuedu.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * 项目:      javaweb1206
 * 类名:       UserListServlet
 * 创建时间:  2020/12/7  11:27
 * 描述 :     用户列表
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 * http://127.0.0.1:8080/web/userList
 */
@WebServlet(name="UserListServlet" ,urlPatterns = "/userList")
public class UserListServlet  extends HttpServlet {

    private List<User> userList = new ArrayList<>();

    public UserListServlet() {
        this.userList.add(new User(1,"admin","管理员",null,null,null,null,null,null,null,null));
        this.userList.add(new User(2,"user1","管理员1",null,null,null,null,null,null,null,null));
        this.userList.add(new User(3,"user2","管理员2",null,null,null,null,null,null,null,null));
        this.userList.add(new User(4,"user3","管理员3",null,null,null,null,null,null,null,null));
        this.userList.add(new User(5,"user4","管理员4",null,null,null,null,null,null,null,null));
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //通知浏览器 内容的类型
        response.setContentType("text/html;charset=utf-8");

        StringBuffer html = new StringBuffer();
        html.append(" <table border='1'>			");
        html.append(" <tr>               ");
        html.append(" 	<td>序号</td>   ");
        html.append(" 	<td>用户名</td> ");
        html.append(" 	<td>昵称</td>   ");
        html.append(" </tr>              ");

        for (User user : userList) {
            html.append(" <tr>               ");
            html.append(" 	<td>"+user.getId()+"</td>       ");
            html.append(" 	<td>"+user.getUsername()+"</td>       ");
            html.append(" 	<td>"+user.getDisplayname()+"</td>       ");
            html.append(" </tr>              ");
        }


        html.append(" </table>           ");



        PrintWriter out = response.getWriter();
        out.print(html.toString());


        out.flush();
        out.close();
    }



    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

}

4.2 参数处理

4.2.1 超链接形式的数据请求语法格式

  • <a href=”URL地址?参数=参数值[&参数=参数值...]”>链接文本</a>

  • 例如:

    • <a href=“http://127.0.0.1:8080/web/userList?id=3">请求</a>
      • 链接地址中的“queryServlet”为请求地址;
      • “pageNo”表示请求参数;
      • “3”为pageNo请求参数的值;
      • “&”为多个参数间的关联符;
      • “queryString”表示表示另一个请求参数;“neuedu” 为queryString请求参数的值
  • 发送请求的URL地址可以是绝对地址,如:

    • http://127.0.0.1:8080/web/userList?id=3。 也可以是相对地址,如:userList、../userList等形式。 在开发中大多数使用相对地址,以便于项目的移植。
  • 当用户通过超链接发送的请求到达Servlet容器时,包含数据的请求将被容器转换为HttpServletRequest对象。对请求数据的处理工作便由HttpServletRequest对象完成。

  • HttpServletRequest对象常用的数据处理方法有:

    • public String getParameter(String name),返回由name指定的用户请求参数的值。
    • public String[] getParameterValues(String name),返回由name指定的一组用户请求参数的值。
    • public Enumeration getParameterNames()返回所有客户请求的参数名。
  • 容器在将请求转换为HttpServletRequest对象之后,还会根据请求的类型调用不同的请求方法。对用超链接的GET请求则会调用doGet()方法;对于Form表单的POST请求则会调用doPost()方法,代码

4.2.2 处理Form表单请求数据

  • Form表单在enctype属性缺省或取值为application/x-www-form-urlencoded情况下,无论是Get请求类型还是Post请求类型,均通过HttpServletRequest对象来获取请求数据。

  • 超链接一般用于获取/查询资源信息,属于GET请求类型,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连。由于其安全性(如:请求数据会以明文显示在地址栏上)以及请求地址的长度限制,一般仅用于传送一些简单的数据;

  • Form表单一般用于更新资源信息,默认使用GET请求类型,多使用POST请求类型。由于POST请求类型理论上没有数据大小限制,可用表单来传较大量的数据;

    html
    <form action="userList" method="post">
        <input name="id" value="3">
        <input type="submit">
    </form>

4.2.3 地址栏传参

​ 同超链接一样

4.2.3 完整代码如下:

java
package com.neuedu.servlet;

import com.neuedu.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * 项目:      javaweb1206
 * 类名:       UserListServlet
 * 创建时间:  2020/12/7  11:27
 * 描述 :     用户列表
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 * http://127.0.0.1:8080/web/userList
 */
@WebServlet(name="UserListServlet" ,urlPatterns = "/userList")
public class UserListServlet  extends HttpServlet {

    private List<User> userList = new ArrayList<>();

    public UserListServlet() {
        this.userList.add(new User(1,"admin","管理员",null,null,null,null,null,null,null,null));
        this.userList.add(new User(2,"user1","管理员1",null,null,null,null,null,null,null,null));
        this.userList.add(new User(3,"user2","管理员2",null,null,null,null,null,null,null,null));
        this.userList.add(new User(4,"user3","管理员3",null,null,null,null,null,null,null,null));
        this.userList.add(new User(5,"user4","管理员4",null,null,null,null,null,null,null,null));
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

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

        if(id == null || "".equals(id)){
            id = "-1";
        }

        //通知浏览器 内容的类型
        response.setContentType("text/html;charset=utf-8");

        StringBuffer html = new StringBuffer();
        html.append(" <table border='1'>			");
        html.append(" <tr>               ");
        html.append(" 	<td>序号</td>   ");
        html.append(" 	<td>用户名</td> ");
        html.append(" 	<td>昵称</td>   ");
        html.append(" </tr>              ");

        for (User user : userList) {
            if(user.getId() < Integer.parseInt(id)){
                continue;
            }
            html.append(" <tr>               ");
            html.append(" 	<td>"+user.getId()+"</td>       ");
            html.append(" 	<td>"+user.getUsername()+"</td>       ");
            html.append(" 	<td>"+user.getDisplayname()+"</td>       ");
            html.append(" </tr>              ");
        }


        html.append(" </table>           ");



        PrintWriter out = response.getWriter();
        out.print(html.toString());


        out.flush();
        out.close();
    }



    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

}

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>请求方式</title>
</head>
<body>

<a href="userList?id=3" target="_blank">请求用户列表id>3</a>

<form action="userList" method="post">
    <input name="id" value="3">
    <input type="submit">
</form>

</body>
</html>

4.2.4 request对象获取参数

package com.neuedu.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 项目:      javaweb1206
 * 类名:       ${NAME}
 * 创建时间:  2020/12/7  14:09
 * 描述 :     ${dc}
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
@WebServlet(name = "StudentServlet",urlPatterns = "/stu")
public class StudentServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");


        String id = request.getParameter("id");
        String name = request.getParameter("name");
        String age = request.getParameter("age");


        String[] ids = request.getParameterValues("id");

        PrintWriter out = response.getWriter();
        out.write("<h3>id:"+id+"</h1>");
        out.write("<h3>name:"+name+"</h1>");
        out.write("<h3>age:"+age+"</h1>");

        for (int i = 0; i < ids.length; i++) {
            out.write("<h3>id-:"+i+"--"+ids[i]+"</h1>");
        }


        out.flush();
        out.close();


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

form请求

html

<form action="stu" method="post">
    <input name="id" value="101">
    <input name="id" value="102">


    <input name="name" value="jshand">
    <input name="age" value="18">


    <input type="submit">
</form>

4.3 重定向

  • 重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果,客户端浏览器地址栏变为新请求地址。

  • 重定向通过HttpServletResponse对象的sendRedirect()方法实现,该方法会通知客户端去重新访问新指定的URL地址,其语法格式如下:

    • public void sendRedirect(String location)throws java.io.IOException
    • location参数用以指定重定向的URL,它可以是相对路径或绝对路径。
  • 示例

    • 表示重定向到当前应用程序根目录下的index.jsp页面
      • response.sendRedirect("/ServletDemo1/index.jsp");
      • request.getContextPath() 获取上下文
  • sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

4.3.1 完整代码

java
package com.neuedu.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 项目:      javaweb1206
 * 类名:       ${NAME}
 * 创建时间:  2020/12/7  14:55
 * 描述 :     ${dc}
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 *
 *  http://127.0.0.1:8080/web/redirect
 *
 */
@WebServlet(name = "ResirectServlet",urlPatterns = "/redirect")
public class ResirectServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }

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

        //重定向到其他资源
        /**
         * 重定向到 Tomcat外部
         */

//        response.sendRedirect("http://www.baidu.com");

        /**
         * 重定向到 Tomcat容器中的 资源
         * 获取上下文
         */

        System.out.println("request.getContextPath():"+request.getContextPath());
        response.sendRedirect(request.getContextPath()+"/param.html");
    }
}

4.4 请求转发(内部跳转)

  • 请求转发的过程发生在服务器内部,只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。
  • 请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。
  • RequestDispatcher接口有以下两个方法:
    • forward()方法:将请求转发给其他资源。
    • include()方法:将其他资源并入到当前请求中。
  • 请求转发语法:
    • RequestDispatcher dispatcher = request.getRequestDispatcher(String path);
    • dispatcher.forward(ServletRequest request,ServletResponse response);
  • 其中:
    • path参数用以指定转发的URL,只能是相对路径;
    • request和response参数取值为当前请求所对应的HttpServletRequest和HttpServletResponse对象。

4.4.1 完整代码

java
package com.neuedu.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 项目:      javaweb1206
 * 类名:       ${NAME}
 * 创建时间:  2020/12/7  15:46
 * 描述 :     ${dc}
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 *
 * http://127.0.0.1:8080/web/dispatcher
 */
@WebServlet(name = "DispatcherServlet",urlPatterns = "/dispatcher")
public class DispatcherServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

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


        //内部跳转
        request.getRequestDispatcher("param.html").forward(request,response);


    }
}

4.5 重定向和请求转发的区别

重定向和请求转发都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有很大的区别:

  • 请求转发只能将请求转发给同一个Web应用中的组件;而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,或者重定向到其他站点的资源;
  • 重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变;
  • 请求转发调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而重定向调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
  • 不代表方法的结束,下面的代码还会继续执行,注意在转发或重定向的语句后面不要在编写代码。

4.6 综合实例:用户管理系统

功能如下:

4.6.1 数据库

4.6.2 创建项目

4.6.3.添加pom依赖

  • servlet-api
  • jsp-api
  • jdbcutil(mysql-connector-java.jar)
  • junit
xml
 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <!--作用域  provided  参与编译,运行时抛弃 -->
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>


    <dependency>
      <groupId>com.neuedu</groupId>
      <artifactId>jdbcutil</artifactId>
      <version>1.0</version>
    </dependency>

4.6.4.实体类

java
package com.neuedu.entity;

import java.util.Date;

/**
 * 项目:      jdbc
 * 类名:       User
 * 创建时间:  2020/11/25  14:40
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io 实体类
 */
public class User {
    private Integer id;
    private String username;
    private String displayname;
    private String password;
    private Date birthday;
    private String gender;
    private String telephone;
    private String email;
    private Date last_logintime;
    private Date create_time;
    private String valid;

    public User() {
    }

    public User(Integer id, String username, String displayname, String password, Date birthday, String gender, String telephone, String email, Date last_logintime, Date create_time, String valid) {
        this.id = id;
        this.username = username;
        this.displayname = displayname;
        this.password = password;
        this.birthday = birthday;
        this.gender = gender;
        this.telephone = telephone;
        this.email = email;
        this.last_logintime = last_logintime;
        this.create_time = create_time;
        this.valid = valid;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getDisplayname() {
        return displayname;
    }

    public void setDisplayname(String displayname) {
        this.displayname = displayname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getLast_logintime() {
        return last_logintime;
    }

    public void setLast_logintime(Date last_logintime) {
        this.last_logintime = last_logintime;
    }

    public Date getCreate_time() {
        return create_time;
    }

    public void setCreate_time(Date create_time) {
        this.create_time = create_time;
    }

    public String getValid() {
        return valid;
    }

    public void setValid(String valid) {
        this.valid = valid;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", displayname='" + displayname + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                ", gender='" + gender + '\'' +
                ", telephone='" + telephone + '\'' +
                ", email='" + email + '\'' +
                ", last_logintime=" + last_logintime +
                ", create_time=" + create_time +
                ", valid='" + valid + '\'' +
                '}';
    }
}

4.6.5 Dao类

java
package com.neuedu.dao;

import com.neuedu.entity.User;
import com.neuedu.util.JDBCUtil;

import java.util.List;

/**
 * 项目:      usermanager
 * 类名:       UserDao
 * 创建时间:  2020/12/7  16:21
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
public class UserDao {


    /**
     * 查询集合
     * @param sql
     * @param param
     * @return
     */
    public List<User> list(String sql,Object... param){
        return JDBCUtil.executeQuery(sql,User.class,param);
    }


    /**
     *
     * @param id
     * @return
     */
    public User queryById(String id ){
        String sql = "select * from user where id = ? ";
        return JDBCUtil.getOne(sql,(rs)->{
            return new User(
                    rs.getInt("id"),
                    rs.getString("username"),
                    rs.getString("displayname"),
                    rs.getString("password"),
                    rs.getDate("birthday"),
                    rs.getString("gender"),
                    rs.getString("telephone"),
                    rs.getString("email"),
                    rs.getTimestamp("last_logintime"),
                    rs.getTimestamp("create_time"),
                    rs.getString("valid")
            );
        },id);
    }


    public boolean add(User user ){
        String sql = "insert into user(username,password,displayname,birthday) values(?,?,?,?) ";
        return JDBCUtil.executeUpdate(sql,
                user.getUsername(),
                user.getPassword(),
                user.getDisplayname(),
                user.getBirthday());
    }


    public boolean update(User user ){

        StringBuffer sql = new StringBuffer();
        sql.append( " UPDATE 				");
        sql.append( "   user                ");
        sql.append( " SET                   ");
        sql.append( "                       ");
        sql.append( "   username = ?,       ");
        sql.append( "   displayname = ?,    ");
        sql.append( "   password = ?,       ");
        sql.append( "   birthday = ?,       ");
        sql.append( "   gender =?,          ");
        sql.append( "   telephone = ?,      ");
        sql.append( "   email =?,           ");
        sql.append( "   last_logintime = ?, ");
        sql.append( "   create_time = ?,    ");
        sql.append( "   valid = ?           ");
        sql.append( " WHERE  id =  ?        ");


        return JDBCUtil.executeUpdate(sql.toString(),
                user.getUsername(),
                user.getDisplayname(),
                user.getPassword(),
                user.getBirthday(),
                user.getGender(),
                user.getTelephone(),
                user.getEmail(),
                user.getLast_logintime(),
                user.getCreate_time(),
                user.getValid(),
                user.getId()

                );
    }


    public boolean deleteById(String id ) {

        String sql =" delete from user where id = ?";
        return JDBCUtil.executeUpdate(sql,id);

    }


    public static void main(String[] args) {


        UserDao userDao = new UserDao();

        String sql = "select * from user ";
        List<User> list = userDao.list(sql);
//        for (User user : list) {
//            System.out.println(user);
//        }


        String id = "2";
        User user = userDao.queryById(id);
        System.out.println(user);


    }


}

4.6.5 单元测试类

java
package com.neuedu.dao;

import com.neuedu.entity.User;
import org.junit.Before;
import org.junit.Test;

import java.util.Date;
import java.util.List;

import static org.junit.Assert.*;

/**
 * 项目:      usermanager
 * 类名:       UserDaoTest
 * 创建时间:  2020/12/7  16:31
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
public class UserDaoTest {

    UserDao userDao ;

    @Before
    public void init(){
        userDao =  new UserDao();
    }


    @Test
    public void list() {

        String sql = "select * from user ";
        List<User> list = userDao.list(sql);
        for (User user : list) {
            System.out.println(user);
        }
    }

    @Test
    public void queryById() {

        String id = "2";
        User user = userDao.queryById(id);
        System.out.println(user);
    }

    @Test
    public void add() {
        User user =  new User();
        user.setUsername("132456");
        user.setPassword("4564564");
        user.setDisplayname("用户管理系统");
        user.setBirthday(new Date());

        boolean success = userDao.add(user);
        System.out.println(success);
    }


    @Test
    public void update() {

        String id = "2";
        User user = userDao.queryById(id);
        System.out.println(user);
        user.setDisplayname("用户管理系统更新");
        boolean success = userDao.update(user);
        System.out.println(success);
    }

    @Test
    public void deleteById() {
        String id = "2";
        boolean success = userDao.deleteById(id);
        System.out.println(success);
    }
}

4.6.6 创建UserManagerServlet

根据type参数区分不同的功能:

java
package com.neuedu.servlet;

import com.neuedu.dao.UserDao;
import com.neuedu.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;


/**
 * 项目:      usermanager
 * 类名:       ${NAME}
 * 创建时间:  2020/12/8  9:21
 * 描述 :     ${dc}
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 * <p>
 * <p>
 * http://127.0.0.1:8080/mis/user
 * http://127.0.0.1:8080/mis/user?type=list
 */@WebServlet(name = "UserServlet", urlPatterns = "/user")
public class UserServlet extends HttpServlet {

    private UserDao userDao = new UserDao();


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

        /**
         * type
         *  1 查询列表  list(显示页面)
         *  2 查处用户  delete                  重新查询列表
         *  3 添加用户  toAdd(显示页面)   add    重新查询列表
         *  4 修改用户  toEdit(显示页面)  edit   重新查询列表
         */
        String type = request.getParameter("type");

        //1 查询
        if ("list".equals(type) || type == null) {
            queryList(request, response);
        }
        //2 到添加用户界面
        else if ("toAdd".equals(type)) {
            toAdd(request, response);
        } 
        else if ("add".equals(type)) {
            try {
                add(request, response);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        //到修改页面
        else if ("toEdit".equals(type)) {
            toEdit(request, response);
        } else if ("edit".equals(type)) {
            try {
                edit(request, response);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        } else if ("delete".equals(type)) {
            delete(request, response);
        }


        //2 修改

    }


    /**
     * 删除
     *
     * @param request
     * @param response
     */
    private void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String id = request.getParameter("id");
        boolean success = userDao.deleteById(id);
        response.sendRedirect(request.getContextPath() + "/user?type=list");

    }

    private void edit(HttpServletRequest request, HttpServletResponse response) throws ParseException, IOException {

        String id = request.getParameter("id");
        String username = request.getParameter("username");
        String displayname = request.getParameter("displayname");
        String password = request.getParameter("password");
        String birthday = request.getParameter("birthday"); //yyyy-MM-dd  1990-01-02
        String gender = request.getParameter("gender");
        String email = request.getParameter("email");


        User user = new User();
        user.setId(Integer.parseInt(id));
        user.setUsername(username);
        user.setDisplayname(displayname);
        user.setPassword(password);
        user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday));
        user.setGender(gender);
        user.setEmail(email);

        boolean success = userDao.update(user);


        //查询列表页

//        request.getRequestDispatcher("user?type=list").forward(request,response);
        response.sendRedirect(request.getContextPath() + "/user?type=list");

    }

    private void toEdit(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=utf-8");

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

        User user = userDao.queryById(id);


        String bir = "";
        if (user.getBirthday() != null) {
            bir = new SimpleDateFormat("yyyy-MM-dd").format(user.getBirthday());
        }

        String gender = "1";

        if (user.getGender() != null && "".equals(user.getGender())) {
            gender = user.getGender();
        }


        StringBuffer html = new StringBuffer();
        html.append(" <form method='post' action='user?type=edit'>								");
        html.append(" <input type='hidden' name='id' value='" + user.getId() + "'>						");
        html.append(" 	<h3>用户添加</h3>                                           ");
        html.append(" 	<table width='100%' border='1'>                                        ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>username</td>                                   ");
        html.append(" 			<td><input type='text' name='username' value='" + user.getUsername() + "'></td>        ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>displayname</td>                                ");
        html.append(" 			<td><input type='text' name='displayname'  value='" + user.getDisplayname() + "'></td>     ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>password</td>                                   ");
        html.append(" 			<td><input type='text' name='password'  value='" + user.getPassword() + "'></td>        ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>birthday</td>                                   ");
        html.append(" 			<td><input type='text' name='birthday' value='" + bir + "'></td>        ");
        html.append(" 		</tr>                                                   ");
        html.append("                                                               ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>gender</td>                                     ");
        html.append(" 			<td>                                                ");
        html.append("                                                               ");
        html.append(" 				<select name='gender'>                          ");
        html.append(" 					<option value='1' " + ("1".equals(gender) ? "selected" : "") + " >男               ");
        html.append(" 					<option value='2' " + ("2".equals(gender) ? "selected" : "") + " >女               ");
        html.append(" 				</select></td>                                  ");
        html.append(" 		</tr>                                                   ");
        html.append("                                                               ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>email</td>                                      ");
        html.append(" 			<td><input type='text' name='email' value='" + user.getEmail() + "'></td>           ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td colspan='2'> <input type='submit' ></td>           ");
        html.append(" 		</tr>                                                   ");
        html.append("                                                               ");
        html.append(" 	</table>                                                    ");
        html.append("                                                               ");
        html.append("                                                               ");
        html.append(" </form>                                                       ");

        PrintWriter out = response.getWriter();
        out.write(html.toString());
        out.flush();
        out.close();
    }

    private void add(HttpServletRequest request, HttpServletResponse response) throws ParseException, ServletException, IOException {

        String username = request.getParameter("username");
        String displayname = request.getParameter("displayname");
        String password = request.getParameter("password");
        String birthday = request.getParameter("birthday"); //yyyy-MM-dd  1990-01-02
        String gender = request.getParameter("gender");
        String email = request.getParameter("email");


        User user = new User();
        user.setUsername(username);
        user.setDisplayname(displayname);
        user.setPassword(password);
        user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(birthday));
        user.setGender(gender);
        user.setEmail(email);

        boolean success = userDao.add(user);


        //查询列表页

//        request.getRequestDispatcher("user?type=list").forward(request,response);
        response.sendRedirect(request.getContextPath() + "/user?type=list");


    }

    /**
     * 添加页面
     *
     * @param request
     * @param response
     * @throws IOException
     */
    private void toAdd(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=utf-8");
        StringBuffer html = new StringBuffer();
        html.append(" <form method='post' action='user?type=add'>								");
        html.append(" 	<h3>用户添加</h3>                                           ");
        html.append(" 	<table width='100%' border='1'>                                        ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>username</td>                                   ");
        html.append(" 			<td><input type='text' name='username'></td>        ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>displayname</td>                                ");
        html.append(" 			<td><input type='text' name='displayname'></td>     ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>password</td>                                   ");
        html.append(" 			<td><input type='text' name='password'></td>        ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>birthday</td>                                   ");
        html.append(" 			<td><input type='text' name='birthday'></td>        ");
        html.append(" 		</tr>                                                   ");
        html.append("                                                               ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>gender</td>                                     ");
        html.append(" 			<td>                                                ");
        html.append("                                                               ");
        html.append(" 				<select name='gender'>                          ");
        html.append(" 					<option value='1' selected>男               ");
        html.append(" 					<option value='2'> 女                       ");
        html.append(" 				</select></td>                                  ");
        html.append(" 		</tr>                                                   ");
        html.append("                                                               ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td>email</td>                                      ");
        html.append(" 			<td><input type='text' name='email'></td>           ");
        html.append(" 		</tr>                                                   ");
        html.append(" 		<tr>                                                    ");
        html.append(" 			<td colspan='2'> <input type='submit' ></td>           ");
        html.append(" 		</tr>                                                   ");
        html.append("                                                               ");
        html.append(" 	</table>                                                    ");
        html.append("                                                               ");
        html.append("                                                               ");
        html.append(" </form>                                                       ");

        PrintWriter out = response.getWriter();
        out.write(html.toString());
        out.flush();
        out.close();
    }

    /**
     * 查询类表
     *
     * @param request
     * @param response
     */
    private void queryList(HttpServletRequest request, HttpServletResponse response) throws IOException {


        String sql = "select * from user";
        List<User> userList = userDao.list(sql);

        //通知浏览器 内容的类型
        response.setContentType("text/html;charset=utf-8");

        StringBuffer html = new StringBuffer();
        html.append(" <a href='user?type=toAdd'>添加</a>");
        html.append(" <table border='1' width='100%'>			");
        html.append(" <tr>               ");
        html.append(" 	<td>序号</td>   ");
        html.append(" 	<td>用户名</td> ");
        html.append(" 	<td>昵称</td>   ");
        html.append(" 	<td>密码</td>   ");
        html.append(" 	<td>出生日期</td>   ");
        html.append(" 	<td>性别</td>   ");
        html.append(" 	<td>邮箱 </td>   ");
        html.append(" 	<td>操作 </td>   ");
        html.append(" </tr>              ");

        for (User user : userList) {

            html.append(" <tr>               ");
            html.append(" 	<td>" + user.getId() + "</td>       ");
            html.append(" 	<td>" + user.getUsername() + "</td>       ");
            html.append(" 	<td>" + user.getDisplayname() + "</td>       ");
            html.append(" 	<td>" + user.getPassword() + "</td>       ");
            html.append(" 	<td>" + user.getBirthday() + "</td>       ");
            html.append(" 	<td>" + user.getGender() + "</td>       ");
            html.append(" 	<td>" + user.getEmail() + "</td>       ");
            html.append(" 	<td><a href='user?type=toEdit&id=" + user.getId() + "'>编辑</a>  <a href='user?type=delete&id=" + user.getId() + "'>删除</a></td>       ");
            html.append(" </tr>              ");
        }

        html.append(" </table>           ");

        PrintWriter out = response.getWriter();
        out.print(html.toString());


        out.flush();
        out.close();
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

4.7 乱码的问题

java
//接收的编码
/**
* Get方式
*/
String name =  request.getParameter("name");
name = new String(name.getBytes("iso8859-1"),"utf-8");
System.out.println("name:"+name);
//post提交生效
request.setCharacterEncoding("utf-8");

//响应的编码
request.setCharacterEncoding("utf-8");

4.8 作业

参考用户管理的功能,编写如下表的CRUD操作

sql
drop table if exists fmeditem;

/*==============================================================*/
/* Table: fmeditem                                              */
/*==============================================================*/
create table fmeditem
(
   id                   int not null auto_increment comment '主键',
   item_code            varchar(500) comment '项目编码',
   item_name            varchar(500) comment '项目名称',
   format               varchar(500) comment '规格',
   price                decimal(6,2) comment '单价',
   exp_class_id         varchar(500) comment '所属费用科目',
   dept                 varchar(500) comment '执行科室',
   mnemonic_code        varchar(500) comment '拼音助记码',
   record_type          varchar(500) comment '项目类型',
   createtime           datetime default CURRENT_TIMESTAMP comment '创建时间',
   valid                varchar(5) default '1' comment '是否有效',
   primary key (id)
);

alter table fmeditem comment '非药品收费项目表';

4.9 Lombok

2020-12-08_144717

4.9.1 引入lombok依赖

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
    </dependency>

4.9.2 使用

java
package com.neuedu.entity;

import lombok.*;

/**
 * 项目:      usermanager
 * 类名:       Fmeditem
 * 创建时间:  2020/12/8  14:44
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
@NoArgsConstructor
@AllArgsConstructor
//@Setter
//@Getter
//@ToString
@Data
public class Fmeditem {

    private Integer id;
    private String itemCode;


}

测试代码如下:

java
 @Test
 public void testLomBok() {
 	Fmeditem f = new Fmeditem();

	Fmeditem f2 = new Fmeditem(1,"aaa");

	f2.setItemCode("asdfasdfasdf");
    System.out.println(f2.getId());
    System.out.println(f2);

}

Released under the MIT License.