04-Servlet入门+http协议

简介: 一、 Servlet 1. javaweb 学什么 用 java 语言开发动态的web资源,接下来就是介绍如何开发动态的web资源 对于java程序员而言,所谓动态web资源就是可以运行在服务器上的java程序 2. 实现服务器管理java程序     开发人员写好一个java类,到底有哪些方法tomcat服务器是不可能知道的     tomcat服务器需要执行我们编写的jav

一、 Servlet

1. javaweb 学什么

用 java 语言开发动态的web资源,接下来就是介绍如何开发动态的web资源

对于java程序员而言,所谓动态web资源就是可以运行在服务器上的java程序

2. 实现服务器管理java程序

    开发人员写好一个java类,到底有哪些方法tomcat服务器是不可能知道的

    tomcat服务器需要执行我们编写的java类就需要知道我们的java类有哪些方法,然后在适当的时间调用这些方法, 所以我们在写的java程序要想运行在服务器上就必须要实现一个特殊的接口 Servlet.java

 

interface Servlet { ... }

    Servlet 接口中就定义了可以被tomcat服务器调用的java方法

    通常来讲,我们将实现了Servlet接口的java类称之为 Servlet

   

    编写好的Servlet需要web.xml文件中做配置才能供外界访问

   

3. 实现第一个Servlet程序

3.1  写一个java类实现Servlet接口

package cn.itcast.servlet;

 

import java.io.*;

import javax.servlet.*;

 

public class HelloWorldServlet extends GenericServlet

{

   

    // 实现 service 方法

    public void service(ServletRequest request,ServletResponse response)

              throws ServletException,java.io.IOException  {

      

       // 向浏览器输出一句话

       PrintWriter out = response.getWriter();

       out.write("hello world!!!");

 

    }

 

    public void init()throws ServletException {

       // 初始化 servlet 时被调用

       System.out.println("init()");

    }

 

    public void destroy() {

       // 摧毁 servlet 时被调用

       System.out.println("destroy()");

    }

}

 

 

3.2.  导入 servlet jar包

set classpath=%classpath%;D:\apache-tomcat-6.0.20\lib\servlet-api.jar
3.3. 编译带包的类

javac -d . HelloWorldServlet.java

3.4. 将包拷贝至 day05/WEB-INF/classes 目录下  --> 发布 web 工程

 

3.5. 在 web.xml 文件中做映射

<!-- 做servlet映射 -->

    <!-- servlet元素用于给一个类起别名 -->

    <servlet>

       <servlet-name>HelloWorldServlet</servlet-name>

       <servlet-class>cn.itcast.servlet.HelloWorldServlet</servlet-class>

    </servlet>

    <!-- servlet-mapping元素用于将一个Servlet映射到url -->

    <!—url必须以/开头,/ 表示当前web应用即上下文路径 -->

    <servlet-mapping>

       <servlet-name>HelloWorldServlet</servlet-name>

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

    </servlet-mapping>  

 

注意: servlet 对象一旦创建就会驻留在内存中,为所有的请求服务,什么时候销毁

直到服务器关闭时或web应用被移除才销毁

 

 

 

3.6. Servlet 执行流程图

鹿城

4. 用 eclipse 工具开发 Servlet

 4.1. 建一个 web project

 4.2. 在src下建包,创建一个java类实现Servlet接口

 4.3  在 Webroot\WEB-INF\web.xml 做 servlet 映射

4.4  配置 tomcat 服务器

      window--> preferences --> tomcat6.x

4.5  将web工程发布至tomcat 服务器

      发布的web应用名称可以配置: web工程右键 选properties-->myeclipse-->web

      默认情况使用工程名作为发布后的web应用名

 

4.6 启动tomcat服务器运行程序

 

5. HttpServlet对象

一般来讲我们开发一个Servlet会去继承 HttpServlet

在 eclipse 下开发Servlet 可以直接新建一个Servlet, 覆写 HttpServlet 的 doGet和doPost方法

继承 HttpServlet 的原因是: HttpServlet实现了service方法,将ServletRequst和ServletResponse

强转为子类 HttpServletRequest和HttpServletResponse,让我们用起来更加方便,同时,在service方法中,它判断了请求方式,根据请求方式来调用 doGet 和 doPost

 

二、 Servlet 细节

1. * 号统配符

一个Servlet可以映射为多个路径

