JavaWeb(1) - HTTP/Tomcat/Servlet

JavaWeb(1) - HTTP/Tomcat/Servlet

HTTP

  • 概念:超文本传输协议, 规定了浏览器和服务器之间数据传输的规则

  • HTTP协议特点:
    (1)基于TCP协议:面向连接,安全
    (2)基于请求-响应模型的:一次请求对应一次响应
    (3)HTTP协议是无状态的协议:对于事务处理没有记忆能力,每次请求-响应都是独立的(缺点:多次请求不能共享数据 – 解决方案:Java种使用会话技术Cookie,Session来解决这个问题;优点:速度快)

Tomcat(Web服务器)

简介

  • 概念:Tomcat即Web容器/Servlet容器,Servlet需要依赖于Tomcat才能运行
  • 作用:封装HTTP协议操作,简化开发;同时可以将web项目部署到服务器中,对外提供网上浏览服务

基本使用

  • 进入Tomcat官网:https://tomcat.apache.org/,在导航栏左侧选择项目开发需求的版本
    在这里插入图片描述

  • 将下载好的安装包解压并放在没有中文命名的目录下,找到/bin目录随后点击startup.bat文件即可启动tomcat服务器

  • 基本配置:在conf/server.xml配置文件修改启动端口号 (特别注意:HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不用输入端口号)

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
  • Tomcat部署项目:将项目放置到webapps目录下,即部署完成 (通常JavaWeb项目会被打成war包,然后将war包放到webapps目录下,Tomcat会自动解压war文件)

IDEA创建Maven Web项目 与 IDEA中使用Tomcat

Web项目结构

打包方式:在IDEA右侧点击Maven菜单栏,选择Lifecycle下的package即可将项目打包
在这里插入图片描述

IDEA中创建Maven Web项目

方法1:使用骨架(项目模板)

  • 选择web骨架创建项目:进入IDEA,选择【新建项目】,选择Maven项目
    在这里插入图片描述

  • 删除多余的依赖坐标:点击pom.xml配置文件将如下展示的代码要全部删去

    <name>tomcat_demo_01 Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>
    
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    
    <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    </dependencies>
    
    <build>
    <finalName>tomcat_demo_01</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    </build>
    
  • 补齐缺失的目录结构:在/src/main目录下添加两个文件夹:一个是java文件夹(必须设置为sources root),另一个为resources文件夹(必须设置为resources root)
    在这里插入图片描述

方法2:不使用骨架

  • 创建项目:进入IDEA点击创建项目,选择Maven项目,不要选择web项目骨架
    在这里插入图片描述

  • 在pom.xml中添加打包方式为war

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.itheima</groupId>
        <artifactId>tomcat_demo_02</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
        <!--
            选择打包的方式:
                * jar:默认的打包方式
                * war:web项目打包的方式
        -->
        <packaging>war</packaging>
    
        <properties>
            <maven.complier.source>8</maven.complier.source>
            <maven.complier.target>8</maven.complier.target>
        </properties>
    </project>
    
  • 补齐缺失目录结构webapp
    在这里插入图片描述

在IDEA中使用Tomcat

方法1:将本地Tomcat集成到IDEA中,然后进行项目部署即可

  • 在IDEA开发界面的上侧找到 Add Configuration,进入该界面后点击左上角的
    在这里插入图片描述
  • 选择Deployment菜单栏,点击 +,选择Artifact导入的需要的war包
    在这里插入图片描述

方法2:IDEA中使用 Tomcat Maven插件

  • 在pom.xml配置文件中,添加tomcat maven插件,具体操作是alt+insert选择plugin template并将对应的配置如下

    <build>
        <plugins>
            <plugin>
                <!-- tomcat 插件 -->
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>
    
  • 在IDEA右侧点击maven在plugins菜单栏下选择tomcat7下的run,即可运行;
    在这里插入图片描述

  • 必要时可以在下面添加默认启动的默认端口以及默认路径

    <configuration>
     	<port>80</port>
        <path>/</path>
    </configuration>
    

Servlet

Servlet是Java提供的一门动态web资源开发技术,实质上是一个接口,在开发的过程中需要定义Servlet类实现Servlet接口,并由web服务器运行

Servlet两问

  • Servlet由谁创建?Servlet方法由谁调用?
    Servlet由web服务器创建,Servlet方法由web服务器调用

  • 服务器怎么知道Servlet中一定由service方法?
    因为我们自定义的Servlet,必须实现Servlet接口并复写其方法,而Servlet接口中有service方法

