飞道的博客

Web常识 Tomcat Servlet

389人阅读  评论(0)

Web常识

        上网浏览的内容:资源

静态资源

        无论何时何地何种身份都不会发生改变的:图片,音频,视频,js,css


动态资源

        随着时间,地点或者人物的不同,看到的内容是不一样的:Servlet,jsp

软件架构

C/S架构

客户端服务端:用户本地客户端程序,远程服务器端程序,QQ,微信


B/S结构

浏览器服务端:用户通过输入地址URL,可以访问不同的服务器,CSDN,B站

Web资源

URL:统一资源定位符,可以在网络中定义唯一资源

        协议:http://                             HTTP协议或者HTTPS协议

        主机:localhost                        发布资源电脑(服务器)ip地址

        端口:8080                              应用程序入口,每台电脑每个端口号,只能启动一个

        URI:/mywebapp/dzz.html      三部分:  应用发布名称 / 资源目录名称 / 资源名称

               应用中定位唯一资源


物理服务器

        电脑:安装的系统(Linux)占用资源小

应用服务器

        软件:tomcat


浏览器  →  服务器:请求                浏览器  ←  服务器:响应

Tomcat安装

        ·官网:tomcat.apache.org

压缩

        压缩到熟悉路径:例D:\LearningSoftware

启动命令窗口

        ①输入自己Tomcat的bin目录:例CD D:\LearningSoftware\apache-tomcat-8.5.31\bin

        ②输入:例D:

        ③输入:startup.bat(可按Tab补全)

浏览器输入

        localhost:8080        或者        127.0.0.1:8080

可以显示成功,即完成tomcat安装

TomcatURL默认设置

Tomcat8.5.31

默认端口号

        conf→server.xml 69行-71行

①端口被占用可以修改此处端口号

②HTTP协议的默认端口号是:80        当把tomcat端口号改成80时,浏览器会省略


默认资源

        conf→web.xml 最后位置

 访问以下资源时,可以不写资源名称


默认应用

        webapps→ROOT

在应用发布目录中,名称为ROOT的应用目录,当访问该应用时,应用发布名称可以不写

我们访问浏览器的网址时,就是访问的默认应用默认端口默认资源

Tomcat项目部署 

Tomcat的项目下

在命令窗口启动Tomcat

        上面↑(Tomat窗口需要一直执行,发布新资源需要重启Tomcat)

浏览器上发布

http://localhost:8080/mywebapp/dzz.html

IDEA集成Tomcat 

idea版本2021.3.3为例:

①找设置:setting

②输入:Application Servers

+ Tomcat

然后一直点OK,再点OK,再点Apply,再点OK完成设置

③New Project选择web骨架

④核对Maven路径

填写Name:archetypeCatalog Value:internal

⑤等待加载

最后调整骨架,完成搭建

⑥集成tomcat

记得修改应用发布名称:/

⑦发布

点Tomcat边上的启动Run或者捉虫DeBug,等待页面展示

HTTP协议

        超文本传输协议,交互规则是请求-响应

        客户浏览器-服务器:一请求一响应(一问一答,先问后答) 

        端口号:80

        请求独立:无状态 HTTP协议无法记录上一次方法


HTTP请求

        请求行:永远位于请求的第一行

                        请求的方式,请求资源的URI,使用的协议和版本

        请求头:第一个空行到第二个空行结束

                        服务器给浏览器的暗号

        请求体:从第二个空行后开始,到内容结束

                        浏览器给服务器的一些请求参数,目前阶段只有POST有请求体,GET提交在地址栏


HTTP响应

        响应行:永远位于请求的第一行

                        协议和版本,响应状态码

        响应头:第一个空行到第二个空行结束

                        服务器给浏览器的暗号,在开发者可以设置

        响应体:从第二个空行后开始,到内容结束

                        它就是响应正文,和网页源码看到的内容都一样

响应行状态码:

        200:操作成功

        302:重定向

        404:请求路径没有对应资源(黑:有应用没有资源 白:没有找到应用)

        500:服务器错误

Servlet

        Java提供的一套动态web资源开发技术

         Aservlet是一个运行在Web服务器中的小型Java程序。Serlets接收响应来自Web客户端的请求,通常是跨HTTP的,即超文本传输协议(官网API翻译)

        javax.servlet.http.Httpservlet

        重写service方法才能有Servlet对象,Servlet由web服务器创建,Servlet方法由web服务器调用


入门案例

执行流程

