学习Servlet

2018-05-08  本文已影响0人  Tommmmm

一、什么是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。

上一篇 下一篇

猜你喜欢

热点阅读