Java Web学习笔记----详解ServletAPI

9 篇文章 0 订阅

昨天聊了一大堆乱七八糟的东西。今天给大家分享一下当初我学习JavaWeb的笔记吧。
Servlet技术是JavaWeb中的核心技术,emmmmmmmm。。。。
太枯燥了,还是先从API开始说吧,
首先ServletAPI中有4个Java包:
1、javax.servlet:其中包含定义Servlet和Servlet容器之间契约的类和接口
2、javax.servlet.http:其中包含定义HTTPServlet和Servlet容器之间契约的类和接口
3、javax.servlet.annotation: 其中包含Servlet、Filter、Listener的标注,它还为被标注元件定义元数据
4、javax.servlet.descriptor :其中包含提供程序化登录web应用程序的配置信息的类型。
  二. Servlet技术概述
  Servlet技术的核心是Servlet接口,他是所有Servlet类必须直接或间接实现的一个接口,在编写实现Servlet的Servlet类的时候是直接实现它,在扩展实现这个接口的类的时候就是间接实现它。
  Servlet接口中定义了Servlet与Servlet容器之间的契约,这个契约归结起来就是:Servlet容器将Servlet类加载到内存,并在Servlet类的实例上调用具体的方法。在一个应用程序中每种Servlet类种只能有一个实例。
  用户请求致使Servlet容器调用了Servlet类种的service方法,并且传入一个ServletRequest实例和一个ServletResponse的实例,ServletRequest中封装了当前的HTTP请求,
因此Servlet开发人员不必解析和操作原始的HTTP请求数据.ServletResponse表示=当前用户的HTTP响,使得将响应发回客户端变得十分容易.
  对于每一个应用程序,Servlet容器还会创建一个Servlet Context的实例,这个对象中封装了上下文的环境详情,每个上下文只有一个ServletContext.每个Servlet示例也都有一个封装Servlet配置的ServletConfig
  三, Servlet接口
Servlet接口中定义了5个方法:

1、void init(ServletConfig config) throws ServletException
2、void service(ServletRequest request, ServletResponse response) throws ServletException,java.ioi.IOException
3、void destroy()
4、java.lang.String getServletInfo()
5、ServletConfig getServletConfig()
  这里需要注意的是,在编写Java方法签名的时候,对于与包含该方法的类型不处于同一个包中的类型的时候要使用类的全名.所以在service方法中javax.servlet.ServletException的签名中可以不用写包的名称,但是java.io.IOException则要编写完整的类名称.
  在这五个方法中,init、service和destroy是生命周期方法.Servlet容器根据以下规则调用这三个方法:
init: 当Servlet第一次被请求的时候Servlet容器会调用这个方法,在后续的请求中不会被再次调用
service: 每当请求Servlet的时候多会调用一次
destroy: 当销毁Servlet的时候,该方法被调用.

一、ServletRequset接口
  对于每一个HTTP请求,Servlet容器都会创建一个ServletRequest实例,并将他传递给service方法。ServletRequset封装了关于这个请求的信息。
  ServletRequset接口中定义了一些方法:
  

 1public int getContentLength(); //返回请求主题的字节数,如果不知道字节长度就返回-1
  2public  java.lang.String getContentType();/返回请求主体的MIME类型,如果不知道类型就返回null
  3public java.lang.String getParameter(java.lang.String name);//返回指定参数name的值
  4public java.lang.String getProtocol();//返回这个HTTP请求的协议版本和协议名称

   getParameter是在ServletRequest中最常用的方法。该方法通常是用来返回HTML表单域的值,getParameter也可以用于获取查询字符串的值。
 二、ServletResponse接口

  javax.servlet.ServletResponse接口表示一个Servlet响应,在调用service方法之前Servlet容器首先创建一个ServletResponse的实例,并将他作为第二个参数传入到service方法中,ServletResponse隐藏了像浏览器发送响应的复杂过程。
  在ServletResponse接口中,定义的方法之一是getWriter方法,该方法返回了一个可以向客户端发送文本的java.io.aPrintWriter。默认的情况下该对象采用的是ISO-8859-1的编码方式。
