Servlet简介与Servlet和HttpServlet运行的流程

1.Servlet

[1] Servlet简介

> Server + let

> 意为:运行在服务器端的小程序。

> Servlet实际上就是一个接口。

- 狭义上的Servlet,指的就是Servlet接口

- 广义上的我们认为凡是实现Servlet接口的类,我们都称他是一个Servlet *****

> Servlet的作用:

1.接收用户发送的请求

2.调用其他的java程序来处理请求

3.根据处理结果,返回给用户一个页面

> Servlet的HelloWorld

1.创建一个类并实现Servlet接口

2.在web.xml文件中对Servlet进行配置

<servlet>

<servlet-name>别名</servlet-name>

<servlet-class>全类名</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>别名</servlet-name>

<url-pattern>需要servlet处理的请求地址</url-pattern>

</servlet-mapping>

> Servlet的三个名字:

<servlet-name>

- Servlet的别名,程序员通过别名对Servlet进行配置

<servlet-class>

- Servlet的全类名,服务器通过全类名来创建Servlet的实例

<url-pattern>

- Servlet映射的请求地址,用户通过该地址访问Servlet

[2] Servlet的生命周期

> Servlet的生命周期,指Servlet的对象从被创建到被销毁的过程。

> Servlet的生命周期方法:

1.构造器:

- Servlet第一次处理请求时,会调用构造器,来创建Servlet实例。

- 只会调用一次,Servlet是单例模式,他是以多线程的方式调用service()方法.

- Servlet不是线程安全,所以尽量不要再service()方法中操作全局变量。

2.init()方法:

- 构造器调用之后马上被调用,用来初始化Servlet,只会调用一次。

3.service()方法:

- Servlet每次处理请求时都会调用service()方法,用来处理请求,会调用多次。

4.destroy()方法:

- Servlet对象销毁前(WEB项目卸载时)调用,用来做一些收尾工作,释放资源。

[3] 相关接口

①ServletConfig

代表:当前Servlet的配置信息,每一个Servlet都有其唯一对应的ServletConfig。

<servlet>

<servlet-name>AServlet</servlet-name>

<servlet-class>com.atguigu.servlet.AServlet</servlet-class>

<init-param>

<param-name>user</param-name>

<param-value>root</param-value>

</init-param>

<init-param>

<param-name>password</param-name>

<param-value>123123</param-value>

</init-param>

</servlet>

获取:由Tomcat服务器创建,最终作为参数传递到init()方法中,我们可以在init()方法直接使用。

当我们通过继承HttpServlet创建Servlet时,由于父类已经实现ServletConfig接口,

所以我们可以在Servlet中直接调用ServletConfig的方法。

功能:

【1】 获取Servlet的别名

【2】 获取当前Servlet的初始化参数。

<init-param>

<param-name>user</param-name>

<param-value>root</param-value>

</init-param>

<init-param>

<param-name>password</param-name>

<param-value>123123</param-value>

</init-param>

【3】 获取当前WEB应用的ServletContext对象。

②ServletContext

代表:当前的WEB应用,一个WEB应用对应一个唯一的ServletContext对象,

ServletContext对象在项目启动时创建,在项目卸载时销毁。

获取:通过ServletConfig的getServletContext()方法获取。

功能:

【1】 可以获取整个WEB应用的初始化参数

<context-param>

<param-name>phone</param-name>

<param-value>1388888888</param-value>

</context-param>

【2】 可以获取资源的真实路径(物理路径),主要在文件的上传和下载时使用。

【3】 可以作为一个域对象在不同的web资源之间共享数据。(下回分解)

[4] GenericServlet

- 通用Servlet的父类

- 相比Servlet接口GenericServlet更加简单一些,但是我们最终实际上使用的HttpServlet

[5] HttpServlet

- HttpServlet继承了GenericServlet,而GenericServlet实现Servlet接口

- 所以我们可以同构继承HttpServlet来创建一个Servlet。

- HttpServlet重写service()方法:

1.在该方法中先将ServletRequest和ServletResponse

强转为了HttpServletRequest和HttpServletResponse。

2.然调用重载的service()方法,并将刚刚强转得到对象传递到重载的方法中。

- 重载service(HttpServletRequest request , HttpServletResponse response)

1.在方法中获取请求的方式(get或post)

2.在根据不同的请求方式去调用不同的方法:

如果是GET请求,则调用doGet(HttpServletRequest request , HttpServletResponse response)

如果是post请求,则调用doPost(HttpServletRequest request , HttpServletResponse response)

- 结论:

当通过继承HttpServlet来创建一个Servlet时,我们只需要根据要处理的请求的类型,来重写不同的方法。

处理get请求,则重写doGet()

处理post请求,则重写doPost()

[6] HttpServletRequest 

代表:浏览器发送给服务器的请求报文。

获取:该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。

功能:

【1】获取用户发送的请求参数

request.getParameter("username");

【2】获取项目的名字(用来设置绝对路径)

request.getContextPath();

