Servlet 使用介绍(2)
说明
本篇由于介绍Servlet容器回传请求方法service(ServletRequest req, ServletResponse res);传入参数用户请求参数request和请求返回参数response的介绍。
request和response
Servlet-api.jar 中定义了两个基本的接口用于处理用户请求处理(ServletRequest)和用户响应返回(ServletResponse)。同时,对应的javax.servlet.http中对其进行扩展,针对该接口重定义了两个对应的接口:HttpServletRequest和HttpServletResponse,这里主要通过源码介绍其基本的用法,后面会通过示例对其进行扩展演示使用方法。
- 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的源码,主要是获取请求参数和输入流。
- 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来处理。
Servlet 使用介绍(2)的更多相关文章
- servlet简单介绍
什么是Servlet? servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能.尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服 ...
- Servlet过滤器介绍之原理分析
zhangjunhd 的BLOG 写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...
- Introducation of Servlet filter(servlet过滤器介绍 )
本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换 ...
- Servlet 使用介绍(1)
说明 本篇介绍java web中比较重要的一个技术:servlet.servlet是一种对用户请求动态响应的一个技术,是java web的核心一环.对于一般服务性质的纯后台服务应用而言,或许整个应用是 ...
- 10.Servlet简单介绍
1.什么是Servlet * Servlet是javaweb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet种通常需要: ...
- J2EE的13个规范之(三) Servlet简单介绍
Servlet是一种server端脚本,它是一个特殊的Java类,继承自HttpServlet.开发中主要用于处理和响应client的请求. Servlet在容器中执行,事实上例的和销毁创建由容器进行 ...
- Servlet基本介绍和使用
基本概念 Servlet又称为Java Servlet是一个基于java技术的web组件,运行在服务器端,用于生成动态的内容.Servlet是平台独立的java类,编写一个Servlet实际上就是按照 ...
- Servlet 简单介绍
来源于菜鸟教程http://www.runoob.com/servlet/servlet-intro.html Servlet 简介 Servlet 是什么? Servlet(Server Apple ...
- 一、动态网络编程的概念 二、Tomcat服务器搭建 三、Servlet组件介绍
一.动态网络编程的概念 动态网页:结合了HTML以外的高级程序编程语言和数据库技术生成的页面. 动态网页编程技术: ASP,PHP,JSP HTTP协议:规范浏览器和服务器之间通信的数据格式. 浏览器 ...
随机推荐
- IE浏览器下载文件保存时提示:“你没有权限在此位置中保存文件”解决办法
E浏览器下载文件保存时提示 解决办法: 1.Win + R,打开运行命令,输入gpedit.msc,如图所示 2.打开计算机本地组策略编辑器:选择计算机配置-windows设置-安全设置-本地策略-安 ...
- 缓存keep-alive
keep-alive缓存 如果没有缓存,每点击一次导航,内容区就会创建一个组件,该组件会经历整个生命周期,每点击一次,就会创建一个组件,比较浪费性能,这时,我们就要考虑到是否能将点击过的已创建的组件进 ...
- 爬取b站互动视频信息
首先分辨视频是不是互动视频可以看 https://api.bilibili.com/x/player.so?id=cid:1&aid=89017 这个api返回的xml中的 <inter ...
- IT兄弟连 HTML5教程 使用盒子模型的浮动布局
虽然使用绝对定位可以实现页面布局,但由于调整某个盒子模型时其他盒子模型的位置并不会跟着改变,所以并不是布局的首选方式.而使用浮动的盒子模型可以向左或向右移动,直到它的外边缘碰到包含它的盒子模型边框或另 ...
- Flutter - flutter desktop embedding / flutter 桌面支持
2019年5月9日,随着谷歌在IO19宣布Flutter支持Web平台,就标志着Flutter已经全面支持所有平台(移动.网页.桌面.嵌入式). 现编一个跨平台小段子: 微软Xarmarin:喵喵喵? ...
- 30分钟连接树莓派到微软云 Azure IoT Hub,并将数据进行可视化
更多内容,关注公众号: 树莓派是很多动手达人必备的小玩具,本节内容,让我们拿出树莓派,在30分钟内,将树莓派连接到微软云Azure的IoT Hub,然后将温湿度曲线可视化.(本节内容完整视频在文章末尾 ...
- Consul初探-集成ocelot
前言 由于 Consul 的高可用性.丰富的API.友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的 ...
- WPF无边框可拖动窗体
下面主要记录下创建无边框窗体,并且可以拖动.这种窗体主要用于弹出小窗体时. <Window x:Class="WpfApplication1.MainWindow" xmln ...
- 爬虫(四):requests模块
1. requests模块 1.1 requests简介 requests 是一个功能强大.简单易用的 HTTP 请求库,比起之前用到的urllib模块,requests模块的api更加便捷.(本质就 ...
- MyBatis框架之第一篇
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.201 ...