servlet基础(2)

 

javax.servlet.Servlet 接口

1所有的servlet类都必须实现servlet接口

2.servlet接口中定义了5个方法。其中有3个方法由servlet容器在servlet生命周期的不同阶段调用,另外两个方法可以在在代码中调用。

servlet接口中的5个方法

方法名作用调用时间
init(ServletConfig config)初始化servlet容器创建好servlet对象后调用
service(ServletRequest request,ServletResponse response)响应客户端请求容器收到servlet请求时调用
destroy()释放servlet对象占用的资源当servlet对象结束生命周期时调用
getServletConfig()返回一个servletConfig对象。这个对象中包含servlet的初始化参数信息 
getServletInfo()返回一个字符转,该字符串中包括了servlet的创建者、版本和版权等信息。 

servlet接口有两个实现类,分别是HttpServlet和GenericServlet。HttpServlet是GenericServlet的子类。

GenericServlet抽象类

(1)GenericServlet类实现了Servlet接口和ServletConfig接口。

(2)GenericServlet类实现了Servlet中的init(ServletConfig config)方法。这个实现使GenericServlet对象和ServletConfig对象关联。

(3)GenericServlet类除了实现Servlet中的init(ServletConfig config)方法外。还定义了不带参数的init()方法。如果GnericServlet类的子类想覆盖GnericServlet的初始化行为,有两种方法:

(3.1)覆盖父类不带参数的init()方法

public void inint(){

//子类自己的初始化行为

}

(3.2)覆盖父类带参数的init(ServletConfig config)方法。如果想当前servlet对象和ServletConfig对象关联,要在该覆盖方法中调用super.init(config)

public void init(ServletConfig config){

super.init(config);

//子类自己的初始化行为

}

HttpServlet抽象类

(1)HttpServlet类为servlet接口提供了与HTTP协议相关的通用实现。在java web应用中,自定义的servlet类一般都扩展HttpServlet类。

(2)HttpServlet针对各种请求方式(GET/POST/PUT/DELETE)都提供了相应的服务方法。

(3)HttpServlet实现了Servlet接口的service方法,其实service方法中调用的就是(2)。先通过req.getMethod()判断是哪种请求,再调用相应的实现。

(4)HttpServlet的源码中对各种请求的实现都是返回一个错误(400或405)。所以需要HttpServlet的子类根绝特定请求覆盖父类特定的方法。

(4.1)方法权限应该设置为public.使servlet容器能被访问到

(4.2)如果客户端按照doGet或者doPost方法请求servlet,并且在这两种方法下servlet提供相同的服务,那么可以在servlet中从新实现doGet方法;并且让doPost调用doGet.

public class HelloServlet extends HttpServlet{

public void doPost(HttpServletRequest req,HttpServletResponse resp)throws Exception{

doGet(req,resp);

}

public void doGet(HttpServletRequest req,HttpServletResponse resp)throws Exception{

//提供具体的实现代码

}

}

ServletRequst & HttpServletRequst

 HttpServletRequest接口是ServletRequest的子接口。

当servlet容器接受到客户端要求访问特定的servlet时,容器先解析客户端的原始请求数据,把他包装成一个servletRequest对象,当容器调用servlet的service方法时,就把servletRequest当做参数传递进去。

servletRequest用于读取客户端请求数据的方法

方法名作用
getContentLength()返回请求正文的长度,如果长度未知,返回-1.
getContentType()获得请求正文的MIME类型。如果正文类型未知,返回Null
getInputStream()返回用于读取请求正文的输入流
getLocalAddr()返回服务器端的IP地址
getLocalName()返回服务器端的主机名
getLocalPort()返回服务器端的FTP端口号
getParameter(String name)根据参数名返回参数值
getProtocol()返回客户端和服务器端通信所用的协议名称和版本号
getReader()返回用于读取字符串形式的请求正文的BufferReader对象
getRemoteAddr()返回客户端IP地址
getRemoteHost()返回客户端主机名
getRemotePort()返回客户端的FTP端口号
setAttribute(String naem,Object obj)在请求范围内保存属性
getAttribute(String name)根据属性名返回请求范围内的属性值
removeAttribute(String name)删除请求范围内的一个属性

HttpServletRequest用于读取HTTP请求数据的方法

方法名作用
getContextPath()返回客户端请求访问的web应用的URL入口。eg:http://loahost:8080/test/info
getHeader(String name)返回http请求头部的特定项。
getCookies()返回http请求中所有的Cookies
getHeaderNames()返回http请求头部的所有项
getMethod()返回Http请求方式
getRequestURI()返回http请求的头部的第一行中的URL    eg:http://loahost:8080/test/info
getQueryString()返回Http请求中的查询字符串,即URL中“?”后面的内容

servletResponse & httpServletResponse

servlet通过servletResponse 对象来生成响应结果。

httpServletResponse接口是servletResponse的子接口。

servletResponse接口中与生成响应结果相关的方法

