zoukankan      html  css  js  c++  java
  • JavaWeb——Servlet开发1

    Java Servlet是运行在服务器端上的程序,Servlet是Java Servlet包中的一个接口,能够直接处理和相应客户端的请求,也可以将工作委托给应用的其他类。

    public interface Servlet {
        void init(ServletConfig var1) throws ServletException;
    
        ServletConfig getServletConfig();
    
        void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
    
        String getServletInfo();
    
        void destroy();
    }

      这是Java Servlet包中的Servlet接口的源代码,init方法用于初始化,service用于响应请求,destroy用于销毁该Servlet。

    public abstract class HttpServlet extends GenericServlet {
        public HttpServlet() {
        }
    
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ }
    
        protected long getLastModified(HttpServletRequest req) {}
    
        protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException}
    
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{}
    
        protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{    }
    
        protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{}
    
        private Method[] getAllDeclaredMethods(Class<? extends HttpServlet> c) {}
    
        protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
    
        protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
    
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
    
        private void maybeSetLastModified(HttpServletResponse resp, long lastModified) {}
    
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {}
    }

      这是Java Servlet包中的HttpServlet的所有方法(具体实现我删掉了),

    • 可以看到HttpServlet继承自GenericServlet,GenericServlet是一个实现了Servlet接口的抽象类,不过GenericServlet只是添加了一些用于日志操作的和从应用和Servlet配置中获取信息的方法。
    • HttpServlet提供了响应每种Http方法类型的实现。

    1、使用maven引入Java Servlet包

        <!-- servlet -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
        </dependency>

    2、实现一个基本的HttpServlet类。

      创建一个继承自HttpServlet的HelloServlet类,这里调用参数HttpServletResponse中的getWriter方法,获得一个Java.io.PrintWriter.接下来再调用PrintWriter的println方法向输出流中输入文本“helloworld”+Serlet的名字

      这里的初始化仅仅只是添加了输出几句话而已,平常我们可以选择什么都不做。

    public class HelloServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.getWriter().println("helloworld" + this.getServletName());
        }
    
    
        @Override
        public void init() throws ServletException {
            System.out.println("Servlet " + this.getServletName() + "has started");
        }
    
        @Override
        public void destroy() {
            System.out.println("Servlet " + this.getServletName() + "has stopped");
        }
    }

    3、部署Servlet

      打开Web.xml。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1" id="data-fabric-web-tool">
    
      <display-name>Hello World Application</display-name>
      
      <servlet>
        <servlet-name>firstServlet</servlet-name>
        <servlet-class>servlet.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>firstServlet</servlet-name>
        <url-pattern>/first</url-pattern>
      </servlet-mapping>
    
    </web-app>

      其中<servlet></servlet>和<servlet-mapping></servlet-mapping>是部署的关键,而且它两是一一对应的。

      <servlet-name>是Servlet的名字,这里是任意设定的。

      <servlet-class>是使用的类

      <load-on-startup>的用处是,如果多个Servlet包含了该标签那么它们将按照标签内的大小顺序启动,数字越大启动得越晚。

      所以<servlet></servlet>就是将一个<servlet-class>中的servlet类命名为<servlet-name>这样应用程序运行的时候就会启动这个servlet

      <servlet-mapping></servlet-mapping>中的<servlet-name>和<url-pattern>配置之后,所有访问应用程序的URL/first都将由firstServlet处理。

      <servlet>
        <servlet-name>firstServlet</servlet-name>
        <servlet-class>servlet.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet>
        <servlet-name>secondServlet</servlet-name>
        <servlet-class>servlet.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>firstServlet</servlet-name>
        <url-pattern>/first</url-pattern>
        <url-pattern>/third</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>secondServlet</servlet-name>
        <url-pattern>/second</url-pattern>
      </servlet-mapping>

      我们甚至可以这么来设置部署,这里的意思是一个Servlet可以使用不同的URL进行访问,如果两个Servlet有着相同的逻辑,但链接到不同的数据库,我们可以使用相同的类。

      所以最后实现了两个Servlet的实例,它们使用的是相同的Servlet类,名字不同,被映射到了不同的URL上,而且这里有两个不同的URL指向firstServlet。

    4、使用Tomcat+IDEA运行测试

      点击Run,添加Tomcat Server,在Deployment中点击+号,点击Aetifact添加项目,修改Application context,下图这样运行项目的时候浏览器可以通过这个"http://localhost:8080/hello-world/"URL进行访问

    5、效果

  • 相关阅读:
    电源
    SM2947
    网表
    cadence设计思路
    青山依旧在,几度夕阳红
    乐观锁与悲观锁
    笔记
    强弱软虚引用
    缓存相关
    dubbo
  • 原文地址:https://www.cnblogs.com/xxbbtt/p/8327843.html
Copyright © 2011-2022 走看看