Java零基础教学文档servlet(1)

【Web开发和HTTP协议】

1. Web开发概述

1.1 web概述
万维网(英语:World Wide Web)亦作WWW、Web、全球广域网,是一个透过互联网访问的,由许多互相链接的超文本组成的信息系统。英国科学家蒂姆·伯纳斯-李于1989年发明了万维网。1990年他在瑞士CERN的工作期间编写了第一个网页浏览器。网页浏览器于1991年1月向其他研究机构发行,并于同年8月向公众开放。

万维网是信息时代发展的核心,也是数十亿人在互联网上进行交互的主要工具。网页主要是文本文件格式化和超文本置标语言(HTML)。除了格式化文字之外,网页还可能包含图片、视频、声音和软件组件,这些组件会在用户的网页浏览器中呈现为多媒体内容的连贯页面。

蒂姆·伯纳斯-李的另一个才华横溢的突破是将超文本嫁接到因特网上。在他的《编织万维网》一书中解释,他曾多次向技术社群的成员暗示这两种技术结合是可行的,但是却没有任何人接受他的建议,他最后只好自己解决了这个计划。他发明了三项关键技术:

  1. 一个全球网络资源唯一认证的系统,统一资源标志符(URI)

  2. 超文本标记语言(HTML)

  3. 超文本传输协议(HTTP)

1.2 B/S架构的诞生
B是浏览器(Web Browser)的缩写。S是(Application Server)应用服务器的缩写

网页浏览器(英语:Web Browser,常简称为浏览器)是一种用于检索并展示万维网信息资源的应用程序。这些信息资源可为网页、图片、影音或其他内容,它们由统一资源标志符标识。信息资源中的超链接可使用户方便地浏览相关信息。网页浏览器虽然主要用于使用万维网,但也可用于获取专用网络中网页服务器之信息或文件系统内之文件。

蒂姆·伯纳斯-李于1990年发明了第一个网页浏览器WorldWideWeb。然后伯纳斯-李雇用了妮可拉·佩洛编写LMB浏览器,能在哑终端上显示网页,于1991年发行。

1993年,马克·安德森发布Mosaic——“世界上最流行的浏览器”,进一步推动了浏览器的创新,这使得万维网更易于使用。安德森的浏览器引发了1990年代的互联网热潮。安德森是NCSA中Mosaic团队的领导者,他不久后辞职并成立了自己的公司——Netscape,发布了受Mosaic影响的Netscape Navigator。Netscape Navigator很快便成为世界上最流行的浏览器,市占率一度达到90%。也标志着BS架构的时代到来。

作为应对,错失了互联网浪潮的微软匆促购入了Spyglass公司的技术,发布Internet Explorer。这引发了第一轮浏览器大战。因捆绑于Windows,Internet Explorer于网页浏览器市场获取了主导地位,其市占率于2002年达到最高时超过95%。

1.3 web通信
Web通信采用B/S模式,即浏览器服务器通信。通过超文本传输协议(HTTP,HyperText Transfer Protocol)进行通信。通过浏览器地址栏编写 URL,向服务器发送一个请求,服务器端对该请求做出相应的处理,处理完毕后会向浏览器作出一个响应,将数据发送给浏览器。浏览器做出响应渲染呈现在用户浏览器界面。
在这里插入图片描述

存在于 web 应用服务器可供外界访问的资源就是 web 资源,它分为如下两种:

  1. 静态资源:指 web 页面中供人们浏览的数据始终是不变。比如:HTML、CSS、JS、图片、多媒体。

  2. 动态资源:指 web 页面中供人们浏览的数据是由程序产生的,不同时间点访问web 页面看到的内容各不相同。比如:JSP/Servlet、ASP、PHP。

2.WEB开发基石-HTTP协议

2.1 HTTP协议背景 ip dns ftp
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。

2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。

2.2 HTTP协议概述
HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

尽管TCP/IP协议是互联网上最流行的应用,但是在HTTP协议中并没有规定它必须使用或它支持的层。事实上HTTP可以在任何互联网协议或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用,所以其在TCP/IP协议族使用TCP作为其传输层。

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

2.3 HTTP请求协议
2.3.1 格式
在这里插入图片描述
在这里插入图片描述

2.3.2 代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:9999/test" method="post">
    <input type="text" name="username"> </br>
    <button>提交</button>
</form>
</body>
</html>

package com.powernode.server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;


public class HttpRequestDataFormat {


    public static void main(String[] args) throws IOException {
        //1. 创建服务
        ServerSocket server = new ServerSocket(9999);
        //2. 监听客户端请求
        while(true){
            Socket client = server.accept();
            // 获取请求数据
            InputStream in = client.getInputStream();
            byte[] b = new byte[1024];
            int len = -1;

            while ((len = in.read(b)) != -1){
                System.out.print(new String(b,0,len));
            }
            in.close();
        }
    }
}

在这里插入图片描述

2.4 HTTP响应协议
2.4.1 格式
在这里插入图片描述
在这里插入图片描述

2.4.2 代码示例

