Servlet学习笔记

HTTP协议

HTTP协议是构建于tcp/ip协议上的一个协议,基于requestresponse序列的会话结构。

Request的基本要素包含:HTTP方法,访问页面的URL以及表单的参数。

Response的基本要素包括:状态码(表示请求是否成功),content-typ(文字,图片以及HTML)以及具体的content.

HTTP最常用的两个方法就是getpost

Get用于从服务器获取资源。Get方法只能发送有限个字符作为参数,这些发送的参数直接显示在地址URL后面。

Post用于向服务器发送数据。一般向服务器提交数据表单或者某些重要的数据,需要对数据进行加密。

 

Servlet

Servlet是由服务器的容器调用的代码,它本身不包含main()函数。

一、Servlet容器请求处理过程

Servlet容器处理请求的过程如下:(假设我们连接一个servlet

1.       容器发现针对某个servlet的请求,于是创建两个对象HttpServletRequestHttpServletResponse

2.       容器发现对应的servlet,针对该请求创建一个线程,然后将创建的requestresponse对象作为参数传递给该线程。

3.       容器调用servletservice()方法,基于请求的类型,service()方法根据客户端发送的是HTTP GetPost请求调用doGet()doPost()方法。

4.       通过调用相应的方法生成动态页面并返回,生成的页面作为response对象的一部分返回。

5.       service()方法结束,线程要么结束要么返回到线程池中。容器销毁requestresponse对象。

二、Servlet映射

见如下代码:

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

    version="2.4">

 

   <servlet>

     <servlet-name>hello</servlet-name>

     <servlet-class>SimpleHello</servlet-class>

 

   </servlet>

 

   <servlet-mapping>

     <servlet-name>hello</servlet-name>

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

   </servlet-mapping>

</web-app>

其中<servlet>项用来将完整的类名和内部表示名字映射起来。<servlet-class>表示完整的类名,<servlet-name>表示映射的内部名字。

<servlet-mapping>将内部名字和公共的URL映射起来。<url-pattern>表示公共的URL。所以在示例中虽然真正的类为SimpleHello,但是可以通过/hello来访问它。

三、Servlet类层次结构

Servlet类层次结构如图1

 

                                   1servlet层次结构

1.       Servlet接口包含有生命周期的三个方法。

2.       GenericServlet是抽象类,实现了servlet接口的大多数基本方法。

3.       HttpServlet也是一个抽象类,实现了service()方法,以及HTTP协议的相关方法。

4.       MyServlet所做的就是覆写相关的HTTP方法来提供所需要的功能。

 

Servlet生命周期:

Servlet生命周期的所有方法都是由容器调用,在一定条件下可以手动覆写部分方法。

方法

调用时机

用途

是否需要覆写

init()

在创建servlet实例之后,在实例可以处理任何客户端请求之前。

在处理客户端请求前可以做一些初始化的工作。

如果有一些需要初始化的代码(比如获取数据库连接)则需要覆写init()方法。

service()

第一个客户端请求到达时。

该方法根据请求确定HTTP方法(doGet(),doPost()等),调用匹配的servlet

一般应该覆写doGetdoPost而不应覆写service()

doGet()/doPost()

service()方法根据HTTP方法调用doGetdoPost

自定义功能的起始点。

至少覆写一个方法。

容器通过装载类,调用servlet的无参构造函数并调用servletinit()方法来初始化一个servlet.

init()方法使得servlet可以访问ServletConfig, ServletContext对象来获取相关的配置信息。

Servlet可访问的对象:

1.       ServletConfig

每个servlet都包含一个ServletConfig,用于传递布署信息(比如数据库或bean的查找名)。参数一般配置在部署描述中。

 

2.       ServletContext

每个web应用都有一个ServletContext。用于访问整个WEB应用的参数,也配置在部署描述中。用于获取服务器的相关信息。

 

 

RequestResponse:

RequestResponseHttpServlet一些方法的参数。比如(doGet(), doPost())他们本身都是interface.

HttpServletRequest的方法主要处理HTTP相关的事情,比如cookie,head,session

 

四、getServerPort(),getLocalPort()getRemotePort()的区别

因为这些方法都是ServletRquest的,所以getRemotePort()表示获取客户端的portgetServerPort()表示客户端的请求最初是送给哪个端口。而getLocalPort()表示请求最终终止于哪个端口。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值