16-01-25---Servlet复习笔记(01)
Servlet
ServletAPI中有4个java包
javax.servlet 包含Servlet与Servlet容器之间契约的类和接口
javax.servlet.http 包含HTTP Servlet与 Servlet容器之间契约和类的接口
javax.servlet.annotation 包含对Servlet、Filter、和Listener进行标注的注解。他还为标注元件指定元数据。
javax.servlet.descrptor 包含为Web应用程序配置的信息提供编程是访问的类型。
javax.servlet
interface :
Servlet
ServletRequest (封装当前HTTP请求,以便Servlet的开发者不必解析和操作原始的HTTP数据)
ServletResponse (表示的是用户的HTTP响应,他的作用是使得将响应回传给用户更加容易)
ServletContext
ServletConfig (包含servlet的配置信息)
RequestDispatcher (请求调度)
Filter
子类:
GenericServlet
java的方法签名规则是:与包含该方法的类型不在同一个包中的类型,要使用全名。这个做数据库课设的时候就有体会
init service destory
init 第一次请求Servlet时,Servlet容器就会调用该方法。一般来说,会在该方法里编写一些应用程序初始化的相关代码
在调用这个方法时,Servlet容器会传递一个ServletConfig。一般来说,会将ServletConfig就赋给一个类级变量,以便Servlet类中的其他方法也可以使用这个对象
service 每次请求Servlet时,Servlet容器都会调用这个方法。必须在这个方法里编写要Servlet完成的相关代码。第一次请求Servlet时,Servlet容器会调用init和service方法。对于后续的请求,只会调用service方法
destroy 要销毁Servlet时,Servlet容器才会调用该方法。一般来说,可以在这个方法张编写一些清理资源的相关代码
getServletInfo 返回Servlet的描述。可能返回任意字符串,甚至是null!!!
getServletConfig 返回Servlet容器传给init方法的ServletConfig 但是,为了让getServletConfig返回非null值,你肯定已经为传给init方法的ServletConfig赋给了一个类级变量
必须注意的一点是线程安全,一个应用程序中的所有用户将共用一个Servlet实例,因此不建议使用类级变量,除非他们是只读的。
WebServlet注解类型来声明一个Servlet
urlPatterns属性,这个事可选的,在Servlet中,urlPattern告诉容器,/my模式应该调用这个Servlet。!!注意URL模式必须以一条正斜线开头!!
要编译Servlet,必须将ServletAPI类型放在类路径中。 Tomcat的Servlet-api.jar文件中打包有javax.servlet & javax.servlet.http包的成员。这个jar包就放在Tomcat安装目录的lib目录中
Servlet应用程序必须以特定的目录结构进行部署。
WEB-INF
classes Servlet类和其他的java类必须放在这里。类下方的目录反映了类的包结构。
lib 在这里部署了Servlet应用程序所需的所有jar文件。Servlet API jar文件则不需要部署在这里。
Servlet/JSP应用程序一般会有JSP页面、html文件、图像文件以及其他资源。这些都应该放在应用程序目录下,并且经常放在子目录下。例如,图像文件可以放在image目录下,所有的JSP页面可以放在jsp目录下。
放在应用程序目录下的任何资源,用户都可以通过输入该资源的URL而直接进行访问。如果你希望某个资源可以被Servlet访问,而不能被用户访问,那么应该把它放在WEB-INF目录下。
1.4 ServletRequest
对于每一个HTTP请求,Servlet容器都会创建一个ServletRequest实例,并将它传给Servlet的service方法,ServletRequest封装有关请求的信息。
ServletRequest接口中的方法
public int getContentLength() 返回请求主体中的字节数。如果不知道字节的长度,返回-1
public java.lang.Stirng getContentType() 返回请求主体的MIME类型,如果不知道类型,返回null
public java.lang.String getProtocol() 返回这个HTTP请求的协议名称和版本号
public java.lang.String getParameter(java.lang.String name) 返回指定请求参数的值
getParameter是ServletRequest中最常用的方法,该方法通常用来返回一个HTML表单域的值。
该方法也可以用来获取查询字符串的值
除了getParameter方法外,还有getParameterNames、getParameterMap和getParameterValues来获取表单域的名称和值,以及查询字符串
1.5 ServletResponse
该接口表示一个Servlet的响应,在调用一个Servlet的service方法之前,Servlet容器会首先创建一个ServletResponse,并将它作为第二个参数传给service方法。注意ServletResponse隐藏了将该响应发给浏览器的复杂性
该接口中定义的一个方法是getWrite方法,它返回可以将文本传给客户端的java.io.PrintWriter,在默认情况下,PrintWriter对象采用的ISO-8859-1编码。
在将响应发送给客户端时,通常将它作为HTML发送。还有给个方法用来给浏览器传输数据,getOutPutStream,但是这个方法一般是用来传输二进制数据的。
在发送任何html标签时,应该首先调用setContentType方法来设置响应的内容类型,比如,将text/html作为参数传递,这是告诉浏览器内容类型为html类型。如果没有设置类型,绝大多数浏览器会默认为html形式。
1.6 ServletConfig
在Servlet容器初始化Servlet时,Servlet容器将ServletConfig传给Servlet的init方法。
ServletConfig封装可以通过@WebServlet或者部署描述符传递给Servlet一个配置信息
以这种方式传递的每一条信息都称作初始参数。初始参数都有两部分组成:键和值
为了从一个Servlet内部获取某个初始参数的值,应在由Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParamter方法。
java.util.String getInitParameter(java.lang.String name)
1.7ServletContext
表示Servlet应用程序。每个Web应用程序只有一个context。在分布式环境中,一个应用程序同时部署到多个容器中,并且每台java虚拟机都有一个ServletContext对象
在ServletConfig中调用getServletContext就可以获得ServletContext
有了ServletContext之后,就可以通过共享能通过应用程序的所有信息获得资源的访问信息,促进Web对象的动态注册。前者是通过将一个内部Map中的对象保存在ServletContext中来实现的。保存在ServletContext中的对象称为属性 attribute
1.8GenericServlet
中间过度,现在已经不用了
1.9HTTP Servlet
javax.servlet.http包是Servlet API中的第二个包,其包含了编写Servlet应用程序的类和接口。javax.servlet.http中的许多类型覆盖了javax.servlet中的类型。
javax.servlet.http主要类型
interface
javax.servlet.Servlet
|javax.servlet.GenericServlet
javax.servlet.ServletRequest
|HttpServletRequest
javax.servlet.ServletResponse
|HttpServletResponse
HttpSession
Cookie
1.9.1 HttpServlet
HttpServlet覆盖了GenericServlet中的service方法,并用一下签名添加了另一个service方法:
protected void service(HttpServletRequest request, HttpServletResponse reponse) throws ServletException, java.io.IOException{}
HttpServlet拥有GenericServlet不具有的两个特性
1.不覆盖service方法,而是覆盖doGet、doPost方法,或者两者都覆盖。
2.用HttpServletResponse 和HttpServletRequest 代替 ServletResponse 和 ServletRequest
1.9.2 HttpServletRequest
表示HTTP环境下的Servlet请求,他继承自javax.servlet.ServletRequest。并增加了几个方法
java.lang.String getContextPath() 返回表示请求context的请求URI部分
Cookie[] getCookie() 返回一个Cookie对象数组
java.lang.String getHeader(java.lang.String name) 返回指定HTTP标头的值
java.lang.String getMethod() 返回发出这条请求的HTTP方法名
java.lang.String getQueryString() 返回请求URL中的查询字符串
HttpSession getSession(boolean create) 返回与这个请求有关的session对象,如果没有找到,则创建新的session对象
1.9.3 HttpServletResponse
表示HTTP环境下的Servlet响应
void addCookie(Cookie cookie) 给这个响应添加cookie
void addHeader(java.lang.String name, java.lang.String value) 给这个响应对象添加标头
void sendRedirect(java.lang.String location) 发送响应代号,将浏览器重定向到指定位置
1.10 处理HTML表单
每个Web应用程序几乎都会有一个或多个html表单,用来接受用户输入。你何以轻松的将一个html表单从servlet发送到浏览器。当用户提交表单时,在表单元素中,输入的值将会被当做请求参数发送到浏览器。
html输入域(文本域、隐藏域、密码域)或者文本域的值被当做一个字符串发送到服务器。对于空白的输入域或者文本域将发送一条空白字符串。因此,带有一个输入域名称的ServletRequest.getParameter将永远不会返回null
html的select元素还会给标头发送一个字符串,但是如果没有select元素中的任何选项,那么将会发送所显示的选项值。
对于一个带有多个值得选择元素(即允许多个选项的select元素,用 <select multiple> 表示)是发送一个字符串数组,并且必须由ServletRequest.getParameterValues进行处理
复选框比较特殊,被选中的复选框将字符串“on”发送到服务器,没有被选中的复选框将不发送任何内容到服务器,并且ServletRequest.getParameter(fieldname) 返回null
单选按钮将被选中的值发送到服务器,如果没有选中任何内容,将不发送任何内容,并且ServletRequest.getParameter(fieldname)返回null
如果一个表单中包含多个同名的输入元素,那么所有的值都会被提交。必须用ServletRequest.getParameterValues来获取他们。ServletRequest.getParameter将只返回最后一个值
1.11使用部署描述符
部署描述符总是命名为web.xml,并放在WEB-INF目录下。
部署描述符有注解没有的元素
另一个好处是,如果需要修改配置,不需要重新编译Servlet类
16-01-25---Servlet复习笔记(01)的更多相关文章
- Servlet&JSP复习笔记 01
1. Servlet 含义:服务器端的小程序,它只是服务器中的一部分. Servlet Little 标准:Sun公司制定的一种用来扩展Web服务器功能的组件规范. a. 扩展web服务器功能:扩展w ...
- mybatis 复习笔记01
本文内容转自传智播客笔记 1. 问题总结 1). 数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能. 设想:使用数据库连接池管理数据库连 ...
- Spring MVC 复习笔记01
1. springmvc框架 1.1 什么是springmvc spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合.spring mvc是一个 ...
- Servlet学习笔记01——什么是servlet?
1.什么是Servlet? sun公司制订的一种用来扩展web服务器功能的组件规范. (1)扩展web服务器功能 早期的web服务器(apache web server,iis) 只能处理静态资源的请 ...
- Python复习笔记01
(1)计算机常识 计算机:硬件(运算器,控制器,存储器,输入设备,输出设备)软件 (系统软件, 应用软件) 二进制 整数存储 文件单 位换算 1Byte = 8bit 1KB = 1024Byte 1 ...
- Spring 复习笔记01
Spring 框架 1. core:整个Spring框架构建在Core核心模块上,它是整个框架的的基础. 2. AOP:AOP模块提供了一个轻便但功能强大强大的AOP框架,让我们可以以AOP的形式增强 ...
- JAVA复习笔记01
学了一学期的JAVA,临近期末,整理了一些JAVA考试中需要掌握的点,记录在这里. 1.编译多个JAVA文件,运行程序 (1) javac .java .java java Main (2) java ...
- servlet 复习笔记
总的说来Servlet的配置包括Servlet的名字,Servlet的类(如果是JSP,就指定JSP文件),初始化参数,启动装入的优先级,servlet的映射,运行的安全设置. 下面举例介绍其配置: ...
- Java:并发笔记-01
Java:并发笔记-01 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 1. 进程与线程 本章内容 进程和线程的概念 并行和并发的概念 线程基本应用 1.1 ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】
转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...
随机推荐
- 在XP上运行IIS5.1新建站点
系统问题,XP下IIS5.1不能直接新建站点,因为内核限制只能同时运行一个站点,要想新建站点,必须把当前站点停掉,然后用adsutil.vbs脚本创建,脚本在C:\Inetpub\AdminScrip ...
- bzoj4692: Beautiful Spacing
先二分答案后dp 设\(su[n]\)为\(\sum_{1}^{n}xi[i]\) 设\(f[n]\)为1时表示第n个单次能做某一行的结尾,且之前的空格满足二分出来的答案. 考虑怎样的\(f[i]\) ...
- Apache 配置多站点访问「为项目分配二级域名」
一级域名(baidu.com)也叫作顶级域名,注册一级域名是需要付费的. 而二级域名(image.baidu.com)是一级域名的延伸,所以只要购买了一级域名,二级域名是可以任意配置的. 其实(www ...
- Web Config配置备忘
数据压缩 <httpCompression>节点用于配置静态压缩和动态压缩,<urlCompression>则用于开关 http压缩 <urlCompression do ...
- CSS3中的px,em,rem,vh,vw辨析
1.px:像素,精确显示 2.em:继承父类字体的大小,相当于"倍",如:浏览器默认字体大小为16px=1em,始终按照div继承来的字体大小显示,进场用于移动端 em换算工具:h ...
- Install PIL with Jpeg support on Raspbian Jessie
参考: https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=79379 在 树莓派(Raspbian Jessie) 上安装djan ...
- lanmp之一 (动静分离)
一.lanmp--需求篇 1. 准备两台centos 6,其中一台机器跑mysql,另外一台机器跑apache,nginx + php 2. 同时安装apache和nginx,其中nginx启动80端 ...
- js下载项目中的文件
项目中有一个连接是下载视频插件,放到服务器上,不能io输出,所以指定地址直接下载 <div id="objInfo"> <jsp:include page=&qu ...
- 【转载】Shell判断字符串包含关系的几种方法
http://www.cnblogs.com/ginsonwang/p/5525340.html 下面是直接copy的内容: (本来是不打算copy的,但是每次用到或看的时候都要跳转,感觉挺麻烦的.就 ...
- Android-RelativeLayout(相对布局)、LinearLayout(线性布局)
RelativeLayout(相对布局):按照各子元素之间的位置关系完成布局. 定位:android:layout_above="@id/xxx" --将控件置于给定ID控件之上 ...