在映射 Servlet 路径时可以使用‘/*’ 或 ‘*.扩展名’ 的形式

注意: 两者不能同时使用

      /* 具有较高的优先级

 

2. load-on-startup 元素

<servlet>元素下可以配置< load-on-startup>子元素,

配置方式如下:

<load-on-startup>1</load-on-startup>

如果一个Servlet配置了该项,web容器会在web应用被加载时就初始化该Servlet,数字越小则越先初始化

 

3. tomcat\conf\web.xml

服务器下所有web 应用中的web.xml 都会自动继承该文件中所有的配置

http://localhost:8080/day05/a.html     a.html是资源名

上面的url访问的url在web.xml文件中并没有配置

此时会去访问缺省的Servlet,在tomcat\conf\web.xml文件中就配置了一个缺省的DefaultServlet
 DefaultServlet帮我们去web应用下读取 a.html 文件,并打给浏览器,如果没有发送 404 页面

也就说,我们通过ie访问服务器访问的都是 Servlet

 

4. Servlet线程安全问题

解决Servlet线程安全问题: 加上同步的锁(lock)

 

 实现SingleThreadModel接口的Servlet

服务器会做判断,当有请求过来,如果Servlet对象忙着呢,服务器会再创建一个Servlet对象为用户

提供服务,如果Servlet闲置,就直接提供服务

这样的方式实际上是回避了线程安全问题, 单线程访问Servlet, 这样的方式不可取

 

三、http协议


1.  tcp/ip 协议: 网络通信协议(连接)

ip 协议 : 127.0.0.1 ip地址对应一台计算机  (互联网层)

tcp 高级协议: 三次握手, 发送请求、返回响应、传输数据 (传输层)

2. http 协议是建立在 tcp协议的基础之上    (应用层)

3. Http协议的版本 (w3c)

Http1.0 : 建立连接,发送一次请求就断开

Http1.1  :建立连接,可以无限次发送请求

 asfsdfasdfas四、 http请求消息

内容包括一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

 

请求行

POST /itcast/ HTTP/1.1     

消息头

Accept: image/gif, image/x-xbitmap, */*

Referer: http://localhost:8080/itcast/

Accept-Language: zh-CN,en-GB;q=0.8,ar-YE;q=0.7,ja-JP;q=0.5,de-CH;q=0.3,en-US;q=0.2

Content-Type: application/x-www-form-urlencoded

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.5; CIBA)

Host: localhost:8080

Content-Length: 33

Connection: Keep-Alive

Cache-Control: no-cache

Cookie: JSESSIONID=B0B3FB4FFB0315B3D3C620548DD4E1EB

空一行

消息体

username=zhangsan&password=123456

 

 

1. 请求行 GET /itcast/a.html HTTP/1.1

GET 为请求方式 : get方式请求参数跟在url后面/itcast/a.html?username=aaa&password=111

Post方式: 请求参数放在消息体中传输,相对安全,get大小限制1K,post 无数据量限制

 

2. 请求消息头 : IE浏览器用于向服务器说明情况的(浏览器使用环境)