package com.powernode.server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/*
 *  根据请求的路径,查找到相应的资源  将资源放回给浏览器
 *  1. 规定资源文件夹
 *  2. 根据请求的路径去资源文件夹查找文件
 *  3. 将资源文件使用流数据 返回给浏览器
 * 注意:
 *   资源文件夹路径 : D:\webapps
 *
 *
 */
public class MyServer {

    // 资源目录 根目录
    static  final String BASE_PATH = "D:\\webapps";

    public static void main(String[] args) throws Exception {
        //1. 创建服务
        ServerSocket server = new ServerSocket(9999);
        //2. 监听客户端请求
        while(true){
            Socket client = server.accept();
            // 获取请求数据
            InputStream inputStream = client.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
            // 根据请求路径 查找资源  : 请求路径在 请求行中
            // 读取请求行  请求方法   资源路径   协议
            String requestLine = br.readLine();
            // 根据空格进行分割
            String[] line = requestLine.split(" ");
            // 请求方法
            String method = line[0];
            // 资源路径
            // /test?name=123   test   去掉 ? 后面  ? 后面是查询参数
            String path = line[1]; //   /test/xxx
            // 找到  ? 索引
            int index = path.indexOf("?");
            // 不带查询参数的资源路径
            //  由于 网络路径的分隔是  /  但是 磁盘路径的分隔是  \\
            // 将网络路径 / 转化为  \\
            if (index != -1){
                path = path.substring(0,index);
            }
            // 将网络路径转化为 磁盘路径
            path = path.replaceAll("\\/", "\\\\");
            // 文件绝对路径  : BASE_PATH + path
            path = BASE_PATH + path;
            // 资源绝对路径
            File file = new File(path);
            // 使用输出流 将数据输出
            /**
             *  1. 将磁盘文件读取到内存中
             *  2. 将内存中的数据 利用网络进行输出
             */
            //1. 输入流
            FileReader fis = new FileReader(file);
            BufferedReader reader = new BufferedReader(fis);
            //2. 循环读写
            /*
             *   写数据 给浏览器 必须遵循HTTP协议  返回数据  属于 响应
             *  响应行
             * 响应头
             * 空行
             * 响应体
             * */
            // 输出流 要向客户端的网络输出
            // 跟 客户端绑定的输出流
            OutputStream outputStream = client.getOutputStream();
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
            // 响应行
            bw.write("HTTP/1.1 200 OK");
            //换行
            bw.newLine();
            //响应头
            // key:value 换行
            bw.write("Content-Type:text/html;charset=utf-8");
            bw.newLine();
            //空行
            bw.newLine();
            bw.flush();
            //响应体 : 响应体就是具体的文件数据
            //循环 读 和 输出
            String data = null;
            while ((data = reader.readLine()) != null){
                bw.write(data);
                bw.newLine();
                bw.flush();
            }

            bw.close();
            reader.close();
        }

    }


}



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Hello  Client!</h1>
</body>
</html>
 

 

在这里插入图片描述

3.应用服务器

3.1 应用服务器的诞生
应用程序服务器(英语:application server)是一种软件框架,提供一个应用程序执行的环境。用于为应用程序提供安全、数据、事务支持、负载平衡大型分布式系统管理等服务。

这个名词最初是用来讨论主从式架构系统时,用来区分数据库服务器、文件服务器等的不同。但现今常指能运行Web应用程序的Web服务器。

为什么会出现应用服务器呢?从程序复用性及架构角度思考。

3.2 Tomcat应用服务器
3.2.1 Tomcat应用服务器概述
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应 HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Apache 服务器。目前 Tomcat 最新版本为10。

官网:https://tomcat.apache.org/
在这里插入图片描述

当前最新版本是 Tomcat10,我们课程中使用 Tomcat9。Tomcat7 支持Servlet3.0,而 Tomcat6 只支持 Servlet2.5!

Servlet,JSP 规范与 Tomcat 版本的对应
在这里插入图片描述

3.2.2 Tomcat下载、安装、启动
1.官方下载地址:http://tomcat.apache.org

2.Tomcat 分为安装版和解压版:

安装版是.exe 形式的安装包,双击安装到我们的电脑上,一台电脑上只能安装一个,用的比较少。

解压版,即绿色版,解压后直接使用,解压份数无限制,用的比较多。注意要解压到一个没有中文及空格的文件夹中。例如:D:\soft\tomcat\apache-tomcat-7.0.78

3.启动 Tomcat 服务器:

A.启动前必须配置 JAVA_HOME 环境变量,变量值为 JDK 安装目录。因为 Tomcat 程序本身是用 java 写的,需要用到 JDK。

B.进入到 Tomcat 解压目录下的 bin\startup.bat, 双击可启动 Tomcat 服务器

在这里插入图片描述

C.进入到 Tomcat 解压目录下的 bin\shutdown.bat 双击即可关闭 Tomcat 服务器

D.启动完成后可以在浏览器地址栏输入:http://localhost:8080 来检查 Tomcat 是否

启动成功,如果看到如下页面。则恭喜你成功了
在这里插入图片描述