三、ServletConfig
当Servlet容器初始化Servlet的时候,Servlet容器会给Servlet的init方法传入一个ServletConfig的实例,该实例中封装了可以通过@WebServlet或者部署描述符传递给Servlet的配置信息
这样传入的每一条信息就是一个初始参数,一个初始参数有key合 value两个元件
为了从Servlet内部获取到初始参数的值,要在Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParameter方法,getInitParameter方法的签名如下:

java.lang.String getInitParameter(java.lang.String name)

此外,getInitParameterNames方法则是返回所有初始化参数名称的一个Enumeration:

java.util.Enumeration<java.lang.String> getInitParameterNames()

举个例子,当要获取contactName参数的值,要使用下面的方法签名

String contactName = servletConfig.getInitParameter("contactName");

除了getInitParameter和getInitParameterNamespace之外,ServletConfig还提供了一个很有用的方法:getServletContext。利用这个方法可以从Servlet内部获取ServletContext。

四、ServletContext
ServletContext表示Servlet应用程序,每个应用程序只有一个上下文对象,当把一个应用程序同时部署到多个容器的分布式环境中的时候,每个jvm上面的Web应用程序都会有一个ServletContext对象。
通过ServletConfig中调用getServletContext方法,可以获得ServletContext实例,有了ServletContext就可以共享从应用程序中所有资料处访问到的信息,并且可以动态的注册web对象,前者将对象保存在ServletContext内部的Map中,
保存在ServletContext中的对象被称作为属性
ServletContext中的以下的方法负责处理属性:

java.lang.Object getAttribute(jkava.lang.String name)
java.util.Enumeration<java.lang.String> getAttributeNames()
void setAttribute(java.lang.String name,java.lang.Object object)
void removeAttribute(java.lang.String name)

五、GenericServlet抽象类
GenericServlet实现了Servlet和ServletConfig两个接口,并且完成了以下任务:
1、将init方法中的ServletConfig付给一个类级的变量,以便可以通过调用getServletConfig获取,
2、将接口中的所有方法提供默认实现,
3、提供方法,包围ServletConfig中的方法

六、HttpServlet
HttpServlet类覆盖了javax.servlet.GenericServletl类,在使用HttpServlet的时候,还要借助分别代表Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。
HttpServletRequest接口扩展了javax.servlet.ServletRequest,HttpServletResponse接口扩展了javax.servlet.ServletResponse。
HttpServlet覆盖了GenericServlet中的service方法,并且通过下面的签名再添加一个service方法:
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,java.io.IOException
新的service方法和javax.servlet.Servlet中的service方法之间的区别在于参数列表不同

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

1、java.lang.String getContextPath() ;//返回请求上下文的请求uri部分
2、Cookie[] getCookes();// 返回一个Cookie对象数组
3、java.lang.String getHeader(java.lang.String name);// 返回指定的Http标题
4、java.lang.String getMethod();// 放回生成这个请求的Http方法名称
5、java.lang.String getQueryString();//返回请求URl中的查询字符串
6、HttpSession getSession() ;//返回与这个请求相关的会话对象,如果没有将创建一个新的对象
7、HttpSession getSession(boolean create);// 返回与这个请求相关的对象,如果有并且传入参数为true,将创建一个新的会话对象

HttpServletResponse: 表示Http环境中的响应,该接口同样的扩展了javax.servlet.ServletResponse接口,新增了以下的几种方法:

1void addCookie(Cookie cookie) ;//给这个响应对象添加一个cookie
2void addHeader(java.lang.String name, java.lang.String value);// 给这个响应对象添加一个header
3void sendRedirect(java.lang.String location) ;//浏览器跳转到指定的页面

Servlet小结
Servlet技术是javaEE技术的一部分,所有的Servlet都运行在Servlet容器中,容器和Servlet间的接口为javax.servlet.Servlet.javax.servlet包下还提供了一个名为GenericServlet的Servlet实现类,该类是一个辅助类。
以便可以更加方便的创建一个Servlet。不过由于大部分的Servlet都运行在Http的环境中,因此就派生出来了一个javax.servlet.http.HttpServlet的子类更加实用。注意,HttpServlet也是GenericServlet的子类。
emmmmm。。。。。。

一定很枯燥吧,但是没有办法,这些干货就是这样,学技术的话还是要耐得住性子。好了,下一篇博客给大家用Servlet写一个小Demo,希望能缓解一下大家的枯燥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值