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
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 地址栏传参
同超链接一样
- 路径:http://127.0.0.1:8080/web/userList?id=2
- 使用request获取请求的参数 String id = request.getParameter("id");
4.2.3 完整代码如下:
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);
}
}
<!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请求
<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() 获取上下文
- 表示重定向到当前应用程序根目录下的index.jsp页面
sendRedirect()方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
4.3.1 完整代码
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 完整代码
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
<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.实体类
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类
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 单元测试类
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参数区分不同的功能:
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 乱码的问题
//接收的编码
/**
* 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操作
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
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 使用
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;
}
测试代码如下:
@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);
}