【3】作为一个域对象,在不同的WEB资源之间共享数据。

【4】请求的转发

request.getRequestDispatcher("target.html").forward(request, response);

[7] HttpServletResponse

代表:服务器发送给浏览器的响应报文。

获取:该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。

功能:

【1】响应给浏览器一个网页或者是网页片段(设置的是响应报文的响应体)

response.getWriter("");

【2】请求的重定向

response.sendRedirect("target.html");

转发和重定向:(掌握)

转发                重定向

请求的次数:          1                      2

发生的位置            服务器内部            浏览器

浏览器地址栏        不改变                改变

浏览器的感知        不知道                知道

[8] 字符编码

> 当用户通过表单向Servlet发送中文请求参数时,Servlet获取到内容会产生乱码,

当Servlet向浏览器响应中文内容时,也会产生乱码。

> 浏览器和服务器之间通信时,中文内容时不能直接发送的,需要对中文进行编码。

> 编码:

- 将字符转换为二进制码的过程叫编码。

> 解码:

- 将二进制码转换为普通字符的过程叫解码。

> 编码和解码所采用的规则我们称为字符集。

> 产生乱码问题的根本原因:

编码和解码所采用的字符集不同。

> 解决方法:

统一编码和解码的字符集为UTF-8。

> 常见字符集:

1.ASCII

2.ISO8859-1

3.GBK

4.GB2312

5.UTF-8

> 请求编码

- 请求是浏览器发送给服务器的。

- 浏览器 --> 服务器

- 浏览器 编码

> 浏览器的会自动使用网页的字符集对参数进行编码

UTF-8的张三:%E5%BC%A0%E4%B8%89

GBK的张三:%D5%C5%C8%FD

> 所以我们只需要统一网页的字符集为UTF-8即可。

- 服务器 解码

post请求

> request解码时默认字符集时iso8859-1,但是iso压根就不支持中文

> post请求在servlet中解码,所以我们只需要指定request的字符集即可。

> 我们可以通过如下方法,来设置request的字符集:

request.setCharacterEncoding("utf-8");

> 注意:

该方法要在request.getParameter()第一次调用之前调用

get请求

> get请求是通过url地址传递请求参数,url中的请求参数将会被Tomcat服务器自动解码。

> Tomcat的默认编码是iso8859-1,但是iso压根就不支持中文,所以必然乱码。

> 只需要修改Tomcat的解码的默认字符集,修改配置文件server.xml

> 在server.xml的Connector标签中(改端口号的那个标签)添加如下属性:

URIEncoding="utf-8"

> 修改完配置文件以后,get请求的编码就不用再处理的,但是post请求还是老样子。

> 响应编码

- 响应是服务器发送给浏览器

- 服务器 --> 浏览器

- 服务器 编码

> 指定服务器的编码字符集为UTF-8。

> 指定response的字符集

response.setCharacterEncoding("utf-8");

> 虽然我们已经指定了response的字符集为utf-8,但是浏览器并不是用utf-8解码。

浏览器默认使用gb2312解码的,所以依然乱码,只不过没有那么乱。

- 浏览器 解码

> 浏览器的解码字符集可以通过浏览器来设置(不靠谱)

> 我们可以通过服务器来告诉浏览器,我们的内容的编码格式为utf-8

> 我们可以通过一个响应头来告诉浏览器,内容的编码格式:

Content-Type:text/html;charset=utf-8

> 通过response的方法,来设置响应头:

response.setHeader("Content-Type", "text/html;charset=utf-8");

解决方案:

1.设置响应头

response.setHeader("Content-Type", "text/html;charset=utf-8");

2.设置response的编码格式

response.setCharacterEncoding("utf-8");

> 当我们设置Content-Type这个响应头时,服务器会自动使用响应头中的字符集为内容编码。

> 最终方案:

response.setContentType("text/html;charset=utf-8");

总结:

post请求:

- 在request.getParameter()方法第一次调用之前,调用如下代码:

request.setCharacterEncoding("utf-8");

get请求:

- 修改server.xml配置文件

- <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

响应:

- 设置一个Content-Type响应头

response.setContentType("text/html;charset=utf-8");

[9] 路径问题

> URI和URL

- URL是URI的一种实现,也是URI最常见的实现方式。

- URI有两种实现方式URL和URN,URN用的很少

- 我们说URL和URI实际上可以理解为一个意思

> URL地址的格式

http://主机名:端口号/项目名/资源路径/资源名

①相对路径和绝对路径

> 相对路径

- 之前我们使用的路径全都是相对路径:

- 所谓的相对路径指相对于当前资源所在路径:

http://主机名:端口号/项目名/资源路径/

- 由于转发的出现,相对路径会经常发生变化,容易出现错误的链接

所以在开发中我们一般不使用相对路径,而是使用绝对路径。

> 绝对路径

- 绝对路径使用/开头

- 由浏览器解析的绝对路径中的/代表的是服务器的根目录:

http://主机名:端口号/

注意:需要加上项目名

