实现步骤
在src内新建net.zxy.shop.servlet包,然后在里面创建控制类
登录处理类LoginServlet
package net.zxy.shop.servlet;
import java.io.IOException;
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 javax.servlet.http.HttpSession;
import net.zxy.shop.bean.User;
import net.zxy.shop.service.UserService;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置请求对象的字符编码
request.setCharacterEncoding("utf-8");
// 获取会话对象
HttpSession session = request.getSession();
// 获取用户名
String username = request.getParameter("username");
// 获取密码
String password = request.getParameter("password");
// 定义用户服务对象
UserService userService = new UserService();
// 执行登录方法,返回用户实体
User user = userService.login(username, password);
// 判断用户登录是否成功
if (user != null) {
// 设置session属性
session.setMaxInactiveInterval(5 * 60);
session.setAttribute("username", username);
session.removeAttribute("loginMsg");
// 根据用户权限跳转到不同页面
if (user.getPopedom() == 0) {
System.out.println("用户登录成功,进入后台管理!");
response.sendRedirect(request.getContextPath() + "/backend/management.jsp");
} else if (user.getPopedom() == 1) {
System.out.println("用户登录成功,进入前台显示类别!");
response.sendRedirect(request.getContextPath() + "/showCategory");
}
} else {
System.out.println("用户名或密码错误,用户登录失败!");
// 设置session属性loginMsg
session.setAttribute("loginMsg", "用户名或密码错误!");
response.sendRedirect(request.getContextPath() + "/login.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
修改一下首页文件index.jsp:
启动服务器,显示首页:
在地址栏localhost:8080/simonshop/后边输入login?username=admin&password=12345,测试我们的登录信息。这儿需要匹配数据库。登录成功时会跳转到/backend/management.jsp页面,登录失败时会重定向到login.jsp页面。
接着我们重启一下服务器,再输入:
我们看看控制台的打印效果:
当我们用户名密码输入的与数据库不匹配时,再看看效果:
会自动跳转到login.jsp页面
注销处理类LogoutServlet
package net.zxy.shop.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 让session失效
request.getSession().invalidate();
// 重定向到登录页面
response.sendRedirect(request.getContextPath() + "/login.jsp");
System.out.println("用户注销成功!");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
下面进行测试:
要完成注销,首先要是登录成功,我们重启一下服务器,然后输入用户:
然后测试用户注销功能,在地址栏中输入logout,测试效果:
会跳转到login.jsp页面
注册处理类RegisterServlet
package net.zxy.shop.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.sql.Timestamp;
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 javax.servlet.http.HttpSession;
import net.zxy.shop.bean.User;
import net.zxy.shop.service.UserService;
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置请求对象的字符编码
request.setCharacterEncoding("utf-8");
// 获取session对象
HttpSession session = request.getSession();
// 获取用户名
String username = request.getParameter("username");
// 获取密码
String password = request.getParameter("password");
// 获取电话号码
String telephone = request.getParameter("telephone");
// 设置注册时间(时间戳对象)
Timestamp registerTime = new Timestamp(System.currentTimeMillis());
// 设置用户为普通用户
int popedom = 1;
// 创建用户对象
User user = new User();
// 设置用户对象信息
user.setUsername(username);
user.setPassword(password);
user.setTelephone(telephone);
user.setRegisterTime(registerTime);
user.setPopedom(popedom);
// 创建UserService对象
UserService userService = new UserService();
// 调用UserService对象的添加用户方法
int count = userService.addUser(user);
// 判断是否注册成功
if (count > 0) {
// 设置session属性
session.setAttribute("registerMsg", "恭喜,注册成功!");
// 重定向到登录页面
response.sendRedirect(request.getContextPath() + "/login.jsp");
// 在控制台输出测试信息
System.out.println("恭喜,注册成功,跳转到登录页面!");
} else {
// 设置session属性
session.setAttribute("registerMsg", "遗憾,注册失败!");
// 重定向到注册页面
response.sendRedirect(request.getContextPath() + "/frontend/register.jsp");
// 在控制台输出测试信息
System.out.println("遗憾,注册失败,跳转到注册页面!");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
下面我们来进行测试。启动服务器,访问http://localhost:8080/simonshop/register?username=萌萌哒&password=55555&telephone=15896961234,敲回车,查看结果:
会提示注册成功,会跳转到登录页面。
我们再去数据库中查看是否增加了新的数据:
确定是增加了新用户。
但是我们在注册时,数据库中电话号码基本上是十一位,当我们输入12位的时候看一下效果:
重启服务器,输入一下内容:
我这儿输入了十二位的电话号码:
看看效果:
注册失败的话就会为我们重定向到注册页面,我们再去控制台看看输出:
打印出注册失败的语句,并且为我们抛出了一个异常,解释是数据库中的telphone字段错误,提示我们该字段长度不能超过11位
显示类别处理类ShowCategoryServlet
package net.zxy.shop.servlet;
import java.io.IOException;
import java.util.List;
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 javax.servlet.http.HttpSession;
import net.zxy.shop.bean.Category;
import net.zxy.shop.service.CategoryService;
@WebServlet("/showCategory")
public class ShowCategoryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 创建类别服务对象
CategoryService categoryService = new CategoryService();
// 获取全部商品类别
List<Category> categories = categoryService.findAllCategories();
// 获取session对象
HttpSession session = request.getSession();
// 把商品类别列表以属性的方式保存到session里
session.setAttribute("categories", categories);
// 重定向到显示商品类别页面(showCategory.jsp)
response.sendRedirect(request.getContextPath() + "/frontend/showCategory.jsp");
// 在服务器控制台输出测试信息
for (Category category: categories) {
System.out.println(category);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
下面我们来进行测试。
重启服务器,访问http://localhost:8080/simonshop/showCategory:
会跳转到showCategory.jsp页面,并在控制台为我们打印出该类别下的信息:
显示商品处理类ShowProductServlet
package net.zxy.shop.servlet;
import java.io.IOException;
import java.util.List;
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 javax.servlet.http.HttpSession;
import net.zxy.shop.bean.Product;
import net.zxy.shop.service.CategoryService;
import net.zxy.shop.service.ProductService;
@WebServlet("/showProduct")
public class ShowProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取类别标识符
int categoryId = Integer.parseInt(request.getParameter("categoryId"));
// 创建商品类别服务对象
CategoryService categoryService = new CategoryService();
// 由类别标识符获取类别名
String categoryName = categoryService.findCategoryById(categoryId).getName();
// 创建商品服务对象
ProductService productService = new ProductService();
// 获取指定商品类别的商品列表
List<Product> products = productService.findProductsByCategoryId(categoryId);
// 获取session对象
HttpSession session = request.getSession();
// 把商品列表对象以属性的方式保存到session里
session.setAttribute("products", products);
// 重定向到显示商品信息页面
response.sendRedirect(request.getContextPath() + "/frontend/showProduct.jsp?categoryName=" + categoryName);
// 在服务器端控制台输出测试信息
for (int i = 0; i < products.size(); i++) {
System.out.println(products.get(i));
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
下面我们来进行测试。
重启服务器,访问http://localhost:8080/simonshop/showProduct?categoryId=1:
跳转到下面的页面:
接着我们去控制台看看输出结果:
上面的地址栏中的意思就是通过categoryId=1来查找商品,我们再去数据库中比较一下看看打印出的结果是不是这个:
以上所有的代码只是测试部分,并未写页面,所以会有404错误,但是主要是测试,没其他的效果。
来源:CSDN
作者:喜欢夜雨吗
链接:https://blog.csdn.net/weixin_43581288/article/details/103486049