servlet对象是在服务器端还是在客户端被创建?_【Java笔记】053天;Servlet 技术

211fc482ca0c2f15330671b249301d31.png

Servlet 技术

客户端根据用户输入的地址信息请求服务器,服务器在接收到用户的请求后进行处理,然后将处理结果响应给客户端,客户端将响应结果展示给用户。

请求:浏览器根据用户的请求方式,将请求相关数据按照http规定的格式,进行封装,然后将封装好的数据发给指定的服务器。

响应:服务器在接收到浏览器的请求信息后,后根据请求信息进行请求处理,将处理结果重新按照http协议的要求进行封装,然后将封装的数据相应给浏览器,浏览器在接受到相应信息后,解析执行。

客户端也就是浏览器的版本是有很多的,服务器的版本也是有很多的,这就需要规范浏览器和服务器的数据交互的格式。

HTTP:超文本传输协议(Hyper Text Transfer Protocol)

特点:

简单快速:客户向服务器请求服务时,只需传送请求方法和路径。 请求方法常用的有 GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的 程序规模小,因而通信速度很快 。

灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。

无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面, 在服务器不需要先前信息时它的应答就较快。

支持 B/S 及 C/S 模式。

HTTP协议的基本交互流程:

① 客户端和服务器端建立连接

② 客户端发送请求数据到服务器端(HTTP 协议)

③ 服务器端接收到请求后,进行处理,然后将处理结果响应客户端(HTTP 协议)

④ 关闭客户端和服务器端的连接(HTTP1.1 后不会立即关闭)

HTTP 协议之请求格式 :

请求行:请求方式、请求的地址和 HTTP 协议版本

请求头:消息报头,一般用来说明客户端要使用的一些附加信息

空行: 位于请求行和请求数据之间,空行是必须的。 请求数据:非必须。

get 请求方式:

请求数据会以?的形式隔开拼接在请求头中,不安全,没有请求实体部分。 get请求方式中,请求实体数据不是单独体现的,是以问号的方式拼接在请求行中的url后面。HTTP 协议虽然没有规定请求数据的大小,但是浏览器对 URL 的长度是有限制的,所以 get 请求不能携带大量的数据。 http协议的请求格式说白了就是键值对格式。

post 请求方式:

请求数据在请求实体中进行发送,在 URL 中看不到具体的请求数据,安全。适合数据量大的数据发送。

HTTP的响应格式和响应状态码:

响应行(状态行):HTTP 版本、状态码、状态消息

响应头:消息报头,客户端使用的附加信息

空行:响应头和响应实体之间的,必须的。

响应实体:正文,服务器返回给浏览器的信息 。

1775b86c49adcb674fc96f72df6dfb6e.png

daa77a40593442372ebdd265bfb43341.png

常见状态码:

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用

403 Forbidden //服务器收到请求,但是拒绝提供服务

404 Not Found //请求资源不存在,eg:输入了错误的 URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

对服务器的理解:

服务器就是一套代码,一个应用程序。可以解析浏览器发起的请求信息,可以根据请求信息调用并执行对应的代码处理请求。将处理结果相应给浏览器。

可以根据浏览器的请求自动调用并执行对应的业务逻辑处理代码的应用程序(狭义)。广义上来讲,值装载了服务器应用程序的主机,电脑也可以称之为服务器主机。

tomcat服务器的目录及其作用:

bin目录文件夹中:

.sh后缀的是给linux操作系统使用的

.bat是给Windows系统使用的。

startup:启动服务器,使用中保持程序框打开。

shutdown:尽量点击这里去关闭服务器。

conf:目录文件夹中:

存放相关的配置文件,作用是便于修改服务器代码运行规则,多为.xml文件。

lib:文件夹中存放的是tomcat运行jar包文件。

“ logs ”中存放的是日志文件。

“ temp ”中存放的是tomcat的临时文件,可以理解为缓存。

“ webapps ”想使用tomcat时,可以将自己的项目部署到此文件夹中。另外,此文件夹中也存放了默认的项目,也可以理解为放代码的容器。

“ work ”工作文件夹;存放jsp编译文件和java文件。

Servlet 介绍:

狭义的 Servlet 是指 Java 语言实现的一个接口(接口:规范了代码的书写规范。),广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。 Servlet 运行于支持 Java 的应用服务器中。从原理上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器

运行在支持 java 的应用服务器上 ;Servlet 的实现遵循了服务器能够识别的规则,也就是服务器会自动的根据请求调用对应的 servlet 进行请求处理;简单方便,可移植性强。

servlet其实就是实现了特殊接口的Java类。此类tomcat服务器是认识的

servlet由程序员创建,但是服务器调用执行。

servlet其实就是一个服务器可以识别的Java类。我们需要将业务逻辑处理规则放入servlet中,然后将servlet放入tomcat服务器中,服务器根据请求,调用对应的servlet处理。servlet可以称为后台处理程序的入口。

service于servlet就像java程序入口的main函数。

servlet创建流程:

1、创建包

2、在包里创建一个实现了HttpServlet的java类