4.启动问题:如果启动有问题,首先检查 JAVA_HOME 环境变量配置是否正确,再检查8080 端口是否被别的应用程序占用。(Tomcat 默认使用端口号为 8080)

3.2.3 Tomcat目录结构
在这里插入图片描述

3.2.3.1 bin
该目录下存放二进制可执行文件,有 startup.bat 和 shutdown.bat 文件(其余文件无需理会),startup.bat 用来启动 Tomcat,但需要先配置JAVA_HOME 环境变量才能启动,shutdown.bat 用来停止 Tomcat

3.2.3.2 conf
这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:

server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;以后会详细介绍这个文件;

端口配置:

<Connector port="8080" protocol="HTTP/1.1"

           connectionTimeout="20000"

           redirectPort="8443"   />

context.xml:容器默认配置

<?xml version="1.0" encoding="UTF-8"?>

<!-- The contents of this file will be loaded for each web application -->

<Context>



    <!-- Default set of monitored resources. If one of these changes, the    -->

    <!-- web application will be reloaded.                                   -->

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>

    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>



    <!-- Uncomment this to disable session persistence across Tomcat restarts -->

    <!--

    <Manager pathname="" />

    -->

</Context>

web.xml : 服务器自身的默认servlet、支持的媒体类型映射、欢迎页面等配置

<?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_4_0.xsd"

  version="4.0">



  <!-- ======================== Introduction ============================== -->

  <!-- This document defines default values for *all* web applications      -->

  <!-- loaded into this instance of Tomcat.  As each application is         -->

  <!-- deployed, this file is processed, followed by the                    -->

  <!-- "/WEB-INF/web.xml" deployment descriptor from your own               -->

  <!-- applications.                                                        -->

  <!--                                                                      -->

<!-- “雷锋” servlet配置 -->

    <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>

        <servlet-name>jsp</servlet-name>

        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

        <init-param>

            <param-name>fork</param-name>

            <param-value>false</param-value>

        </init-param>

        <init-param>

            <param-name>xpoweredBy</param-name>

            <param-value>false</param-value>

        </init-param>

        <load-on-startup>3</load-on-startup>

    </servlet>

<servlet-mapping>

        <servlet-name>default</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>



    <!-- The mappings for the JSP servlet -->

    <servlet-mapping>

        <servlet-name>jsp</servlet-name>

        <url-pattern>*.jsp</url-pattern>

        <url-pattern>*.jspx</url-pattern>

    </servlet-mapping>

<!-- session有效期 -->

 <session-config>

        <session-timeout>30</session-timeout>

 </session-config>

<!-- 媒体映射类型 -->

<mime-mapping>

        <extension>jpg</extension>

        <mime-type>image/jpeg</mime-type>

 </mime-mapping>

<!--  欢迎页面 -->

    <welcome-file-list>

        <welcome-file>index.html</welcome-file>

        <welcome-file>index.htm</welcome-file>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

3.2.3.3 lib
Tomcat 的类库,里面是tomcat运行时需要的相关 jar 文件
在这里插入图片描述

3.2.3.4 logs
这个目录中都是日志文件,记录了 Tomcat 启动和关闭的信息,如果启动 Tomcat 时有错误,那么异常也会记录在日志文件中。

3.2.3.5 temp
存放 Tomcat 的临时文件,这个目录下的东西可以在停止 Tomcat 后删除!

3.2.3.6 webapps
存放 web 项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是 tomcat 自带的项目。其中 ROOT 是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是 ROOT 项目。

http://localhost:8080/examples,进入示例项目。其中 examples 就是项目名,即文

件夹的名字。

3.2.3.7 work
运行时生成的文件,最终运行的文件都在这里。通过 webapps 中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成 work 目录。当客户端用户访问一个 JSP 文件时,Tomcat 会通过 JSP 生成 Java 文

件,然后再编译 Java 文件生成 class 文件,生成的 java 和 class 文件都会存放到这个目录下。

3.2.4 创建静态web应用
创建静态 web 应用并访问的步骤如下:

1.在 tomcat 的 webapps 下创建一个 hello 目录;

2.在 webapps\hello\下创建 hello.html,内容如下:
在这里插入图片描述

3.启动 tomcat;

4.打开浏览器访问 http://localhost:8080/hello/hello.html
在这里插入图片描述

5.在同一个教室内,大家可以通过:http://192.168.137.1:8080/hello/hello.html这个地址访问服务。

具体ip查看: cmd—>ipconfig

  1. 查看下请求与响应的信息

  2. 静态web应用于动态web应用

    静态应用:数据在html页面写死

    动态应用:页面中的数据是从数据库中获取

8、tomcat闪退问题:

  1. tomcat软件存放在中文目录下

  2. 计算机名为中文

  3. jdk配置问题:必须配置JAVA_HOME、不要去配置classpath

4.IDEA与Tomcat

给 IDEA配置 Tomcat 服务器后,我们可以把服务器的启动和停止交给 IDEA来管理,简化我们开发,提高开发效率。

4.1 IDEA集成Tomcat
4.1.1 在磁盘的某个根目录解压tomcat
在这里插入图片描述

4.1.2 在IDEA中配置tomcat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值