当前位置: 首页 > news >正文

HTTP(类似TCP/TUP协议)、Tomact(对整个web操作的集成软件)、Servlet(动态显示,需要Tomcat才能运行)

javaWeb:web为网站,javaWab就是用java来解决web互联网领域的技术栈

B/S架构:Brower/Server,浏览器/服务器 架构模式,他的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器,好处是易于维护和升级,客户端无需任何部署就可以用到新版本

浏览器会通过http协议(类似之前学的tcp、tup协议),跟服务端,请求或响应,服务器会通过Servlet和JSP加载数据库,然后发给前端html、css、js封装后响应给客户端

其中

静态资源:html、css、js、图片等,负责静态的展示页面(每个用户登录后基本展示页面都一样)

动态资源:Servler、JSP等,负责逻辑处理(每个用户登录后展现的数据不一样

数据库:复制存储数据

HTTP协议:定义通信规则

Web服务器:负责解析HTTP协议,解析请求数据,并发送响应数据

web服务器:由静态资源和动态资源组成,可以用Tomcat集成软件处理

HTTP:(后面统一用Tomcat)

HyperText Transfer Protocol ,超文本传输协议,规定了浏览器和服务器之间数据传输的规则

特点:

1.基于TCP协议:面向连接,安全

2.基于请求-响应模型:一次请求对应一次响应

3.http协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的

缺点:多次请求间不能共享数据(后面会用java中的会话技术(Cookie、Session)解决,例如在点击加入购物车,数据需要在服务器进行记录,不然当用户点击查看购物车,数据是不会响应到客户端)

优点:速度快

http-请求数据格式:(了解)

1.请求行: 请求数据第一行,其中GET表示请求方式,/表示请求资源路径,HTTP/1.1表示协议版本

2.请求头:第二行开始,格式为key:value形式

3.请求体:POST请求的最后一部分,存放请求参数(只有POST特有)

例如:

常见的HTTP请求头:

Host:表示请求 的主机名

User-Agent:浏览器版本

Accept:表示浏览器可以接收的资源类型

Accept-Language:表示浏览器偏好语言,服务器可以根据此返回不同语言的网页

Accept-Encoding:表示浏览器可以支持的压缩类型

http-响应数据格式:(了解)

1.响应行: 响应数据的第一行。其中HTTP/1.1表示协议版本,200表示响应状态码,OK表示状态码描述

2.响应头:第二行开始,格式为key:value形式

3.响应体:最后一部分,存放响应数据(就是HTML代码)

例: 

常见的HTTP响应头:

Content-Type:表示乡音内容的类型

Content-Length:表示该响应内容的长度(字节数)预知大小

Content-Encoding:表示该响应压缩算法(压缩格式)浏览器需要指定解压方式

Cache-Control:指示客户端应如何缓存,例如数据缓存到客户端,客户可以快速的访问

状态码大全:状态 | Status - HTTP 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/chapter/13553

常见的:

1.200代表OK

2.404代表请求资源不存在,一般url输入有误或网站资源被删除

3.500代表服务器发送不可预期错误,服务器出异常了,赶紧看日志(java代码)

查询方式:

打开网页、f12、任意点击网页内容请求一下服务器、控制台的网络(Network)会进行抓包,点击任意抓包内容、点击Headers、如果由view resource可以点击,即可查看http协议内容

Tomcat-Web服务器:(大部分部署是web项目)

是一个软件,对http协议的操作进行封装,主要功能是“提供网上信息浏览服务”

Tomcat也被称为Web容器(Web服务器)、Servlet容器,Servlet就是一个java类,但是没有主方法去运行,需要依赖于Tomcat才能运行

Apache Tomcat® - Welcome!官网https://tomcat.apache.org/index.html

常用的是Tomcat 8.5版本

点击左侧Tomcat8然后下载右侧64位版本和下载下面的源码

bin目录下

.bat文件是windows类型文件,可以直接打开

.sh文件是linux文件

conf是放一些配置文件

logs放的是一些日志文件

temp是临时目录,临时产生的一些文件会在此文件夹

webapps当web项目写完放到此目录就完成了项目部署

work也是临时目录,临时产生的一些文件会在此文件夹(jsp使用)

解压完成后,打开bin目录,打开startup.bat

然后打开网页输入localhost:8080看看会不会自动打开Tomcat官网,如果有就安装成功了(要一直打开startup.bat才能打开网址)

注意:安装的时候路径一定要全英文的

但是打开的控制台startup.bat里都是乱码,可以打开配置文件conf里的logging.properties

找到java.util.logging.ConsoleHandeler.encoding = UTF-8(由于win是GBK格式)

startup.bat关闭方式:

1.直接关闭:关掉运行窗口(不要用这个)

2.bin/shutdown.bat:正常关闭(流程多)

3.ctrl+:正常关闭(比较常用)

配置:

1.修改启动端口号:conf/server.xml

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

注意:http协议默认端口号为80,如果将Tomcat端口号改为80,则将来范文Tomcat的时候,直接输入localhost即可,不用输入端口号

启动时可能出现的问题:

1.端口号冲突:找到对应程序,将其关闭

startup.bat窗口会报错

2.启动startup.bat窗口会一闪而过:检查JAVA_HOME环境变量是否配置正确(因为Tomcat是用java语言编写的,会借用jdk来运行)

Tomcat部署项目:

将项目放到webapps目录下,即完成部署

一般javaweb项目会被打包成war包,即.war格式,当放到javaweb目录下时,过一会就会自动生成项目的文件夹即自动解压war包

idea中创建Maven Web项目:

webapp是web项目特有的目录

—— html:html文件目录(可自定义)

—— WEB-INF是web项目核心目录(必须叫这个名字,打包会自动生成classes文件夹和lib文件夹,编译后的java文件和resources会放到classes文件夹下,pom.xml中依赖坐标对应的jar包会翻入lib文件夹下)

———— web.xml是web项目的配置文件

创建:

方式一:使用骨架创建(注意在webapp下会多一个index.jsp,而不使用骨架是没有的)

1.在创建Maven时需要勾选骨架(注意要选择maven-archetype-webapp)然后一直下一步

 将pom.xml文件中从<name>标签到<build>标签删除

然后在main目录下创建java文件夹和resources文件夹

方式二:不使用骨架创建

1.正常创建一个module(maven格式)之后,先将pom.xml文件的坐标定位下加一个<packaging>war</packaging>(如果不先加打包方式,idea不会判定成web项目,就无法在模块中找到)(另外这个打包方式默认是jar包)

2.project construtrue然后点击Facets找打你的Web文件,在Web Resource Directories 栏下会有红色字提示未创建Webapp目录,双击一下一直下一步就可以创建,然后点击上面的Deployment Dscriptors点击+添加一下web.xml(版本默认4.0即可)然后一直下一步即可,然后将WEB-INF目录直接拖到webapp目录下就完成

在idea中使用tomcat

1.将本地tomcat集成到idea中,然后进行项目部署即可就是在idea中直接将war包解压到webapp目录中

 点击添加配置文件,然后点击左上角的+号添加,选择Tomcat Local然后点击Configure...选择安装路径(注意不要添加到那种名字相同的包中包)

 注意如果此处标红,请手动添加一下jsp-api.jar和servlet-api.jar两个包

点击artifact添加需要打包的web项目,选择(项目名称:war)种格式的

然后在webapp(刚刚你选择要打包的web项目)下创建一个a.html文件,在body里写aaaa随便的字,然后点击右上角运行

运行成功后会自动打开一个网页,然后在网址后面写a.html就能成功跳出刚刚输入的aaaa内容

2.idea中使用Tomcat Maven插件(缺点只能用到Tomcat7版本)

在pom.xml文件夹中添加依赖坐标

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                <port>8081</port><!--访问端口号-->
                <path>/</path><!--项目访问路径(斜杠是访问任意地址)-->
                </configuration>
            </plugin>
        </plugins>
    </build>

使用Maven Helper 插件快速启动项目,选中项目,右键 --> Run Maven --> tomcat7:run

在java中看到规范就应该联想到接口interface

Servlet:

Servlet是java提供的一门动态web资源开发技术(例如:每个用户都有自己的用户名,登录后显示的用户名都不一样)

Servlet是javaEE规范之一,其实就i是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

快速入门:

1.在pom.xml中引入依赖坐标,作用范围是编译和测试,不能是运行,因为tomcat本身已包含该坐标,会引起冲突

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

2.创建java类,实现Servlet接口,在service这个方法中随便输出内容。并在开头用@WebServlet(“/demo1”)内容可以自定义,但是必须加/斜杠,这个注解是访问路径,即在最后运行时候(tomcat:run),会自动弹出浏览器,在网址后面加/demo就能搜出刚刚你输出的内容("asd123456789")  ;但是在此处网页是没有显示任何东西的,因为没有向网页输出任何东西,sout是输出到控制台的,即idea的控制台

package com;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/demo1")
public class servletdemo implements Servlet {
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("asd123456789");
    }

    public void init(ServletConfig servletConfig) throws ServletException {

    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {

    }
}

尽量不要用右键tomcat:run,直接点击右上角的run

执行流程:

 

http://localhost:8080/tomcat2_war/demo1

http://localhost:8080访问的是 Tomcat(web服务器)

/tomcat2_war访问的是在idea创建的web项目(tomcat2)war是因为会把整个打包成war压缩包,且在appweb目录中会自动生成文件夹

/demo1访问的就是对应的Servlet

tomcat会自动创建Servlet对象,因为实现接口必须重写方法,就必定有Service()方法,就会自动调用这个方法

生命周期:

对象的生命周期是指一个对象从被创建到被销毁的整个过程

Servlet运行在Servlet容器(web服务器)即Tomcat中,其生命周期由容器来管理,分为4个阶段:

1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

2.初始化:在Servlet实例化之后,容器将调用Sevlet的init()方法初始化这个独享,完成一些如加载配置文件、创建连接等初始化的工作。该方法只调用一次(配置文件这些加载一次就行)

3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。

4.服务终止:当需要释放内存或容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在该方法调用之后,容器会释放这个Servlet实例,该实例随后会被java的立即回收器所回收

@WebServlet(urlPatterns = "/demo",loadOnStartup = 1)

负整数:第一次被访问时创建Servlet对象

0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

注意:当注解中只配置一个属性值,直接写即可,如果配置多个,得写全即value=“xx”,但此处value和urlPatterns所代表的含义是一样的,见明知意用第二个

在init方法中sout随便输出内容,service也也一样。
当运行了tomcat之后,会弹出浏览器,网址访问对应的Servlet,此时观察控制台,无论浏览器访问几次(可以使用刷新进行访问),init只会出现一次,而service的输出内容会出现多次即访问次数

注意:当直接在idea控制台中终止运行是不会执行destroy方法的,类似于直接中断了,属于非正常关闭。若需要正常关闭需要在terminal(在idea左下角)运行完之后用ctrl+c进行关闭(但是在输出的中文字出现乱码??但是集成tomcat就没问题,但集成的无法在terminal运行,没有tomcat8:run???)

总结一下:首先先创建webapp的maven文件夹(正常创建mvn文件是没有webapp的),建议不使用骨架创建web项目,暂时先使用插件形式的tomcat

另外两个方法比较少用,一个是info为作者信息,一个confige用来传递参数给init方法

体系结构:

由于Servlet接口重复性高,现在使用HttpServlert类来继承(Servlet接口→GenericServlet抽象实现类→HttpServlet对http协议封装的Servlet实现类),需要重写doGet和doPost方法

一样也需要配置访问路径即注解

运行之后直接在网址后面输入地址访问都是以doget方式访问

当在webapp下创建一个html页面,运行tomcat之后打开网址,在网址后面加上html的名称,访问之后提交信息,就是以dopost方式访问(action的访问路径是localhost:8080后面的所有路径)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/demo2" method="post">
  <input name="username"><input type="submit">

</form>

</body>
</html>

httpServlet为什么要用不同的方法?

因为浏览器的get和post位置不一样,get的请求参数在请求行里,post的请求参数在请求体里,所以处理逻辑不一样

http协议里有7种不同的请求方式(在httpServlet抽象类中可以查看)调用方式重写doXxx方法

上面的网页是通过html文件去访问java的WebServlet路径

Servlet urlPattern配置:

进入WebServlet注解的源码种可以看到urlPatterns是个数组

例如:@WebServlet(urlPatterns = {"/demo1","/demo2"},loadOnStartup = 1)

无论在网页里输入demo1还是demo2都可以访问到该WebServlet

urlPattern配置规则:

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

1.精确匹配:/xxx/xxx。。。

2.目录匹配:/xxx/*

前面的是同一个文件夹,*指的是任意文件名

3.扩展名匹配:*.do

注意这个是不能加/斜杠的

4.任意匹配:/或/*(不要使用这个任意匹配)

当配置了/,会覆盖在tomcat的conf/web.xml中的DefaultServlet(用来处理静态资源)

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

镜像路径为 /

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

静态资源有包括html文件在内的文件。

先把所有的任意路径注解WebServlet注释掉,然后运行tomcat,打开a.html文件,然后再将注解打开,再运行一次tomcat,然后刷新一下html就刷新不出来了。(但我的一直实现不了这个问题??理解:html是客户端,后台是我们自己,如果我们这样操作了,客户就看不到我们的网址了)

xml配置方式编写Servlet:

从Servlet3.0版本之后就支持使用注解配置,之前只支持xml配置文件的配置方式

步骤:

1.编写Servlet类

2.在web.xml配置该Servlet

    <!--
        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>
</web-app>

相关文章:

  • wordpress加关键词/网盟推广平台
  • 委托网站开发所有权归属/太原seo培训
  • 深圳教育科技网站建设/网络推广公司深圳
  • 政府单位网站开发/泰安seo公司
  • 泉州网站建设公司/企业网站开发费用
  • dnf怎么做辅助网站/电商是做什么的
  • SpringBoot+Vue前端Http调用后台封装POI接口导出EXCEL
  • 2023年面试题之Dubbo基础
  • 【每日一道智力题】之猴子搬香蕉
  • 采场车辆和人员管理系统的功能都有什么
  • 前端编写邮件html各邮箱兼容及注意事项
  • juc系列(2)--线程的使用及原理
  • ROS2机器人编程简述humble-第二章-First Steps with ROS2 .1
  • 研究生第一学期的思考
  • Python NumPy 拆分数组
  • ESP8266 ArduinoIDE 搭建web服务器与客户端开发
  • 【BP靶场portswigger-客户端13】跨来源资源共享(CORS)-4个实验(全)
  • java JUC 中 Object里wait()、notify() 实现原理及实战讲解