Accept: text/html,image/*           说明浏览器接受的数据类型

Accept-Charset: ISO-8859-1         说明浏览器使用的字符编码

Accept-Encoding: gzip,compress    说明浏览器支持的压缩格式

Accept-Language: en-us,zh-cn       说明浏览器的语言环境

Host: www.it315.org:80              说明浏览器要访问的主机名

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT     文件的修改事件,用于做缓存

Referer: http://www.it315.org/index.jsp    说明请求来自哪里,防盗链 (做实验)

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 说明浏览器内核

Cookie                             向服务器发送Cookie

Connection: close/Keep-Alive   说明连接状态

Date: Tue, 11 Jul 2000 18:23:51 GMT    客户端计算机时间

 

3. 实体内容(消息体)

浏览器向服务器发送的数据,例如上传的文件、提交的表单等

 

五、http响应消息

内容包括一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

 

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/html;charset=GB18030

Content-Length: 766

Date: Thu, 07 Jul 2011 15:40:02 GMT

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'index.jsp' starting page</title>

  </head>

  <body>

    hello

  </body>

</html>

 

 

1. 状态行 HTTP/1.1 404 Not Found

协议版本: 目前普遍采用的都是http1.1

响应状态码: 说明服务器的响应状态

常用状态码

状态码

含义

100199

表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200299

表示成功接收请求并已完成整个处理过程,常用200

300399

为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302307304

400499

客户端的请求有错误,常用404

500599

服务器端出现错误,常用 500

 

 200(ok) 302\307 请求重定向,你访问我,我通知你访问另一个资源 

304 通知浏览器去读缓存  404 找不到资源  500 服务器程序出错(服务器端的程序抛异常了)

 

2. 响应消息头    服务器向浏览器说明情况(处理结果)

Location: http://www.it315.org/index.jsp    通知浏览器去访问另一个资源

Server:apache tomcat               说明服务器

Content-Encoding: gzip                 通知浏览器数据的压缩格式

Content-Length: 80                     通知浏览器发送数据的长度

Content-Language: zh-cn            通知浏览器语言环境

Content-Type: text/html; charset=GB2312       通知浏览器文件的格式和编码

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  告诉浏览器文件的修改时间

Refresh: 1;url=http://www.it315.org       通知浏览器自动刷新

Content-Disposition: attachment; filename=aaa.zip    通知浏览器以下载的方式打开资源

Set-Cookie:SS=Q0=5Lb_nQ; path=/search  发cookie

Expires: -1//3种禁止缓存的头字段       

Cache-Control: no-cache 

Pragma: no-cache    

Connection: close/Keep-Alive       连接状态

Date: Tue, 11 Jul 2000 18:23:51 GMT   系统时间

 

3. 实体内容(响应消息体)

一般为服务器发送给ie浏览器的页面数据

六、 https 协议

1. https 是一种加密协议 能保证数据的安全

2. 不对称加密   对称加密

 

3. https

1) 制作数字证书

keytool -genkey -alias tomcat -keyalg RSA

 asdfasdfasdfasdf2) 将证书拷贝至 tomcat\conf

3) 修改server.xml 文件  配置https 连接器

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS"

              keystoreFile="conf\.keystore" keystorePass="123456" />
4) 重启服务器 打开ie访问

https://localhost:8443

5) ie 中安装证书

assdfasdfasdfasdfasdf

 

继续浏览

 

查看证书

安装证书

。。。。。。。

 

删除证书:

 

 

 

目录
相关文章
|
4天前
|
人工智能 Java API
MCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案
本文由Spring AI Alibaba Contributor刘军、张宇撰写,探讨MCP官方引入的全新Streamable HTTP传输层对原有HTTP+SSE机制的重大改进。文章解析Streamable HTTP的设计思想与技术细节,并介绍Spring AI Alibaba开源框架提供的Java实现,包含无状态服务器模式、流式进度反馈模式等多种场景的应用示例。同时,文章还展示了Spring AI Alibaba + Higress的完整可运行示例,分析当前实现限制及未来优化方向,为开发者提供参考。
|
10天前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
53 16
|
2天前
|
安全 网络安全 数据安全/隐私保护
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
HTTP 与 HTTPS 协议及 SSL 证书解析-http和https到底有什么区别?-优雅草卓伊凡
24 3
|
2天前
|
人工智能 网络协议 Linux
MCP 协议:为什么 Streamable HTTP 是最佳选择?
随着AI应用变得越来越复杂并被广泛部署,原有的通信机制面临着一系列挑战。近期MCP仓库的PR #206引入了一个全新的Streamable HTTP传输层替代原有的HTTP+SSE传输层。本文将详细分析该协议的技术细节和实际优势。
|
5天前
|
XML 网络协议 程序员
Apipost接口调试全解:从HTTP到gRPC,程序员必备的“协议生存指南
Apipost是一款强大的接口调试工具,支持多种主流API协议。它涵盖HTTP/HTTPS、WebSocket、Socket.IO、gRPC、GraphQL、TCP及ISO8583金融报文等冷门协议。通过Body多样化、全局参数配置、性能分析等功能优化HTTP调试;提供WebSocket多消息存档与事件监听;gRPC支持服务反射和流式调试;GraphQL可自动生成Schema;TCP报文模板专业精准;SSE配置简单。此外,Apipost还具备环境变量、脚本加持和文档生成功能,是提升开发效率的全能工具。
|
25天前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
63 22
|
23天前
|
存储 API
如何克服HTTP协议的无状态问题
总的来说,如何克服HTTP协议的无状态性,就是通过某种方式,让服务器或客户端“记住”一些信息。这其中,Cookie和Session是最经常使用的两种方式,其他的根据具体的应用场景来选择。
53 10
|
21天前
|
人工智能 网络协议 API
开发效率翻倍!Apipost这些协议调试秘籍,从HTTP到金融报文全搞定
Apipost是一款强大的API研发管理工具,支持多种协议与数据格式,包括HTTP(s)、WebSocket、SSE、gRPC、TCP及金融协议(如ISO 8583、FIX)。它内置国密算法库,提供HTTP文件秒传、全局参数配置等实用功能。在SSE调试中,可轻松处理AI模型流式响应;WebSocket与Socket.IO实现高效实时通信;GraphQL支持可视化Query编写;TCP模块解决金融报文编码难题;gRPC则具备服务反射与流式调试能力。Apipost不仅简化了多协议切换的复杂性,还自动生成文档,显著提升开发效率,让开发者专注于核心业务逻辑。
|
2月前
|
网络协议 网络安全 数据安全/隐私保护
HTTP 协议浅析
通过对HTTP协议的深入了解,开发者可以更好地设计和优化Web应用,提高数据传输效率和用户体验。
160 21
|
3月前
|
缓存 网络协议 前端开发
Web 性能优化|了解 HTTP 协议后才能理解的预加载
本文旨在探讨和分享多种预加载技术及其在提升网站性能、优化用户体验方面的应用。
Web 性能优化|了解 HTTP 协议后才能理解的预加载
下一篇
oss创建bucket