• 第八章 Servlet概述


    第八章 Servlet概述

    主要内容:

    了解servlet;

    掌握servlet实现;

    掌握servlet的生命周期。

    servlet概念

             Servlet是运行在服务器端用Java语言编写的应用程序,用来处理B/S架构下客户端请求的。需要运行在容器里面,常见容器有Tomcat

    如何实现servlet

    前提:新建web项目;必须包含javax.servlet包

    1. 所有的 Servlet必须实现javax.servlet.Servletjavax.Servlet接口;

    具体通过扩展这两个类实现:

    javax.servlet.GenericServletjavax.GenericServlet 支持所有协议

    javax.servlet.HttpServletjavax.HttpServlet 支持http协议

    创建servlet:ServletDemo1.java

    package com.silvan.servlet;

    import java.io.IOException;

    import java.io.PrintWriter;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class ServletDemo1 extends HttpServlet {

        /**

         * Constructor of the object.

         */

        public ServletDemo4() {

            super();

        }

        /**

         * Destruction of the servlet. <br>

         */

        public void destroy() {

            super.destroy(); // Just puts "destroy" string in log

            // Put your code here

        }

        /**

         * The doGet method of the servlet. <br>

         *

         * This method is called when a form has its tag value method equals to get.

         *

         * @param request the request send by the client to the server

         * @param response the response send by the server to the client

         * @throws ServletException if an error occurred

         * @throws IOException if an error occurred

         */

        public void doGet(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

            response.setContentType("text/html");

            PrintWriter out = response.getWriter();

            out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");

            out.println("<HTML>");

            out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");

            out.println("  <BODY>");

            out.print("    This is ");

            out.print(this.getClass());

            out.println(", using the GET method");

            out.println("  </BODY>");

            out.println("</HTML>");

            out.flush();

            out.close();

        }

        /**

         * The doPost method of the servlet. <br>

         *

         * This method is called when a form has its tag value method equals to post.

         *

         * @param request the request send by the client to the server

         * @param response the response send by the server to the client

         * @throws ServletException if an error occurred

         * @throws IOException if an error occurred

         */

        public void doPost(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

            response.setContentType("text/html");

            PrintWriter out = response.getWriter();

            out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");

            out.println("<HTML>");

            out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");

            out.println("  <BODY>");

            out.print("    This is ");

            out.print(this.getClass());

            out.println(", using the POST method");

            out.println("  </BODY>");

            out.println("</HTML>");

            out.flush();

            out.close();

        }

        /**

         * Initialization of the servlet. <br>

         *

         * @throws ServletException if an error occurs

         */

        public void init() throws ServletException {

            // Put your code here

        }

    }

    1. 在web.xml里面进行配置,

    a)         <servlet>和<servlet-mapping>里面的<servlet-name>值要一致

    b)         <servlet-class>表示实际servlet类

    c)         <url-pattern>访问地址

    d)         <servlet>必须写在<servlet-mapping>前面

    <servlet>

        <servlet-name>ServletDemo1</servlet-name>

        <servlet-class>com.silvan.servlet.ServletDemo1</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>ServletDemo1</servlet-name>

        <url-pattern>/ServletDemo1</url-pattern>

    </servlet-mapping>

    1. 启动Tomcat服务,通过地址http://localhost:8081/08Servlet/ServletDemo1进行访问,地址中的“/ServletDemo1”是web.xml文件中配置的<url-pattern>值

     servlet的生命周期

             指创建Servlet实例之后其存在的时间以及何时消失;   

    a)         Init():在Servlet的生命周期中,仅执行一次init方法,是在服务器装入Servlet时执行的

    如果servlet标签里面配置了<load-on-startup>且值不小于0则容器启动的时候调用init方法,否则第一次访问该servlet的时候调用;值越大优先级越高

    <servlet>

        <servlet-name>ServletDemo1</servlet-name>

        <servlet-class>com.silvan.servlet.ServletDemo1</servlet-class>

        <load-on-startup>0</load-on-startup>

      </servlet>

    b)         Service():可以无限次调用,是servlet的核心,主要业务逻辑块

    c)         Destroy():当容器reload的时候或者关闭的时候调用

     整个生命过程:

    (1)tomcat服务器创建servlet实例。

    (2)tomcat服务器调用init()方法,进行初始化。

    (3)用户发出请求,tomcat服务器将用户的请求封装为request对象,并创 建response对象,并当做参数传给Servlet中的service()方法。

    (4)tomcat服务器调用service()处理请求,处理完请求,并将响应发送给 浏览器端,浏览器端显示结果。

    (5)当用户再次发出对该servlet的请求,重复3和4步骤。

    (6)当tomcat服务器检测很长时间都没有对该servlet的请求,或tomcat服     务器要关闭,就会自动的调用destroy()方法完成销毁servlet。

    案例:

    简单的用户认证

    a)         登录页面

    public class Login extends HttpServlet {

             public void doGet(HttpServletRequest request, HttpServletResponse response) {

                       try {

                                // 解决中文乱码问题

                                response.setContentType("text/html;charset=gbk");

                                PrintWriter out = response.getWriter();

                                out.println("<html>");

                                out.println("<head><title>登陆页面</title></head>");

                                out.println("<body>");

                                out.println("<h1>登陆页面</h1>");

                                out.println("<form action=logincontrol>");

                                out.println("用户名:<input type=text name=username><br>");

                                out.println("密码:<input type=password name=password><br>");

                                out.println("<input type=submit value=登陆>");

                                out.println("</form>");

                                out.println("</body>");

                                out.println("</html>");

                       } catch (Exception e) {

                                e.printStackTrace();

                       }

             }

    }

    b)         登录验证

    /**

     * 用户校验servlet(掌握1.如何实现用户校验;2.如果进行页面的跳转)

     *

     * @author

     *

     */

    public class LoginContrl extends HttpServlet {

             public void doGet(HttpServletRequest request, HttpServletResponse response) {

                       // 获取请求的信息(方法的参数需要与input元素中name属性值相同,否则取不到值)

                       String username = request.getParameter("username");

                       String password = request.getParameter("password");

                       String sex = request.getParameter("sex");

                       try {

                                if (username.equals("admin") && password.equals("123")) {// 合法

                                         // 如果用户名合法,则把用户名放到session里面

                                         HttpSession hs = request.getSession();

                                         // 设置session的生命时间(单位s)

                                         hs.setMaxInactiveInterval(30);

                                         // 向session中放置属性

                                         hs.setAttribute("username", username);

                                         hs.setAttribute("password", password);

                                         // b.通过sendRedirect实现不同页面之间数据的共享

                                         response.sendRedirect("welcome?username=" + username

                                                            + "&password=" + password);

                                } else {// 不合法

                                         // 这个方法的参数是url-pattern里面配置的

                                         response.sendRedirect("login");

                                }

                       } catch (Exception e) {

                                e.printStackTrace();

                       }

             }

    }

    c)         网站欢迎界面

    /**

     * 网站的欢迎页面

     *

     * @author

     *

     */

    public class Welcome extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) {

               try {

                        response.setContentType("text/html;charset=gbk");

                        PrintWriter out = response.getWriter();

                        // 获取session

                        HttpSession hs = request.getSession();

                        // 根据session中的属性名获取相应的属性值

                        String usernameSession = (String) hs.getAttribute("username");

                        String passwordSession = (String) hs.getAttribute("password");

                        if (usernameSession != null) {// 如果从session当中能够获取用户名,则可以进入我的网站

                                 out.println("欢迎登陆我们的网站!用户名:" + usernameSession + " 密码:"

                                                    + passwordSession);

                        } else {// 否则显示空白页面

                        }

               } catch (Exception e) {

                        e.printStackTrace();

               }

    }

    }

  • 相关阅读:
    Struts2(五)——核心拦截器
    Struts2(四)——页面相关内容
    Struts2(三)——数据在框架中的数据流转问题
    Python Day 1
    c++-STL:删除子串
    九度1165:字符串匹配
    九度1051:数字阶梯求和
    数据结构之二叉树基础三
    数据结构之二叉树基础二
    数据结构之二叉树基础一
  • 原文地址:https://www.cnblogs.com/zhouyeqin/p/6743517.html
Copyright © 2020-2023  润新知