- 由服务器解析的绝对路径中的/代表的项目的根目录:

http://主机名:端口号/项目名/

注意:不要加项目名

- 转发的路径由服务器解析,设置绝对路径时不需要加项目名

- 重定向的路径由浏览器解析,设置绝对路径时需要加上项目名

②常见的路径:

url-pattern:

转发的路径:

- url-pattern和转发中的路径都是由服务器解析的,

根目录是项目的根目录:

http://主机名:端口号/项目名/

- 所以这两个路径不需要加项目名

重定向的路径:

页面中的路径:

- 重定向和页面中的路径(HTML标签中的路径),由浏览器解析的,

根目录是服务器的根目录:

http://主机名:端口号/

- 所以这个两个路径必须加上项目名

[10]运行的流程

[11]HttpServlet

转载请注明出处!

http://www.cnblogs.com/libingbin/

时间: 2024-10-11 10:43:59

Servlet简介与Servlet和HttpServlet运行的流程的相关文章

【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期

2017年07月26日 00:16:04 YI_DIAN_DIAN 阅读数:5832 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_35415600/article/details/76100568 一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容.

《Servlet学习笔记》Servlet 简介

Servlet 简介:Servlet是sun公司提供的一门用于开发动态web资源的技术.Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下两步:1.编写一个Java类,实现servlet接口:2.把开发好的Java类部署到web服务器中. jsp就是servletjavase.javaee,servlet不属于javase而属于javaeeservlet专门文档APITomcat可以运行servlet,lib

Servlet简介

前言 1.servlet简介 a.b/s  架构 browser/server,就是客户端采用浏览器,服务器端采用web server.浏览器和   服务器端之间采用http协议进行通讯.相对于c/s架构的优势: 1.不需要关系通讯的问题,c/s架构需要自己写代码来定义通讯协议,难度比较大. 2.浏览器不需要单独安装,可维护性更好,c/s架构需要下载客户端. 服务器端负责通讯,我们可以使用servlet/jsp技术来显示业务逻辑,处理业务逻辑. b.组件和容器 组件:符合规范的可以单独部署的程序

servlet简介和相关知识点

关于Servlet! 1.servlet简介 sun提供的一种动态web资源开发技术.本质上就是一段java小程序,可以将Servlet加入到Servlet容器中运行. *Servlet容器 -- 能够运行Servlet的环境就叫做Servlet容器. --- tomcat *web容器 -- 能够运行web应用的环境就叫做web容器 --- tomcat 2.用记事本写一个servlet程序 写一个类实现sun公司定义的Servlet接口 将写好的类配置到tomcat中的web应用的web.x

Servlet系列(一)----Servlet简介

Servlet是使用java Servlet接口运行在Web应用服务器上的java程序,与普通Java程序不同.他可以对web浏览器或其他HTTP请求进行处理,是位于web服务内部的服务器端的java应用程序. 最初的JSP开发模式为JSP+JavaBean称为Model1模式.JSP+Servlet+javaBean则慢慢变成了Model2模式.一般在建立中小型网站时使用Model1模式,建立大型网站时使用Model2模式. Servlet是一种独立于平台和协议的服务器端java应用,他可以生

(一)Servlet 简介

一.简介 Servlet是sun公司提供的一门用于开发动态web资源的技术.需要实现如下两个步骤: 1.编写一个Java类,实现servlet接口.2.把开发好的Java类部署到web服务器中. 二.Servlet声明周期 Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象.如果是,则直接执行第④步,否则,执行第②步. ②装载并创建该Servlet的一个实例对象. ③调用Servlet实

(一)Servlet简介

相关名词解释 HTML:Hyper Text Markup Language,超文本标记语言 HTTP:Hyper Text Transfer Protocol,超文本传输协议 URL:Uniform Resource Locator,统一资源定位符 CGI:Common Gateway Interface,公共网关接口 DD:Deployment Descriptor,部署描述文件 Servlet简介 Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或

Servlet学习之Servlet概念与运行流程

Servlet介绍与使用 什么是服务器: Servlet的概念: Servlet的特点: Servlet的使用: web.xml参数配置: 问题: 服务器在接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求处理.但是逻辑代码是由程序员编写并放到服务器中,那么服务器怎么知道该怎么调用并调用哪个类和哪个方法来进行请求处理. 解决: 程序员在编写代码的时候如果能够按照服务器能够识别的规则进行编写, 浏览器按照指定的规则进行发送请求,那么服务器就可以调用并执行响应的逻辑代码进行请求处理了. 什么是服

Servlet简介与生命周期

转载请注明原文地址: 一:Servlet是什么 Servlet是运行在Web服务器上的Java程序,作为处理来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层.JSP在web服务器上要先转换成servlet,然后才能在JVM运行,并把结果拼接成浏览器可识别的文件(如html)传回浏览器显示. 二:Servlet的应用场景 单纯地对客户端的请求做处理时,如果我们用纯JSP文件(即:只有Java语句)来处理的话,还需要先转换为servlet才能运行