说明

本篇由于介绍Servlet容器回传请求方法service(ServletRequest req, ServletResponse res);传入参数用户请求参数request和请求返回参数response的介绍。

request和response

Servlet-api.jar 中定义了两个基本的接口用于处理用户请求处理(ServletRequest)和用户响应返回(ServletResponse)。同时,对应的javax.servlet.http中对其进行扩展,针对该接口重定义了两个对应的接口:HttpServletRequest和HttpServletResponse,这里主要通过源码介绍其基本的用法,后面会通过示例对其进行扩展演示使用方法。

  1. Request

用户请求,即用户对服务端发起的用户请求数据,servlet-api.jar中提供了两个接口:一个通用原始的ServletRequest,一个针对http协议的接口HttpServletRequest(继承自ServletRequest).

如下,为ServletRequest的源码:


package javax.servlet; import java.io.*;
import java.util.*; public interface ServletRequest { /**
*通过参数名获取value,若参数名不存在,返回null.
* 获取的attribute可能是servlet设置的客户端信息,也可以是
*通过setAttribute设置的attribute.
*
*/
public Object getAttribute(String name); /**
*attribute的所有属性名集合.
*/
public Enumeration<String> getAttributeNames(); /**
*返回正文中的字串编码
*/
public String getCharacterEncoding(); public void setCharacterEncoding(String env) throws UnsupportedEncodingException; /**
*返回正文的长度,若请求失败(未知),返回-1.
*/
public int getContentLength(); /**
*获取正文MIME类型,获取失败返回null.
*/
public String getContentType(); /**
*获取输入流,读取请求内容,ServletInputStream继承了InputStream方法,添加按行读取
*方法
*/
public ServletInputStream getInputStream() throws IOException; /**
*返回请求的参数通过给定的name(单个数值时),返回String或者null.
*按顺序匹配,匹配首个name.
*/
public String getParameter(String name); /**
*返回Enumeration<String>对象,空的或者多个String集合.
*/
public Enumeration<String> getParameterNames(); public String[] getParameterValues(String name); public Map<String, String[]> getParameterMap(); /**
*返回请求协议
*/
public String getProtocol(); /**
*请求scheme.
*/
public String getScheme(); /**
*获取服务器的host名
*/
public String getServerName(); /**
*请求服务端监听端口
*/
public int getServerPort(); /**
*获取一个BufferedReader输入流
*/
public BufferedReader getReader() throws IOException; /**
*返回客户端的ip地址
*/
public String getRemoteAddr(); /**
*返回客户端的主机名
*/
public String getRemoteHost(); public void setAttribute(String name, Object o); public void removeAttribute(String name); /**
*返回客户端的Locale环境
*/
public Locale getLocale(); /**
*默认返回Local的Enumeration.
*/
public Enumeration<Locale> getLocales(); /**
*是否做了安全策略(HTTPS)
*/
public boolean isSecure(); /**
*获取一个RequestDispatcher对象,可用来做跳转使用.
*/
public RequestDispatcher getRequestDispatcher(String path); /**
* @deprecated As of Version 2.1 of the Java Servlet API,
* use {@link ServletContext#getRealPath} instead.
*/
public String getRealPath(String path); /**
*
* @since Servlet 2.4
*/
public int getRemotePort(); /**
*
* @since Servlet 2.4
*/
public String getLocalName(); /**
*
* @since Servlet 2.4
*
*/
public String getLocalAddr(); /**
*
* @since Servlet 2.4
*/
public int getLocalPort(); /**
*
* @since Servlet 3.0
*/
public ServletContext getServletContext(); /**
*
* @since Servlet 3.0
*/
public AsyncContext startAsync() throws IllegalStateException; /**
*
* @since Servlet 3.0
*/
public AsyncContext startAsync(ServletRequest servletRequest,
ServletResponse servletResponse)
throws IllegalStateException; /**
*
* @since Servlet 3.0
*/
public boolean isAsyncStarted(); /**
*
* @since Servlet 3.0
*/
public boolean isAsyncSupported(); /**
*
* @since Servlet 3.0
*/
public AsyncContext getAsyncContext(); /**
*
* @since Servlet 3.0
*/
public DispatcherType getDispatcherType();
}

如上,为ServletRequest的源码,主要是获取请求参数和输入流。

  1. Response

用户请求响应,响应返回用户请求数据,和Request类似,主要是获取客户端和服务端基本信息以及获取一个输出流用于返回响应数据。源码如下:

public interface ServletResponse {

    public String getCharacterEncoding();

    /**
* @since Servlet 2.4
*/ public String getContentType(); /**
*获取输出流ServletOutputStream
*/
public ServletOutputStream getOutputStream() throws IOException; /**
*获取输出流PrintWriter
*/
public PrintWriter getWriter() throws IOException; /**
*
* @since Servlet 2.4
*
*/
public void setCharacterEncoding(String charset); public void setContentLength(int len); public void setContentType(String type); public void setBufferSize(int size); public int getBufferSize(); public void flushBuffer() throws IOException; /**
*
* @since Servlet 2.3
*/ public void resetBuffer(); public boolean isCommitted(); public void reset(); public void setLocale(Locale loc); public Locale getLocale(); }

