学习Servlet
一、什么是Servlet
servlet就是一个Java接口,接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法。
其中最主要的是两个生命周期方法init()和destroy(),还有一个处理请求的service()
所有实现servlet接口的类,都需要回答这三个问题:
初始化时要做什么
销毁时要做什么
接受到请求时要做什么
请求怎么来到servlet呢?
答案是servlet容器,比如我们最常用的tomcat,
tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。
二、Servlet的运行过程
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
②装载并创建该Servlet的一个实例对象。
③调用Servlet实例对象的init()方法。
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。






三、编写一个servlet
//登陆页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="loginServlet" method="post"><!-- action写要请求Servlet的名 -->
用户名:<input type="text" id="uname" name="uname"><br><br>
密码:<input type="password" id="pwd" name="pwd"><br><br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</body>
</html>
//登陆成功页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录成功页面</title>
</head>
<body>
登录成功!${name},${pwd}<form action="loginServlet" method="get"><input type="submit" value="注销登录"></form>
</body>
</html>
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public loginServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();//获取session
Object name = session.getAttribute("name");//从session中获取用户名
Object pwd = session.getAttribute("pwd");//从session获取用户密码
System.out.println(name+":"+pwd); //测试一下,输出获取的用户名和密码
session.invalidate(); //注销session
response.sendRedirect("login.jsp"); //跳转到login.jsp页面
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// doGet(request, response);
// 设置编码为utf-8
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 获取用户名和密码
String name = request.getParameter("uname");
String pwd = request.getParameter("pwd");
// 校验用户名和密码是否正确
if ("admin".equals(name) && "123".equals(pwd)) {// 验证成功
HttpSession session = request.getSession();//获取session
session.setAttribute("name", name);// 将用户名和密码保存在session中
session.setAttribute("pwd", pwd);// 将用户名和密码保存在session中
response.sendRedirect("success.jsp");// 跳转到success.jsp页面
} else {// 校验不成功,则留在跳转到login.jsp页面
response.sendRedirect("login.jsp");
}
}
}
当发出客户端请求的时候,调用service 方法并传递一个请求和响应对象。Servlet首先判断该请求是GET 操作还是POST 操作。然后它调用下面的一个方法:doGet 或 doPost。