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代码 ...
随机推荐
- android App使用新浪微博sdk的使用总结
问题1:注册app的key 问题2:在微博开放平台,我的应用中心中,设置应用的基本信息的时候其中有一项,是设置你的应用的签名,签名是需要在安卓设备上安装一个生成签名的app(这个app界面很丑,这点我 ...
- C++11中自定义range
python中的range功能非常好用 for i in range(100): print(i) 现在利用C++11的基于范围的for循环特性实现C++中的range功能 class range { ...
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- less入门
less入门 安装 首先安装node,执行命令 node install -g less安装完成后可以在任意窗口中使用lessc命令,将.less文件编译成css文件. 变量 可以像其他语言一样声明变 ...
- Sality.m分析
Sality.m分析 0x1.样本概述 FILE_A MD5:1C9A0E01C6033801AFC5A12DE1CC5BDC FILE_B MD5:4B6B70F4A199CF3EAC1554B08 ...
- oracle 关于null值排序
在oracle中根据字段来desc排序的话null值可能会在数据的最前面.然而有时候我们查看数据的时候并不希望能够在前面看到这些null值的排序数据. 因此我查了一下: 1.排序的时候运用nvl(). ...
- ajax获取json数据 for select2
json数据“a.json” [ { "id": "1", "text": "张三" }, { "id&quo ...
- vmare centos 6.8 minimal 无法上网
主机:win7 工具:vmare 11.0.0 系统:http://mirrors.163.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.i ...
- java正则表达式获得html字符串中<img src>的src中的url地址
/** * 得到网页中图片的地址 */ public static Set<String> getImgStr(String htmlStr) { Set<String> pi ...
- MFC2016.6.8
1.theApp extern声明之后不可以使用?可以用,只是需要extern之后的类名和类名称写对,不要犯得低级错误.2.怎样取出列表控件中的第某列的值?GetItemText(); CListCt ...