3、重写service方法,在方法中声明处理规则,在 service 方法中书写逻辑代码即可 。

两个形参:

HttpServletRequest:封装了此次请求所有的相关请求数据。

HttpServletResponse:封装了要响应的目标浏览器的相关地址信息。

4、在web。xml文件中配置servlet

5、将web项目中WebRoot下的所有内容复制到服务器的webapps目录中新建的文件夹中

6、启动服务器。

MyEclipse 是开发工具,通过此工具便于程序员的代码编写。真正运行的代码不是 MyEclipse中编写的代码,而是 tomcat 服务器中部署好的代码。Tomcat 会根据请求自动调用对应的代码进行请求处理。

42aed471e7ac6d3fefd5d2070f18d6a3.png

服务器如何知道要执行哪个项目的哪个servlet:

例:http://localhost:8080/project/s

localhost相当于服务器目标主机的IP。

8080:服务器监听的端口号,对应应用程序的端口号。

通过以上两条找到服务器,同时服务器会去webapps文件夹目录下查找处理此次请求的代码。

project/s:uri数据,服务器根据uri找到对应的servlet执行,根据/s去项目中的web.xml文件中去匹配。project(虚拟项目名);/s(/别名)

拥有类的全限定路径后,可以根据反射创建类的对象。

URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。

Servlet的web.xml文件的几种配置方式:

配置方式一:精确配置;

<url-pattern>/别名</url-pattern>

注意:”/“是必须声明,别名不可以为中文,此种方式可以配置多个。

配置方式二:模糊配置;

<url-pattern>*.后缀名</url-pattern>

注意:所有以指定的后缀名结尾的请求都会调用该servlet进行处理。作用:进行模块化开发的划分等。

将没有联系的功能分为很多的模块,进行模块化开发的划分。这样一个servlet可以负责很多请求的处理。

配置方式三:拦截所有请求;

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

注意:会拦截所有类型的请求,包括静态资源请求(css、js、图片等)和jsp请求。

配置方式四:

<url-pattern>/one/*</url-pattern>

注意:会拦截处理所有Servlet的别名以one开头的路径的请求。

注意以上四种方式:

常用第一种。

一个servlet可以配置多个url-pattern,但是反过来多个servlet不可以配置多个url-pattern。不同的servlet不允许配置相同的url-pattern。如果配置了。在服务器启动的时候就会报错(错误404)。也说明了服务器启动的时候就会将部署的项目中的web.xml文件加载进内存。

服务器中的servlet创建是单例的

服务器在能接收到浏览器的请求后,会开辟一个线程来处理此次请求,在线程中调用对应的Servlet进行处理。

但是要避免:一个线程就要创建一个实例化对象导致浪费资源进而降低服务器性能。

服务器调用Servlet处理请求,但是一个Servlet服务器只会创建一个实例化对象。该对象是线程共享的。每次的调用都是调用此对象的service方法,只是处理的数据不同,每次的调用给方法中传递的实参都不一样。

Myeclipse 集成 Tomcat:

发现每次在 Myeclipse 中更改了代码后,都需要重新复制代码到服务器中,太过麻烦。将 tomcat 的目录和 Myeclipse 集成起来,这样 Myeclipse 在帮我们复制更改的代码的时候,就知道复制到哪个服务器中。

部署好的项目,每次在 Myeclipse中进行更改后只要点击 ctrl+s 进行保存,Myeclipse 会自动重新复制文件到服务器,并覆盖原有在服务器中的文件。

Servlet的生命周期:

结论:从第一次被调用到服务器关闭。

验证方法:

init方法:servlet被初始化创建的时候调用

service方法:处理请求的时候

destory方法:servlet被销毁的时候;当服务器关闭的时候销毁servlet,触发destory方法的执行。

如果init的代码量较大,做的资源很多的话,完成init才去做的初始化创建不如当服务器启动的时候,就把servlet对象创建好,便于很快使用;

在web.xml文件的servlet标签中加上:

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

作用是配置servlet服务器启动时完成加载和初始化创建。这时的生命周期就变为从服务器开启到服务器关闭。

doGet、doPost和service方法

tomcat服务器其实只认识service方法,如果我们自己声明的servlet中没有重写service方法,则会执行HttpServlet中的service方法,而HttpServlet中的service方法会根据请求方法调用对应的do x x()方法执行请求处理。尽量使用 service 方法进行请求处理,并且不要在 service 方法中调用父类的service。

说明404的原因

服务器没有找到浏览器所请求的资源的情况下,服务器的自主响应浏览器资源不存在。

原因一:在请求地址中的servlet的别名书写错误。 原因二:虚拟项目名称拼写错误

说明500错误的原因

内部服务器错误 :在web.xml中校验servlet类的全限定路径是否拼写错误。检查是否是service方法体的代码执行错误导致

说明405的原因

Servlet中没有声明service方法,会根据请求方式调用对应的方法进行请求处理,在servlet中没有声明对应的请求处理方法时,则会报错误405。尽量使用 service 方法进行请求处理,并且不要在 service 方法中调用父类的service。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值