请求对象
返回值 方法名 说明
String getContextPath() 获取虚拟目录名称
String getServletPath() 获取Servlet映射路径
String getRemoteAddr() 获取访问者ip地址
String getQueryString() 获取请求的消息数据
String getRequestURI() 获取统一资源标识符
String getRequestURL() 获取统一资源定位符
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;
@WebServlet(name = "demo1GetPath", value = "/demo1GetPath")
public class Demo1GetPath extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String contextPath = req.getContextPath();
System.out.println(contextPath);
String servletPath = req.getServletPath();
System.out.println(servletPath);
String remoteAddr = req.getRemoteAddr();
System.out.println(remoteAddr);
String queryString = req.getQueryString();
System.out.println(queryString);
String requestURI = req.getRequestURI();
System.out.println(requestURI);
StringBuffer requestURL = req.getRequestURL();
System.out.println(requestURL);
}
}
请求头信息
返回值 方法名 说明
String getHeader(String.name) 根据请求头名获取一个值
Enumeration<String> getHeaders(String.name) 根据请求头名获取多个值
Enumeration<String> getHeaderNames() 获取所有请求头名称
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.util.Enumeration;
@WebServlet(name = "demo2GetPath", value = "/demo2GetPath")
public class Demo2GetPath extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String host = req.getHeader("Host");
System.out.println(host);
Enumeration<String> headers = req.getHeaders("Accept-Encoding");
System.out.println("----------------------------------------------");
while (headers.hasMoreElements()){
String header = headers.nextElement();
System.out.println(header);
}
Enumeration<String> headerNames = req.getHeaderNames();
System.out.println("================================");
while (headerNames.hasMoreElements()){
String headerName = headerNames.nextElement();
System.out.println(headerName+"...."+ req.getHeader(headerName));
}
}
}
获取请求参数信息
返回值 方法名 说明
String getParameter(String.name) 根据名称获取数据
String[] getParameterValues(String.name) 根据名称获取所有数据
Enumeration<String> getParameterNames() 获取所有名称
Map<String,String[]> getParameterMap() 获取所有参数的键值对
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.util.Enumeration;
import java.util.Map;
@WebServlet(name = "Demo3GetRequestParamter", value = "/demo3GetRequestParamter")
public class Demo3GetRequestParamter extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(name+"..."+password);
System.out.println("----------------");
String[] hobbies = req.getParameterValues("hobby");
for(String hobby:hobbies){
System.out.println(hobby);
}
System.out.println("====================");
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()){
String pname = parameterNames.nextElement();
System.out.println(pname);
}
System.out.println("===================");
Map<String, String[]> parameterMap = req.getParameterMap();
for(Map.Entry<String,String[]> parameter : parameterMap.entrySet()){
System.out.print(parameter.getKey());
for(String s:parameter.getValue()){
System.out.print(","+s);
}
System.out.println();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
获取请求参数并封装对象
- 手动封装方式
- 反射封装方式
- 工具类封装方式
手动封装的方式
import java.util.Arrays;
public class Student {
private String username;
private String password;
private String[] hobby;
public Student(){}
public Student(String username, String password, String[] hobby) {
this.username = username;
this.password = password;
this.hobby = hobby;
}
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String[] getHobby() { return hobby; }
public void setHobby(String[] hobby) { this.hobby = hobby; }
@Override
public String toString() {
return "Student{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", hobby=" + Arrays.toString(hobby) +
'}';
}
}
import com.bean.Student;
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.util.Enumeration;
import java.util.Map;
@WebServlet(name = "demo4GetQequestStudent", value = "/demo4GetQequestStudent")
public class Demo4GetQequestStudent extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParameterValues("hobby");
Student student = new Student(name,password,hobby);
System.out.println(student);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
反射封装方式
import com.bean.Student;
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.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@WebServlet(name = "demo5GetQequestStudent", value = "/demo5GetQequestStudent")
public class Demo5GetQequestStudent extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Map<String,String[]> map = req.getParameterMap();
Student stu = new Student();
for(String name : map.keySet()){
String[] values = map.get(name);
try {
PropertyDescriptor pd = new PropertyDescriptor(name, stu.getClass());
Method writeMethod = pd.getWriteMethod();
if( values.length>1){
writeMethod.invoke(stu,(Object)values);
}else{
writeMethod.invoke(stu, values);
}
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(stu);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
工具类封装
在webapp/lib/中添加commons-beanutils-1.9.4.jar和commons-logging-1.2.jar
在本机的tomcat目录中lib目录也要添加上面2个文件
是在我的电脑或者Finder中添加到tomcat目录中lib里上面2个文件
否则提示如下问题
java.lang.NoClassDefFoundError: org/apache/commons/beanutils/BeanUtils
com.lizicai.servlet.Demo6GetQequestStudent.doGet(Demo6GetQequestStudent.java:25)
javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
import com.bean.Student;
import org.apache.commons.beanutils.BeanUtils;
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.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet(name = "demo6", value = "/demo6")
public class Demo6GetQequestStudent extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Map<String,String[]> map = req.getParameterMap();
Student stu = new Student();
try {
BeanUtils.populate(stu, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(stu);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
流对象获取请求信息( 了解即可 )
返回值 方法名 说明
BufferedReader getReader() 获取字符输入流
ServletInputStream getInputStream 获取字节输入流
** 流对象仅支持Post, 不支持Get**
import com.example.javaweb_test3.HelloServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
@WebServlet(value = "/demo7")
public class Demo7StreamPost extends HelloServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
BufferedReader br = req.getReader();
String line;
while (( line = br.readLine()) != null){
System.out.println(line);
}
System.out.println("------------------");
byte[] arr = new byte[1024];
int len;
ServletInputStream sis = req.getInputStream();
while ( (len = sis.read(arr)) != -1){
System.out.println(new String(arr,0,len));
}
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
super.doGet(request, response);
}
}
Post 请求中文乱码问题
- GET 方式, 没有乱码, 在Tomcat8版本后已经解决
- POST 方式, 有乱码问题. 可以通过setCharacterEncoding()方法来解决
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;
@WebServlet(value = "/demo8")
public class Demo8TestUTF8 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
System.out.println(username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
请求域
- 请求域(request域) 可以在一次请求范围内进行共享数据.
- PC请求 -> ServletA -> ServletB
- 请求对象操作共享数据方法
返回值 方法名 说明
void setAttribute(String.name,Object.value) 向请求域对象存储数据
Object getAttribute(String.name) 通过名称获取请求域对象的数据
void removeAttribute(String.name) 通过名称移除请求域对象中的数据
请求转发, 客户端的一次请求到达后, 发现需要借助其他Servlet来实现啊啊练车
- 特点
- 浏览器地址栏不变
- 域对象中的数据不丢失
- 负责转发的Servlet转发前后的响应正文会丢失,(转发的Servelet不能响应)
- 由转发的目的地来响应客户端
返回值 方法名 说明
RequestDispacher getRequestDispatcher(String.name) 获取请求高度对象
void forward(ServletResquest.req,ServletRestpose.resp) 实现转发
import javax.servlet.RequestDispatcher;
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;
@WebServlet(value = "/demo9")
public class Demo9Froward extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("name", "isnewname");
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/demo10");
requestDispatcher.forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
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;
@WebServlet(value = "/demo10")
public class Demo10Froward extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object name = req.getAttribute("name");
System.out.println(name);
System.out.println("demo10");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
请求包含
- 请求包含: 可以合并其他Servlet中的功能一起响应给客户端
- 特点:
- 浏览器地址栏不变
- 域对象中的数据不丢失
- 被包含的Servlet响应头会丢失,( 转发的Servlet不能响应 )
返回值 方法名 说明
RequestDispatcher getRequestDispatcher(String.name) 获取请求高度对象
void include(ServletResquest.req,ServletRestpose.resp) 实现包含
import javax.servlet.RequestDispatcher;
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;
@WebServlet(value = "/demo11")
public class Demo11Froward extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("name", "isnewname");
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/demo12");
requestDispatcher.include(req, resp);
System.out.println("demo11");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
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;
@WebServlet(value = "/demo12")
public class Demo12Froward extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object name = req.getAttribute("name");
System.out.println(name);
System.out.println("demo12");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
响应对象
- 响应: 回馈结果. 在BS架构中, 就是服务器给客户端浏览器反馈结果
- 响应对象: 就是在项目中用于发送响应的对象.
- ServletResponse 和 HttpServletResponse
状态码 说明
200 成功
302 重定向
304 请求资源未改变,使用缓存
400 请求错误,常见于请求参数错误
404 请求资源未找到
405 请求方式不支持
500 服务器错误
返回值 方法名 说明
ServletOutputStream getOutputStream() 获取响应字节输出流对象
void setContentType("text/html;charset=UTF-8") 设置响应内容类型,解决中文乱码问题
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "/responseDemo1")
public class ResponseDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
ServletOutputStream sos = resp.getOutputStream();
String str = "哈哈";
sos.write(str.getBytes());
}
}
返回值 方法名 说明
PrintWriter getWriter() 获取响应输入流对象
void setContentType("text/html;charset=UTF-8") 设置响应内容类型,解决中文乱码
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;
@WebServlet(value = "/responseDemo2")
public class ResponseDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
String str = "你好";
PrintWriter pw = resp.getWriter();
pw.write(str);
}
}
响应图片
- 创建字节输入流对象, 关联读取的图片路径
- 通过响应对象获取字节输出流对象
- 循环读取和写出图片
图片路径,由相对路径获取到war包的绝对路径,才能访问到
其他资源也是一样的方式
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet(value = "/responseDemo3")
public class ResponseDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String realPath = getServletContext().getRealPath("/img/Steve_Halama.jpg");
System.out.println(realPath);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream
(realPath));
ServletOutputStream outputStream = resp.getOutputStream();
int len;
byte[] arr = new byte[8192];
while ( (len = bis.read(arr)) != -1){
outputStream.write(arr,0,len);
}
}
}
设置缓存
- 缓存: 对象不经常变化的数据, 我们可以设置合理缓存时间, 以避免浏览器频繁请求服务器. 以此提高效率.
返回值 方法名 说明
void setDateHeader(String.name,long.time) 设置消息头添加缓存
Chrome无效
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
@WebServlet(value = "/responseDemo4")
public class ResponseDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
resp.setDateHeader("Expires",System.currentTimeMillis()+5*60*1000);
resp.getWriter().println("缓存");
System.out.println("请求一次");
}
}
定时刷新
返回值 方法名 说明
void setHeader(String.name,String.value) 设置消息头定时刷新
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;
@WebServlet(value = "/responseDemo5")
public class ResponseDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String str = "你的用户名或密码有误, 3秒后自动跳转登录页~";
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write(str);
resp.setHeader("Refresh", "3;URL=/stu/login/register.html");
}
}
请求重定向
- 请求重定向: 客户端的一次请求到达后, 发现需要借助其他Servlet来实现功能
- 特点: 浏览器地址栏会发生改变, 两次请求, 请求域对象中不能共享数据, 可以重定向到其他服务器
- 重写向实现原理
- 设置响应状态码为302 resp.setStatus(302)
- 设置响应的资源路径(响应到哪里去, 通过响应消息头location来指定)resp.setHeader(“location”,"/stu/responseDemo7")
返回值 方法名 说明
void sendRedirect(String.name) 设置重定向
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;
@WebServlet(value = "/responseDemo6")
public class ResponseDemo6 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("name","zhangsan");
resp.sendRedirect(req.getContextPath() +"/responseDemo7");
resp.sendRedirect("http://baidu.com");
}
}
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;
@WebServlet(value = "/responseDemo7")
public class ResponseDemo7 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object name = req.getAttribute("name");
System.out.println(name);
}
}
文件下载
- 创建字节输入流, 关联文件
- 设置响应消息头支持的类型
- 设置响应消息头f以下载方式打开资源
- 通过响应对象获取字节输出流对象
- 循环读写
- 释放资源
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet( value = "/responseDemo8")
public class ResponseDemo8 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String realPath = getServletContext().getRealPath("/img/Steve_Halama.jpg");
// Content-Type 消息头名称, 支持的类型
// application/octet-stream消息头参数 应用类型为字节流
resp.setHeader("Content-Type", "application/octet-stream");
// Content-Disposition 消息头名称 处理的形式
// attachment;filename=Steve_Halama.jpg 消息头参数 附件形式处理 指定下载文件名称
resp.setHeader("Content-Disposition", "attachment;filename=Steve_Halama.jpg");
InputStream in = new FileInputStream(realPath);
BufferedInputStream bis = new BufferedInputStream(in);
byte[] arr = new byte[10240];
int len;
ServletOutputStream sos = resp.getOutputStream();
while ( (len = bis.read(arr)) != -1){
sos.write(arr,0,len);
}
bis.close();
}
}
案例 学生管理系统
- 首页, 2个超链接, 添加学生, 查看学生
- 添加学生, 添加成功后自动跳转到首页
- 查看学生
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<a href="login/addStudent.html">添加学生</a> <a href="/stu/studentList">查看学生</a>
<br/>
<%--<a href="hello-servlet">Hello Servlet</a>--%>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加学生</title>
</head>
<body>
<form method="post" action="/stu/studentAdd" autocomplete="off">
<label for="username">学生姓名:</label>
<input type="text" name="username" id="username">
<br/>
<label for="age">学生年龄:</label>
<input type="text" name="age" id="age">
<br/>
<label for="chenji">学生成绩:</label>
<input type="text" name="chenji" id="chenji">
<br/>
<button type="submit">保存</button>
</form>
</body>
</html>
public class Student {
private String name;
private int age;
private int chenji;
public Student(){}
public Student(String name, int age, int chenji) {
this.name = name;
this.age = age;
this.chenji = chenji;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getChenji() {
return chenji;
}
public void setChenji(int chenji) {
this.chenji = chenji;
}
@Override
public String toString() {
return
name + "," +
age +","+
chenji ;
}
}
import com.lizicai.bean.Student;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
* 写入学生
*/
@WebServlet(value = "/studentAdd")
public class StudentAdd extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
Student s = new Student();
s.setName(req.getParameter("username"));
s.setAge( Integer.parseInt(req.getParameter("age")) ) ;
s.setChenji(Integer.parseInt(req.getParameter("chenji")));
String realPath = getServletContext().getRealPath("/img/student.txt");
Writer out;
PrintWriter pw = new PrintWriter(new FileWriter(realPath,true));
pw.println(s);
pw.close();
String str = "添加用户成功, 2秒后自动学生添加页~";
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write(str);
resp.setHeader("Refresh", "3;URL=/stu/index.jsp");
}
}
import com.lizicai.bean.Student;
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.*;
import java.util.ArrayList;
/**
* 查询学生信息
*/
@WebServlet(value = "/studentList")
public class StudentList extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String realPath = getServletContext().getRealPath("/img/student.txt");
ArrayList<Student> list = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader(realPath));
String line;
while ( (line = br.readLine()) != null ){
String[] split = line.split(",");
Student s = new Student();
s.setName(split[0]);
s.setAge(Integer.parseInt(split[1]));
s.setChenji(Integer.parseInt(split[2]));
list.add(s);
}
resp.setContentType("text/html;charset=UTF-8");
PrintWriter pw = resp.getWriter();
for(Student s : list){
pw.print(s);
pw.write("<br/>");
}
}
}