zoukankan      html  css  js  c++  java
  • Servlet

    一---Servlet简介

     1)Servlet就是sun公司开发动态web的一门技术

     2)sun在这些API中提供一个接口叫做:servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤。

       2.1)编写一个类,实现Servlet接口

       2.2)把开发好的java类部署到web服务器中。

    把实现了Servlet接口的java程序叫做Servlet

    二---HelloServlet

    servlet接口在sun公司有两个默认的实现类:HttpServlet,GenerricServlet

    GenerricServlet继承了Servlet。

     HttpServlet继承了GenerricServlet。

     

    1)构建一个maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建module,这个空的工程就是maven的工程

    2)关于maven父子工程的理解:

     父项目中会有

    <modules>
    <module>servlet-01</module>
    </modules>

    子项目中会有

    <parent>
    <artifactId>javaweb-02-servlet</artifactId>
    <groupId>com.kuang</groupId>
    <version>1.0-SNAPSHOT</version>
    </parent>

    注:这里一定一定一定要加上,否则程序后面继承Httpservlet的时候会报错。如果程序不自动出现就手动添加。

    三---maven环境优化

    1)修改web.xml为最新的

    2)将maven的结构搭建完整

    四---编写一个servlet'程序

    1)编写一个普通类

    2)实现servlet接口,这里我们直接继承HttpServlet

    @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            // ServletOutputStream outputStream = resp.getOutputStream();
            PrintWriter writer = resp.getWriter(); // 响应流
            writer.print("hello, Servlet");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }

     servlet类:

    GenericServlet源码分析:
    
    

     HttpServlet的service方法源码分析:

     1 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     2         String method = req.getMethod();
     3         long lastModified;
     4         if (method.equals("GET")) {  // 如果是get方式
     5             lastModified = this.getLastModified(req);
     6             if (lastModified == -1L) {
     7                 this.doGet(req, resp);   // 调用get对应的方法
     8             } else {
     9                 long ifModifiedSince = req.getDateHeader("If-Modified-Since");
    10                 if (ifModifiedSince < lastModified) {
    11                     this.maybeSetLastModified(resp, lastModified);
    12                     this.doGet(req, resp);
    13                 } else {
    14                     resp.setStatus(304);
    15                 }
    16             }
    17         } else if (method.equals("HEAD")) {
    18             lastModified = this.getLastModified(req);
    19             this.maybeSetLastModified(resp, lastModified);
    20             this.doHead(req, resp);
    21         } else if (method.equals("POST")) {    // 如果是post方式
    22             this.doPost(req, resp);// 调用post方法
    23         } else if (method.equals("PUT")) {
    24             this.doPut(req, resp);
    25         } else if (method.equals("DELETE")) {
    26             this.doDelete(req, resp);
    27         } else if (method.equals("OPTIONS")) {
    28             this.doOptions(req, resp);
    29         } else if (method.equals("TRACE")) {
    30             this.doTrace(req, resp);
    31         } else {
    32             String errMsg = lStrings.getString("http.method_not_implemented");
    33             Object[] errArgs = new Object[]{method};
    34             errMsg = MessageFormat.format(errMsg, errArgs);
    35             resp.sendError(501, errMsg);
    36         }
    37 
    38     }
    39 
    40     private void maybeSetLastModified(HttpServletResponse resp, long lastModified) {
    41         if (!resp.containsHeader("Last-Modified")) {
    42             if (lastModified >= 0L) {
    43                 resp.setDateHeader("Last-Modified", lastModified);
    44             }
    45 
    46         }
    47     }

    这里面的默认实现不是我们想要的。但我们在用普通类继承的时候,只需要重写doPost和doGet方法

    五---编写Servlet的映射
    为什么需要映射:我们写的是java程序,但是要通过浏览器访问,而浏览器需要连接web服务器
    所以我们需要在web服务器中注册我们写的Servlet,还需要给她一个浏览器能够访问的路径。
    <!--注册servlet -->
      <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
      </servlet>
    
      <!--servlet的请求路径 -->
      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>  // 注意这里是 /hello。网址模式
      </servlet-mapping>
    </web-app>
    
    

    六---配置Tomcat

    
    

     配置项目发布的路径,这里的s1是servlet01:war的简写

    七:启动测试

  • 相关阅读:
    C#控件开发(三)
    C#控件开发(四)
    如何将方行的按纽改变为其他的形状
    C#绘制圆角矩形
    Win7右键不能新建文件夹
    WinForm窗体FormClosing事件导致无法关机
    反射动态调用WinForm窗口
    C#钩子本线程内消息拦截
    C#控件开发(一)
    七个C#编程小技巧
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14594409.html
Copyright © 2011-2022 走看看