Servlet生命周期

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理

  • 加载和实例化: 默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象;
  • 初始化: 在Servlet实例化之后,容器将调用Servlet的 init() 方法初始化这个对象,完成一些如加载配置文件,创建连接等初始化的工作,该方法只调用一次
  • 请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service() 方法对请求进行处理
  • 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet的destroy() 方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java垃圾收集器所回收

快速入门

  • 创建web项目,导入Servlet依赖坐标

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    
  • 定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话,随后在类上使用@WebServlet注解,配置该Servlet的访问路径

    @WebServlet(urlPatterns = "/demo2",loadOnStartup = 1)
    public class ServletDemo2 implements Servlet {
    
        /**
         * 初始化方法
         *      1. 调用时机:默认情况下,Servlet被第一次访问时,调用
         *          * loadOnStartup
         *      2. 调用次数:1次
         * @param servletConfig
         * @throws ServletException
         */
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("init...");
        }
    
        public ServletConfig getServletConfig() {
            return null;
        }
    
    
        /**
         * 提供服务
         *  1.调用时机:每一次Servlet被运行时,调用
         *  2.调用次数:多次
         * @param servletRequest
         * @param servletResponse
         * @throws ServletException
         * @throws IOException
         */
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("servlet hello world");
        }
    
        public String getServletInfo() {
            return null;
        }
    
    
        /**
         * 销毁方法
         *  1.调用时机:内存释放或者服务器关闭的时候,Servlet对象被销毁,调用
         *  2.调用次数:1次
         */
        public void destroy() {
            System.out.println("destroy...");
        }
    }
    
    
  • 访问:启动Tomcat,浏览器输入URL访问该Servlet

    http://localhost:8080/tomcat_demo_02/demo1
    

Servlet体系结构

在基于B/S架构的web项目中,我们通常需要用HTTP协议,因此我们在自定义Servlet的时候,会继承HttpServlet
在这里插入图片描述

HttpServlet 使用步骤
  • 继承HttpServlet

    public class MyHttpServlet implements Servlet {
    
    	/*其余的函数省去,方便阅读*/
    	
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
            //根据请求方式的不同,进行分类的处理
            HttpServletRequest request = (HttpServletRequest) req;
    
            //1.获取请求方式
            String method = request.getMethod();
    
            //2.判断
            if("GET".equals(method)){
                //get方式的处理逻辑
                doGet(req,res);
            }else if("POST".equals(method)){
                //post方式的处理逻辑
                doPost(req,res);
            }
        }
    
        protected void doPost(ServletRequest req, ServletResponse res) {
        }
    
        protected void doGet(ServletRequest req, ServletResponse res) {
        }
    }
    
  • 重写doGet和doPost方法

    @WebServlet("/demo5")
    public class ServletDemo5 extends MyHttpServlet {
    
        @Override
        protected void doGet(ServletRequest req, ServletResponse res) {
            System.out.println("get!!!!");
        }
    
        @Override
        protected void doPost(ServletRequest req, ServletResponse res) {
            System.out.println("post!!!");
        }
    }
    
  • HttpServlet原理:获取请求方式,并根据不同的请求方式,调用不同的doXXX方法

Servlet urlPattern配置

Servlet要想被访问,必须配置其访问的路径(urlPattern)

  • 一个Servlet,可以配置多个urlPattern

    @WebService(urlPatterns = {"/demo1","/demo2"})
    
  • urlPattern 配置规则
    精准匹配

    //配置路径
    /* 访问路径:localhost:8080/[Java_demo_name]/user/select */
    @WebServlet(urlPattern="user/select")
    

    目录匹配(注意:当一个路径同时满足精准匹配和目录匹配时,精准匹配的优先级更高优先级)

    //配置路径
    /* 访问路径:localhost:8080/[Java_demo_name]/user/* */
    @WebServlet(urlPattern="user/*")
    

    扩展名匹配

    //配置路径
    /* 访问路径:localhost:8080/[Java_demo_name]/[任意命名].do */
    @WebServlet(urlPattern= "*.do")
    

    任意匹配(特别注意:/和/*区别–当我们的项目中配置了“/”,会覆盖掉tomcat中的DefaultServlet,当其它的urlPattern都匹配不上时都会走这个Servlet;当我们的项目配置了“/”,意味着匹配任意访问路径)

XML配置方式编写Servlet

基本步骤:

  • 编写Servlet类

  • 在web.xml

    <!--
            Servlet 全类名
        -->
        
        <servlet>
            <servlet-name>demo13</servlet-name>
            <servlet-class>com.itheima.web.ServletDemo13</servlet-class>
        </servlet>
    
        <!--
            Servlet 当前路径
        -->
        <servlet-mapping>
            <servlet-name>demo13</servlet-name>
            <url-pattern>/demo13</url-pattern>
        </servlet-mapping>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值