美文网首页
学习Servlet

学习Servlet

作者: Tommmmm | 来源:发表于2018-05-08 10:57 被阅读0次

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

    相关文章

      网友评论

          本文标题:学习Servlet

          本文链接:https://www.haomeiwen.com/subject/lsavrftx.html