• SERVLET 学习笔记


    SERVLET 学习笔记

    一、Servlet基本定义

      Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类。通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容。

    二、Tomcat容器等级

    Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器。其中,CONTEXT容器,一个CONTEXT容器对应着一个WEB工程,而CONTEXT容器又是被SERVLET容器管理的。

    三、手动编写第一个SERVLET

    手动编写自己servlet需要以下三个步骤:

    1、          继承自HTTPServlet

    2、          重写doGET()方法,或者是doPost()方法,具体要根据客户端的请求的action的方式来确定实现。

    3、          不要忘记在web.xml文件中注册自己编写的servlet类。

    Servlet的继承关系如下:

    编写自己的第一个servlet如下:MyServlet.Java

    package 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;
    
    import org.apache.log4j.Logger;
    
    /**
     * Servlet implementation class MyServlet
     */
    public class MyServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        private static final Logger LOGGER = Logger.getLogger(MyServlet.class);
    
        /**
         * @see HttpServlet#HttpServlet()
         */
        public MyServlet() {
            System.out.println("装载当前的 servlet");
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
         *      response)
         */
        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            LOGGER.info("测试我的第一个servlet");
            PrintWriter out = response.getWriter();
            response.setContentType("text/html;charset=utf-8;");
            out.println("<strong>get方式访问我的servlet成功!!</strong>");
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
         *      response)
         */
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            LOGGER.info("测试我的第一个servlet");
            PrintWriter out = response.getWriter();
            response.setContentType("text/html;charset=utf-8;");
            out.println("<strong>post方式访问我的servlet成功!!</strong>");
        }
    
        @Override
        public void init() throws ServletException {
            // TODO Auto-generated method stub
            LOGGER.info("当前的 servlet init");
            System.out.println("当前的 servlet init");
        }
    
    }

    Web.xml中的配置如下:

    <servlet>
        <description>第一个测试的servlet</description>
        <display-name>MyServlet</display-name>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>servlet.MyServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
      </servlet-mapping>

    JSP中的访问方式:

     

    <%@ 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>servlet测试</title>
    </head>
    <body>
        <h1>我的第一个SERVLET程序</h1>
        <hr>
        <a href="MyServlet">get 方式请求servlet</a>
    
        <form action="MyServlet" method="post">
            <input type="submit" value="post方式请求 servlet">
        </form>
    
    </body>
    </html>

     

    四、TOMCAT中装载SERVLET方式:

    A、 Servlet容器自动装载servlet,这个需要在web.xml中配置注册servlet的时候,加上load-on-startup的配置,配置如下:

      <servlet>
        <description>第一个测试的servlet</description>
        <display-name>MyServlet</display-name>
        <servlet-name>MyServlet</servlet-name>
        <load-on-startup>1</load-on-startup>
        <servlet-class>servlet.MyServlet</servlet-class>
      </servlet>
    其中的数字越小,加载的优先级就会越高

    B、 Client首次向servlet请求,tomcat容器会加载servlet

    C、 Servlet的类文件被修改更新之后,tomcat容器会重新加载servlet

     

    五、ServletJSP的九大内置对象

     

    先有的servlet,之后才有的JSPjsp的前身就是servlet

     

    六、SERVLET的跳转路径

    Servlet的跳转路径分为:绝对路径相对路径两种方式

    6.1 访问servlet的路径区分

    绝对路径:
    
    <a href="<%=request.getContextPath()%>/aaa/MyServlet">get 方式请求servlet</a>
    
    必须要加上项目的根目录
    
    相对路径:
    
    <a href="aaa/MyServlet">get 方式请求servlet</a>
    
    最前面不要“/”,此时加上斜线,表示是服务器的根目录,反而找不到对应的servlet。
    
     
    
    切记:在  <url-pattern>/MyServlet</url-pattern>中配置路径一定是以“/”开头的,表示的是项目的根目录。

    6.2 servlet 内部跳转的路径区分

    1.请求重定向:redirect  url会改变 相当于客户端重新请求
    response.sendRedirect(request.getContextPath() + "/test.jsp");
    2.服务器内部跳转:forward  url不会改变 
    request.getRequestDispatcher("/test.jsp").forward(request, response);

     本文参考慕课网servlet的课程整理而成。

  • 相关阅读:
    CentOS修改hosts文件及生效命令
    Elasticsearch处理 空对象问题
    Windows查看某个端口被占用的解决方法
    PHP Fatal error: Uncaught Error: Class ‘\Elasticsearch\Serializers\SmartSerializer‘ not found in /h
    浏览器正常导出文件phpecxel
    ElasticsearchPHP 快速开始
    MySQL为什么选择B+树存储索引
    PHP7.3.0+弃用FILTER_FLAG_SCHEME_REQUIRED的解决办法
    Zoom支持自动生成字幕;SharePlay上线;Safari 更新导致大量bug |WebRTC风向
    日均请求量1.6万亿次背后,DNSPod的秘密国密DoH篇
  • 原文地址:https://www.cnblogs.com/lilin0719/p/5402738.html
Copyright © 2020-2023  润新知