方法名作用
setCharacterEnconding(String charset)设置响应正文的字符编码,默认编码是ISO-8859-1
setContentLength(int len)设置响应正文的长度
setContentType(String type)设置响应正文的MIME类型
getCharacterEncoding()返回响应正文的字符编码
getContentType()返回响应正文的MIME类型
setBufferSize(int len)设置用于存放响应正文的缓冲区大小
getBufferSIze()返回用于存放响应正文的缓冲区大小
reset()清空缓冲区的正文数据。包括清空响应状态吗和I响应头
resetBuffer()只是清空缓冲区内的正文数据,不清空响应状态码和响应头
flushBuffer()强制性的把缓冲区内的响应正文数据发送到客户端
isCommitted()返回值是Boolean类型。如果是true.表示缓冲区内的数据已经发送到客户端
getOutputStream()返回一个ServletOutputStream对象。用于输出二进制形式的响应正文
getWriter()返回一个PrintWriter对象.用来输出字符串形式的响应正文

注:ServletResponse中响应正文的默认MIME类型是text/plain,即纯文本类型。

HttpServletResponse中响应正文的默认MIME类型是text/html。即HTML文档类型。

为了提高输出效率,ServletOutputSteam和PrintWriter会把响应数据先写到缓冲区里,当缓冲区内的数据被提交给客户后,servlet的isCommitted返回true.

缓冲区的数据提交给客户的3种情况(即数据被发送到客户端):

a:缓冲区数据满了。输出流(ServletOutputStream和PrintWriter)自动提交,并清空缓冲区。

b:servlet调用ServletResponse的flushBuffer()。

c:Servlet调用ServletOutputStream或PrintWriter的flush()或close()方法。

要在数据提交缓冲区前设置响应正文的字符编码,长度,MIME类型等,这样的设置才有效。

HttpServletResponse相关方法

方法名作用
addHeader(String name,String value)向HTTP响应头中加入一项内容
sendError(int sc)向客户端发送一个代表特定错误的状态码
sendError(int sc,String msg)向客户端发送一个代表特定错误的状态码并且发送具体的错误信息
setHeader(String name,String value)向HTTP响应头中加入一项内容.如果已有这项内容,则原先设置的内容被覆盖。
setStatus(int sc)设置HTTP响应状态码
addcookie(Cookie cookie)向HTTP响应中加入一个cookie

所以设置HTTP响应正文的MIME类型和字符编码有以下3种方式:

a:response.setContentType("text/html;charset=GB2312");

b:response.setContenType("text/html");

    response.setCharacterEncoding("GB2312");

c:response.setHeader("contentType","text/html;charset=GB2312");

ServletConfig接口

ServletConfig对象中包含了servlet初始化参数信息。在web.xml中可以通过配置<init-param>元素来配置servlet初始化参数。

ServletConfig对象还与当前Servlet对象相关联。见GenericServlet接口

方法名作用
getInitParameter(String name)根据初始化参数名返回 初始化参数值
gtInitParameterNames()返回一个Enumeration对象(列举对象),包含了所有初始化参数名
getServletName()返回servlet名字,若web.xml中没有配置,则返回servlet类名
getServletContext()返回ServletContext对象

ServletContext接口

ServletContext是Servlet与Servlet容器之间直接通信的接口。Servlet容器在启动一个web应用的时候,会为他创建一个ServletContext对象。每个web应用都有唯一的ServletContext对象。同一个web应用的所有servlet共用一个ServletContext对象。

ServletContext对象相当于一个web应用的总管家,servlet对象可以通过这个总管家来访问容器中的各种资源。

方法名作用
用于在web应用范围内存取共享数据的方法
setAttribute(String name,Object obj)把一个java对象与一个属性名绑定。并存到ServletContext中。
getAttribute(String name)在servletContext中,通过属性名找到匹配的值
getAttributeNames()返回一个Enumeration对象.这个对象中包含了所有存放在servletContext中属性名
removeAttribute(String name)根据指定的属性名,从ServletContext中删除匹配的属性
访问当前web应用的资源
getContextPath()获得当前web应用的URL入口
getInitPartameter(String name)根据参数名,返回web应用范围内的初始化参数值。web应用范围内的初始化参数值可以在web.xml中,<web-app>根元素下直接定义<context-param>
getInitParameterNames()返回web应用范围内所有的参数名
getServletContextName()返回web应用的名字。即web.xml中<display-name>元素的值
getRequestDispatcher(String path)返回一个用于向其他web组件转发请求的requestDispatcher对象
访问servlet容器中其他的web应用
getContext(String path)根据指定的URL返回当前servlet容器中其他web应用的ServletContext对象。
访问Servlet容器的相关信息
getMajorVersion()返回servlet容器支持的java servlet API的主版本号
getMinorVersion()返回servlet容器支持的java servlet API的次版本号
getServletInfo()返回servlet容器的名字和版本
访问服务器端的文件系统资源
getRealPath(String path)根据虚拟路径返回真实路径
getResource(String path)返回一个映射到参数指定路径的URL
getResourceAsStream(String path)返回一个用于读取参数指定文件的输入流
getMimeType(String file)返回参数指定文件的MIME类型
输出日志
log(String msg)向servlet的文件日志中写日志
log(String msg,java.lang.Throwable throwabe) 向servlet的文件日志中写错误日志,以及异常的堆栈信息。

注:ServletConfig接口中定义了getServletContext()方法。HttpServlet类继承了GenericServlet类。而GenericServlet类实现了ServletConfig接口。因此在HttpServlet类或者GenericServlet及其子类中都可以调用getServletContext()方法获得当前web应用的ServletContext对象。

 

转载于:https://my.oschina.net/u/2482228/blog/714364

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值