返回较为简单,主要是通过输出流,将需要返回的数据写入即可。servlet目前貌似只支持htpp协议,Tomcat的对应连接器配置如下:

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

Tomcat会对于请求的数据格式进行验证,若非http格式数据会禁止访问,返回404。因此一般对于servlet的创建需要继承HttpServlet来处理。

Enjoytoday,EnjoyCoding

Servlet 使用介绍(2)的更多相关文章

  1. servlet简单介绍

    什么是Servlet? servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能.尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服 ...

  2. Servlet过滤器介绍之原理分析

    zhangjunhd 的BLOG     写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...

  3. Introducation of Servlet filter(servlet过滤器介绍 )

    本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换 ...

  4. Servlet 使用介绍(1)

    说明 本篇介绍java web中比较重要的一个技术:servlet.servlet是一种对用户请求动态响应的一个技术,是java web的核心一环.对于一般服务性质的纯后台服务应用而言,或许整个应用是 ...

  5. 10.Servlet简单介绍

    1.什么是Servlet * Servlet是javaweb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet种通常需要: ...

  6. J2EE的13个规范之(三) Servlet简单介绍

    Servlet是一种server端脚本,它是一个特殊的Java类,继承自HttpServlet.开发中主要用于处理和响应client的请求. Servlet在容器中执行,事实上例的和销毁创建由容器进行 ...

  7. Servlet基本介绍和使用

    基本概念 Servlet又称为Java Servlet是一个基于java技术的web组件,运行在服务器端,用于生成动态的内容.Servlet是平台独立的java类,编写一个Servlet实际上就是按照 ...

  8. Servlet 简单介绍

    来源于菜鸟教程http://www.runoob.com/servlet/servlet-intro.html Servlet 简介 Servlet 是什么? Servlet(Server Apple ...

  9. 一、动态网络编程的概念 二、Tomcat服务器搭建 三、Servlet组件介绍

    一.动态网络编程的概念 动态网页:结合了HTML以外的高级程序编程语言和数据库技术生成的页面. 动态网页编程技术: ASP,PHP,JSP HTTP协议:规范浏览器和服务器之间通信的数据格式. 浏览器 ...

随机推荐

  1. dataguard ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

    错误的意思是listener 不知道连接解析器中的请求服务,这里要说静态监听和动态监听了动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,servi ...

  2. mysql中msvcr120.dll文件丢失问题

    安装VC++2013 若是以上方法不能解决,需要下载安装VC++2013,这是微软官网的链接 https://www.microsoft.com/zh-cn/download/confirmation ...

  3. Linux CentOS 7 搭建 Tomcat 8 服务器

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...

  4. CSDN不限积分代下载,知网、万方、sci、IEEE论文代下载,智慧树、超星尔雅刷课

    下载内容: 1.CSDN不限积分代下载. 2.知网.万方.sci.IEEE论文代下载. 3.超星尔雅,智慧树刷课. 注:由于本人手抖买一个CSDN会员,想挽回一点损失,所以创立了一个下载群,绝对不是骗 ...

  5. 在IIS中部署.net core应用

    在IIS中部署 .NET Core应用 对于熟悉IIS的程序员来说,将 .NET Core Web应用部署在IIS中,无疑是方便统一管理的事情.网上给出很多如何在IIS中部署 .NET Core 应用 ...

  6. Leetcode823 : 因子二叉树问题

    问题描述 给定一个数组,数组中的数不重复,且均大于1.要求使用数组中的数构建二叉树,每个数字可以被重复使用,除了叶子节点,每个节点的值等于其子节点的乘积,求构建二叉树的数量,返回的结果mod 10** ...

  7. 【.net core 入坑】.net core 3.0 报错:在 FETCH 语句中选项 NEXT 的用法无效

    目录 1.事故现场: 2.分析及解决方案: 1.事故现场: 在项目中使用.net core 3.0,在EF链接sqlserver2008,在程序中使用了分页用的skip和take,程序报错: 在 FE ...

  8. Beeline里面执行hive脚本 函数nvl2()与replace()报错

    Beeline里面执行hive脚本函数nvl2()与replace()报错 写脚本的时候是在impala里面执行的,都正常,但是转换为调度的时候是在beeline里面执行的 就会有问题了. 详情如下: ...

  9. 如何安装 IntelliJ IDEA 最新版本——详细教程

    IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手.代码自动提示.代码重构.代码版本管理(Git.SVN.Maven).单元测试.代码分析等方面 ...

  10. 微信小程序的入门

    1.申请账号     官网:https://mp.weixin.qq.com/  2.开发工具      为了帮助开发者简单和高效地开发和调试微信小程序,推出了小程序开发者工具,集成了公众号网页调试和 ...