记录实验2过程及代码。
注意Tomcat10 -> jakarta.servlet-api
,Tomcat9以下 -> javax.servlet-api
。
javapackage org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "/FirstServlet")
public class FirstServlet extends HttpServlet { // 继承HttpServlet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 重写doGet
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 重写doPost
super.doPost(req, resp);
}
}
javapackage org.example.webstructure.experiment2;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(value = "/SecondServlet")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String parameter1 = req.getParameter("parameter1"); // 获取请求参数
String header = req.getHeader("parameter2"); // 获取http头信息
ServletContext context = getServletContext();
context.log(parameter1); // 输出到log里
context.log(header);
PrintWriter out = resp.getWriter();
out.println(parameter1); // 输出到响应体里
out.println(header);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
实际效果:
ApiFox需要先设置好前置URL:
(要达到上图这个效果,需要先在运行配置里的log部分显示所有的log,然后在右侧筛选处选择all)
java// ThirdServlet_1.java
package org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "/ThirdServlet_1")
public class ThirdServlet_1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/ThirdServlet_2").forward(req, resp); // 转发
log("Request Forwarded");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
// ThirdServlet_2.java
package org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "/ThirdServlet_2")
public class ThirdServlet_2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log(req.getParameter("parameter")); // 收到请求 输出log
log("Request Received");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
效果:
java// FourthServlet_1.java
package org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "/FourthServlet_1")
public class FourthServlet_1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(302); // 设置状态码
resp.setHeader("Location", "/WebStructure/FourthServlet_2"); // 重定向
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
// FourthServlet_2.java
package org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = "/FourthServlet_2")
public class FourthServlet_2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log("Request Received"); // 收到请求 打印log
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
效果:
java// FifthServlet_1.java
package org.example.webstructure.experiment2;
import com.google.gson.Gson;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(value = "/FifthServlet_1")
public class FifthServlet_1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/FifthServlet_2"); // 设定目标资源路径
requestDispatcher.include(req, resp); // 包含
PrintWriter printWriter = resp.getWriter();
printWriter.write("Wrote from FifthServlet_1\n"); // 写入
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPut(req, resp);
}
}
// FifthServlet_2.java
package org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(value = "/FifthServlet_2")
public class FifthServlet_2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter printWriter = resp.getWriter();
printWriter.write("Wrote from FifthServlet_2\n"); // 写入
}
}
效果:
javapackage org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
@WebServlet(value = "/SixthServlet")
public class SixthServlet extends HttpServlet {
LocalDateTime time = null;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.addCookie(new Cookie("parameter1", "value1"));
if (this.time == null) {
this.time = LocalDateTime.now();
} else {
resp.addCookie(new Cookie("lastLoginTime", this.time.toString()));
this.time = LocalDateTime.now();
}
}
}
效果:
第一次请求:
第二次请求:
java// SeventhServlet_1.java
package org.example.webstructure.experiment2;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@WebServlet(value = "/SeventhServlet_1")
public class SeventhServlet_1 extends HttpServlet {
Map<String, String> userInfo = new HashMap<String, String>(); // 假装这是数据库
@Override
public void init() throws ServletException {
this.userInfo.put("user1", "123456"); // 数据库里有用户user1 密码是123456
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("userName"); // 获取参数
String password = req.getParameter("userPassword");
PrintWriter out = resp.getWriter();
if (Objects.equals(this.userInfo.get(name), password)) { // 登录验证
HttpSession httpSession = req.getSession();
httpSession.setAttribute("user", new UserEntity(name, password)); // 用户信息存储到 HttpSession 对象中
out.write("Login Success!\n");
} else {
out.write("UserName or UserPassword is Incorrect!\n");
}
}
}
// SeventhServlet_2.java
package org.example.webstructure.experiment2;
import com.google.gson.Gson;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(value = "/SeventhServlet_2")
public class SeventhServlet_2 extends HttpServlet {
Gson gson = new Gson(); // 生成Json字符串用的
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
UserEntity user = (UserEntity) req.getSession().getAttribute("user"); // 先尝试获取用户信息
if (user == null) { // 这就说明还没登录
resp.getWriter().write("User is not Logged In!");
return;
}
int operation = Integer.parseInt(req.getParameter("operation")); // 获取操作
PrintWriter out = resp.getWriter();
switch (operation) {
case 1: {
user.addGood(req.getParameter("goodName")); // 增
break;
}
case 2: {
user.deleteGood(req.getParameter("goodName")); // 删
break;
}
case 3: {
user.setGoodNumber(req.getParameter("goodName"), Integer.parseInt(req.getParameter("goodNumber"))); // 改
break;
}
default: {
out.write("Operation not recognized");
return;
}
}
out.write(gson.toJson(user.shoppingCart)); // 查
}
}
// UserEntity.java
package org.example.webstructure.experiment2;
import java.util.ArrayList;
import java.util.Objects;
// 用户数据类
public class UserEntity {
String userName;
String password;
ArrayList<Good> shoppingCart = new ArrayList<>(); // 购物车信息
public UserEntity(String userName, String password) {
this.userName = userName;
this.password = password;
}
// 增加商品
public void addGood(String goodName) {
for (Good good : this.shoppingCart) {
if (Objects.equals(good.name, goodName)) {
good.number += 1;
return;
}
}
this.shoppingCart.add(new Good(goodName, 1));
}
// 删除商品
public boolean deleteGood(String goodName) {
for (Good good : this.shoppingCart) {
if (Objects.equals(good.name, goodName)) {
this.shoppingCart.remove(good);
return true;
}
}
return false;
}
// 修改商品数量
public void setGoodNumber(String goodName, int goodNumber) {
for (Good good : this.shoppingCart) {
if (Objects.equals(good.name, goodName)) {
good.number = goodNumber;
return;
}
}
this.shoppingCart.add(new Good(goodName, goodNumber));
}
// 查询商品数量
public int getGoodNumber(String goodName) {
for (Good good : this.shoppingCart) {
if (Objects.equals(good.name, goodName)) {
return good.number;
}
}
return -1;
}
}
// 商品数据类
class Good {
String name;
int number;
public Good(String name, int number) {
this.name = name;
this.number = number;
}
}
效果:
登录失败:
登录成功:
登录后对购物车进行操作:
增加商品(goodNumber参数不必要):
删除商品(goodNumber参数不必要):
修改商品数量:
没登录时直接对购物车进行操作:
本文作者:御坂19327号
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!