Servlet和tomcat

Servlet和tomcat

servlet

(1) Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序,其主要功能在于交互 式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的 Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

(2) Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多 数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

(3) Servlet工作模式:

① 客户端发送请求至服务器

② 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器

③ 服务器将响应返回客户端

(4) Servlet的API:

1.javax.servlet 其中包含定义servlet和servlet容器之间契约的类和接口。

2.javax.servlet.http 其中包含定义HTTP Servlet 和Servlet容器之间的关系。

3.javax.servlet.annotation 其中包含标注servlet,Filter,Listener的标注。它还为被标注元件定义元数 据。

4.javax.servlet.descriptor,其中包含提供程序化登录Web应用程序的配置信息的类型。

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZyIBKno-1591599132355)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif)]如何使用Servlet

Servlet技术的核心是Servlet它是所Servlet类必须直接或者间接实现的一个接口。在编写实现Servlet

的Servlet类时,直接实现它。在扩展实现这个这个接口的类时,间接实现它。

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bjSDC08A-1591599132356)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif)]第一个Servlet的编写

(1) 创建一个类实现Servlet接口

Public class LoginServlet extendsHttpServlet{

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CWf4y8o6-1591599132360)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif)]//重写HttpServlet 类中的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oTToPKd5-1591599132362)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif)]/* void init(ServletConfig var1) throws ServletException {} */

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws

ServletException, IOException {

Date d = new Date();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NsLvsa6d-1591599132364)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif)]}

public void destroy() {

System.out.println(“对象即将销毁=======”);

}

(2) 在web.xml文档中配置映射关系

XML中配置好这个Servlet的映射关系:

配置声明一个Servlet

服务器名称 服务器类的路径 服务器名称

/访问路径

(3) 启动tomcat,在浏览器输入

http://localhost:8080/工程名/访问服务器的路径

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcCnVWyT-1591599132366)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image005.gif)]Servlet工作原理

(1) Servlet接口定义了Servletservlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内 存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型 只能有一个实例

(2)用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个 ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如 TomCat**)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。**

(3)ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。 ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻 松的发回给用户。

(4)对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文

(应用程序)的环境详情。****每个应用程序只有一个ServletContext**。每个Servlet对象也都有一个封装**

Servlet配置的ServletConfig对象。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BVQarNh6-1591599132368)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)]

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oRViZMQk-1591599132370)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image007.gif)]Servlet的生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJHFIwZF-1591599132371)(file:///C:/Users/60221/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg)]

其中,init( ),service( ),destroy( )是Servlet生命周期的方法。代表了Servlet从“出生”到“工作”再到“死亡 ”

的过程。Servlet容器(例如TomCat)会根据下面的规则来调用这三个方法:

1.init( ),当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出 来,但是这个方法在后续请求中不会在被Servlet容器调用,就像人只能“出生”一次一样。我们可以利用 init( )方法来执行相应的初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig对象进 来从而对Servlet对象进行初始化

2.service( )方法,每当请求Servlet时,Servlet容器就会调用这个方法。就像人一样,需要不停的接 受老板的指令并且“工作”。第一次请求时,Servlet容器会先调用init( )方法初始化一个Servlet对象出 来,然后会调用它的service( )方法进行工作,但在后续的请求中,Servlet容器只会调用service方法 了。

  1. destory,当要销毁Servlet时,Servlet容器就会调用这个方法,就如人一样,到时期了就得死亡。 在卸载应用程序或者关闭Servlet容器时,就会发生这种情况,一般在这个方法中会写一些清除代 码。
  2. 下面用程序来演示生命周期

2、传输数据的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特 定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限 制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数 据大小进行限制,Apache、IIS都有各自的配置。

3、安全性

POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全, 上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都 会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的 用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击

javax.servlet.ServletResponse接口表示一个Servlet响应,在调用Servlet的Service( )方法前, Servlet容器会先创建一个ServletResponse对象,并把它作为第二个参数传给Service( )方法。 ServletResponse隐藏了向浏览器发送响应的复杂过程。

让我们也来看看ServletResponse内部定义了哪些方法:

在Service API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来 封装HTTP响应消息。 由于HTTP请求消息分为状态行,响应消息头,响应消息体三部分,因此,在 HttpServletResponse接口中定义了向客户端发送响应状态码,响应消息头,响应消息

void sendRedirect(String var1) throws IOException;//发送一条响应码,讲浏览器跳转到指定的位

PrintWriter getWriter()

获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后

Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。

HttpServletRequest表示Http环境中的Servlet请求。它扩展于javax.servlet.ServletRequest接口,并 添加了几个方法

Sring getContextPath();//返回请求上下文的请求URI部分 Cookie[] getCookies();//返回一个cookie对象数组

String getHeader(String var1);//返回指定HTTP标题的值 String getMethod();//返回生成这个请求HTTP的方法名称 String getQueryString();//返回请求URL中的查询字符串 HttpSession getSession();//返回与这个请求相关的会话对象![img

在前面我们讲过,在service中使用的编码解码方式默认为:ISO-8859-1编码,但此编码并不支持中 文,因此会出现乱码问题,所以我们需要手动修改编码方式为UTF-8编码,才能解决中文乱码问题,

解决post提交方式的乱码:request.setCharacterEncoding(“UTF-8”); 解决get提交的方式的乱码:

parameter = newString(parameter.getbytes(“iso8859-1”),“utf-8”);

原因:response缓冲区的默认编码是iso8859-1**,此码表中没有中文。所以需要更改response的编码 方式**

转发的特点

地址栏不发生变化,显示的是上一个页面的地址 请求次数:只有1次请求 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址 请求域中数据不会丢失

重定向的特点

地址栏:显示新的地址 请求次数:2次

根目录:http://localhost:8080/ 没有项目的名字 请求域中的数据会丢失,因为是2次请求

疑问 问:什么时候使用转发,什么时候使用重定向?

如果要保留请求域中的数据,使用转发,否则使用重定向。 以后访问数据库,增删改使用重定向,查询使用转发。 问:转发或重定向后续的代码是否还会运行? 无论转发或重定向后续的代码都会执行

tomcat

(1) Tomcat的介绍

开源小型web服务器 ,完全免费,主要用于中小型web项目,只支持Servlet和JSP 等少量javaee规范

1.HTTP 请求/响应的步骤:

\1. 客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。 例如,http://www.luffycity.com

\2. 发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、 空行和请求数据4部分组成。

\3. 服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由 状态行、响应头部、空行和响应数据4部分组成。

\4.释放连接TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若

connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

\5. 客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告 知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法 对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

\1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

\2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

\3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握 手的第三个报文的数据发送给服务器;

\4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

应头,响应头告 知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法 对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

\1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

\2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

\3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握 手的第三个报文的数据发送给服务器;

\4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

\5. 浏览器将该 html 文本并显示内容;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值