①先配置pom.xml引入servlet到maven仓库


   
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0 </modelVersion>
  5. <groupId>com.itheima </groupId>
  6. <artifactId>day03_servlet </artifactId>
  7. <version>1.0-SNAPSHOT </version>
  8. <packaging>war </packaging>
  9. <properties>
  10. <project.build.sourceEncoding>UTF-8 </project.build.sourceEncoding>
  11. <maven.compiler.source>1.8 </maven.compiler.source>
  12. <maven.compiler.target>1.8 </maven.compiler.target>
  13. </properties>
  14. <dependencies>
  15. <dependency>
  16. <groupId>javax.servlet </groupId>
  17. <artifactId>javax.servlet-api </artifactId>
  18. <version>3.1.0 </version>
  19. </dependency>
  20. </dependencies>
  21. </project>

②引入web.xml配置servlet信息


   
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation= "http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6. version= "3.1"
  7. metadata-complete= "true">
  8. <servlet>
  9. <servlet-name>servletDemo1 </servlet-name>
  10. <servlet-class>com.itheima.web.ServletDemo1 </servlet-class>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>servletDemo1 </servlet-name>
  14. <url-pattern>/hello </url-pattern>
  15. </servlet-mapping>
  16. </web-app>

③编写index.html


   
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Servlet </title>
  6. </head>
  7. <body>
  8. <h3>入门案例 </h3>
  9. <a href="http://localhost:8080/hello">访问第一个Servlet </a>
  10. </body>
  11. </html>

④编写Servlet实现类


   
  1. package com.itheima.web;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. public class ServletDemo1 extends HttpServlet {
  8. @Override
  9. protected void service (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  10. System.out.println( "Servlet访问成功");
  11. }
  12. }

servlet生命周期

        出生:Servlet第一次被访问的时候,web服务器对象创建并初始化

                        init();,初始化只执行一次

        活着:只要应用对外提供服务,对象就一直存在

                        service();,执行请求响应,次数不限

        死亡:当应用停止对外服务,或者tomcat关闭(宕机),对象就消亡了

                        destroy();,只释放一次实例,Java垃圾回收

单例模式运行,同一个时间只能有一个

servlet初始化参数


   
  1. <init-param>
  2. <param-name>参数的名称 </param-name>
  3. <param-value>参数的值 </param-value>
  4. </init-param>

   
  1. @WebServlet("/servlet")
  2. public class MyServlet03 extends HttpServlet {
  3. @Override
  4. protected void service (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  5. //获取Servler配置对象
  6. ServletConfig servletConfig = getServletConfig();
  7. //根据初始化参数的名称获取值
  8. String valueX = servletConfig.getInitParameter( "nameX");
  9. System.out.println( "得到的初始化参数"+valueX);
  10. //获取所有初始化参数名称的枚举
  11. Enumeration<String> names = servletConfig.getInitParameterNames();
  12. //遍历枚举
  13. while (names.hasMoreElements()){
  14. //取出参数名称
  15. String name = names.nextElement();
  16. //根据得到的名称取值
  17. String value= servletConfig.getInitParameter(name);
  18. System.out.println( "通过名称取值"+name+ "对应的值是:"+value);
  19. }
  20. }
  21. }

servlet多路径映射

servlet配置url-pattern的时候,是支持使用通配符,就是 *

除了前面指定访问规则配置:直接指定访问规则名称之外,还支持以下两种配置:

        路径匹配

                <url-pattern>/自己指定的路径*</url-pattern>

        后缀匹配

                <url-pattern>*.自己指定后缀名</url-pattern>

                细节:除了后缀匹配方式之外,其余配置servlet的url-pattern都必须以 / 开头

全匹配优先级最高,使用了通配符 * ,有 / 的优先级最高


@WebServlet("/demo1,/demo2")

        可以匹配多个参数

        urlPattern配置规则

                精确匹配        /user/select

                目录匹配        /*

                扩展名匹配    *.do

                任意匹配        /   |   *

优先级:精准路径 > 目录路径 > 扩展名路径 > /* > /

servlet访问说明

        访问内部资源时,可以省略协议,主机和端口,直接写URI

servlet注解配置

@WebServlet
        把当前类配置成为一个Servlet,写在类上
属性:
         urlPatterns:和xml配置时的<url-pattern></url-pattern>标签的作用一样。指定servlet的访问规则
         servlet3.1规范为了我们编写简洁,他还提供了一个和urlPatterns属性作用一样的属性:value。当给value属性配置值的时候,value可以不写


注意事项:
        通常情况下,在一个项目中,servlet的配置应该选择同一种,要么都是xml要么都是注解
        如果既用xml又用注解的话,那么请把web.xml中的metadata-complete="true"改成metadata-complete="false",否则,他不读取注解

servlet默认

        servlet的配置,不能使用 /。 / 就表示了访问当前应用下的任何资源,都由这个servlet来处理,就不能执行index.html了,jsp除外,在tomcat里的web.xml配置中有 指向默认。


转载:https://blog.csdn.net/czdzz/article/details/125644478
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场