Servlet:顾名思义,有点类似于Service,当我们需要将前端传来的请求(以下简称为req)进行解析和操作时,我们需要这样一个Servlet接口来替代我们实现规范化操作获取资源(例如操作数据库等等)而HttpServlet是对Servlet的强化子类,在已经实现大部分方法的基础上,我们只需要重写自己的doget和dopost方法即可。
那么问题来了,什么时候实现doget,又什么时候实现dopost方法呢?答案是对请求进行操作时(如获取页面元素)进行doget,而操作数据库时(如dao)进行dopost;
以下是我的代码结构:
doGet写法:1.设置编码 2.获取页面元素(getParmeter)3。封装请求返回对象 4.调用Dao层的方法 5.跳转successServlet界面或failServlet界面req.getRequestDispatcher("/failServlet").forward(req,resp)(跳转前存储转发req.setAttribute(“user”,user))
@WebServlet("loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码
req.setCharacterEncoding("utf-8");
//获取请求参数
String name=req.getParameter("username");
String pwd=req.getParameter("password");
//封装user对象
User user=new User();user.setName(name);user.setPwd(pwd);
//调用Dao
UserDao dao=new UserDao();User loginUser=dao.login(user);
if(loginUser==null){
req.getRequestDispatcher("/failServlet").forward(req,resp);
}else {
req.setAttribute("user",loginUser);
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
login.html:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
用户名:<input type="text" name="username"> <br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
doPost写法(successServlet界面)
1.设置编码 2.类型转换 3.打印
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user= (User) req.getAttribute("user");
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("欢迎"+user.getName()+"访问");
}
业务需求:创建一个登录界面,登录成功返回成功界面,显示成功,失败返回失败界面,显示失败。