Servlet
1、背景知识
常用的Web服务器
IIS(应用服务器);Apache(web服务器:静态页面处理);Tomcat(jsp-servlet容器)
通常的动态网页技术
CGI(Common GateWay Interface)
API常用的有(NSAPI ISAPI)
ASP(Active Server Page)
PHP(Personal Home Page)-----(LAMP)
JSP/Servlet(Java Server Page)
2、Tomcat配置
系统变量里添加JAVA_HOME 值为 C:\Program Files\Java\jdk1.6.0_13(jdk安装路径)
Tomcat 默认端口为8080 -------修改 conf---server.xml---修改(8080)端口号
Tomcat(自动加载修改的内容)修改conf-----context.xml 下<Context> 改为<Context reloadable="true">
Web.xml-------MIME(Multipurpos Internet Mail Extension) 指明白传送内容的格式(最早用于邮件附件)
conf/server.xml 服务器的主配置文件
conf/web.xml定义所有Web应用的配置(缺省的Servlet定义和MIME类型定义)
conf/tomcat-user.xml 定义了tomcat用户的信息(用于权限与安全)
3、HTTP协议基础
HTTP(Hypertext Transfer Protocol, 超文本传输协议) ;
HTTP是以明文方式发送数据的
用于从WWW服务器传输超文本到本地浏览器的传输协议。
HTTP协议是以TCP/IP为基础的高层协议。
GET /latest.html HTTP/1.1
Host: www.foo.com
Content-Type: text/html
…
{空行}
POST /servlet/serv HTTP/1.1
Host: www.foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
username=billgates&password=hehe
服务器端返回给客户端的内容
HTTP/1.1 200 OK //200 “OK” 403” Forbidden” 404” Not Found” 500” Internal Server Error ”
Date: Fri,31 Dec 2003 10:23:34 GMT
Content-Type: text/html
Content-length: 280
<html>
……
</html>
4、Web Application的概念
Web Application Name
WEB-INF(web-information)(必须的目录)
web.xml (必须有,该web app的配置文件)
lib (该web app用到的库文件)
classes(存放编译好的servlet)
META-INF 存放该web app的上下文信息,符合J2EE标准
页面文件(可以放在文件夹中)
Web Application可以直接放在webapp下面也可以通过配置文件指定到其他目录 <host>里面
<Context path=“/虚拟路径名“ docBase=”目录位置" debug="0" reloadable="true"/>
5、Servlet简介
Servlet是服务器小应用程序;用来完成B/S架构下,客户端请求的响应处理
平台独立,性能优良,能以线程方式运行;Servlet API为Servlet提供了统一的编程接口
Servlet一般在容器中运行常见的Servlet容器:Tomcat ;Jetty / Resin
6、Servlet示例 HelloWorldServlet.java
(1)编写一个生成纯文本的简单的Servlet类。
(2)在web.xml的配置
<servlet>
<servlet-name>myfirsrservlet</servlet-name> //连接名字
<servlet-class>HelloWorldServlet</servlet-class> //运行类的类名(放在包中的类要把名字写全如com..bjsxt.servlet.HelloWorldServelet)
</servlet>
<servlet-mapping>
<servlet-name>myfirsrservlet</servlet-name> //连接名字
<url-pattern>/HelloWorldServlet</url-pattern> //显示的路径(/包括webapp的根路径)
</servlet-mapping>
7、Servlet 生命周期
(1)加载 ClassLoader
(2)实例化 new
(3)初始化 init(ServletConfig)
(4)处理请求 service doGet doPost
(5)退出服务 destroy()
只有一个对象
API中的过程:
init() //只执行一次, 第一次初始化的时候
public void init(ServletConfig config) throws ServletException
service();public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException
destroy() //webapp 退出的时候
public void destroy()
Init():init(servletconfig config){this.config = config ;init();}
重写必须得super.init(config),不然不能使用this.getServletConfig;不能用getInitParameter();我们只需要重写init();
8、Servlet编程接口
GenericServlet是所有Servlet的鼻祖
用于HTTP的Servlet编程都通过继承 javax.servlet.http.HttpServlet 实现
请求处理方法:(分别对应http协议的7种请求)
1、doGet 响应Get请求,常用
2、doPost 响应Post请求,常用
3、doPut http1.1协议服务器上放东西
4、doDelete http1.1协议服务器上删东西
5、doHead 仅响应Get请求的头部。
6、doOptions http1.1协议对webserver进行配置
7、doTracehttp1.1协议 进行跟踪做调试用
实例的个数:在非分布的情况下,通常一个Servlet在服务器中有一个实例
9、示例:使用doGet和doPost方法处理请求
要求:编写一个带有doGet和doPost方法的Servlet
目的:掌握基本的Servlet请求处理技术
要点:
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException
获取表单信息
通过HttpServletRequest的getParameter()方法来获得客户端传递过来的数据
getParameter()方法返回一个字符串类型的值
getParameterNames()返回Enumeration类型的值,getParameterValues()返回一个字符串数组
10、 HTTP的状态处理:HTTP是无状态
有状态:Server知道Client以前在我这儿做过什么事儿
11、处理Cookie (ctrl+N 浏览器打开一个新窗口)
Http协议的无连接性要求出现一种保存C/S间状态的机制
Cookie:保存到客户端的一个文本文件,与特定客户相关
Cookie以“名-值”对的形式保存数据
创建Cookie:new Cookie(name,value)
可以使用Cookie 的setXXX方法来设定一些相应的值setName(String name)/getName()
setValue(String value)/getValue() ;setMaxAge(int age)/getMaxAge()
利用HttpServletResponse的addCookie(Cookie)方法将它设置到客户端
利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie,返回一个Cookie数组:
1:服务器可以向客户端写内容
2:只能是文本内容
3:客户端可以阻止服务器写入
4:只能拿自己webapp写入的东西
5:Cookie分为两种 属于窗口/子窗口(放在内存中的);属于文本(有生命周期的)
6:一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到 (路径 = URL)(路径 != 真实文件路径)
12、会话跟踪
Session(保存在服务器端,与客户端的浏览器连在一起)在某段时间一连串客户端与服务器端的“交易”
在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234
可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。
通过HttpSession来读写Session
Session实现的两种方式: 一、cookie ;二 、URL重写
如果浏览器支持Cookie, 创建Session的时候会把SessionID保存在Cookie里
如果不支持Cookie, 必须自己编程使用URL重写的方式实现Session
response.encodeURL() 转码; URL后面加入SessionId
Session不象Cookie拥有路径访问的问题
同一个application下的servlet/jsp可以共享同一个session, 前提是同一个客户端窗口.
13、HttpServletRequest中的Session管理方法
getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同也可能不同。
getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession
isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true
isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true
isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false
HttpSession的常用方法
getAttributeNames()
getAttribute()
getCreationTime()
getId()
getMaxInactiveInterval()
invalidate()
isNew()
setAttribute()
setMaxInactivateInterval()
14、Session总结
服务器的一块内存(存key-value);和客户端窗口对应(子窗口)(独一无二)
客户端和服务器有对应的SessionID
客户端向服务器端发送SessionID的时候两种方式:cookie(内存cookie);rewriten URL
浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie
15、Application
用于保存整个WebApplication的生命周期内都可以访问的数据
在API中表现为ServletContext----与webapplication对应
通过HttpServlet的getServletContext方法可以拿到ServletContext application =this.getServletContext();
通过ServletContext的 get / setAttribute方法取得/设置相关属性
ServletContext application =this.getServletContext();
Integer accessCount=(Integer)application.getAttribute("accessCount");
if(accessCount == null){accessCount = new Integer(0);
}else{accessCount = new Integer(accessCount.intValue()+1);}
application.setAttribute("accessCount", accessCount);
16、Servlet中的请求转发
RequestDispatcher接口对象允许将请求转发到其他服务器资源
通过RequestDispatcher的forward(HttpServletRequest,HttpServletResponse)方法可以将请求转发
通过ServletContext的getRequestDispatcher(String url)方法来获得RequestDispatcher对象,并且指定转发的目标url资源
可以通过HttpServletRequest的setAttribute(String name,String value)来设置需要传递的参数,然后在代理servlet中就可以使用HttpServerRequest的getAttribute(String name)来获得对应的值
17、数据库处理以及在Servlet中使用Bean
狭义javabean = 符合Sun JavaBean标准的类
广义javabean = 普通java类;在Servlet中使用Bean和在通常程序中使用Bean类似;
属性名称第一个字母必须小写,一般private,比如:private productId
一般具有getters and setters;要具有一个参数为空的构造方法
但Bean不应具有GUI表现;一般是用来实现某一业务逻辑或取得特定结果
18、如何掌握Servlet
创建Servlet
从HttpServlet继承
重写doGet / doPost方法
在web.xml中配置
servlet生命周期
Cookie / Session / Application的概念
请求转发
使用javabean
19、Servlet的多线程机制
Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。
当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有 多个线程在使用这个实例。
Servlet容器会自动使用线程池等技术来支持系统的运行
分享到:
相关推荐
JSP Servlet 学习笔记 第2版 林信良 随书光盘 第3卷
**林学良Jsp&Servlet学习笔记**: 这份学习资料可能是对JSP和Servlet基础知识的系统性讲解,涵盖了上述概念和原理,适合初学者入门。通过阅读这份笔记,你可以了解JSP和Servlet的基本语法、生命周期、以及如何将它们...
《JSP & Servlet学习笔记(第2版)》是作者多年来教学实践经验的总结,汇集了学生在学习JSP&Servlet;或认证考试时遇到的概念、操作、应用等各种问题及解决方案。 《JSP & Servlet学习笔记(第2版)》针对Servlet 3.0的...
Servlet学习笔记(java的Servlet)。 jsp的学习基础。此笔记可让你5天内学会使用Servlet,可快速入门,也可当手册使用。 更多:http://download.csdn.net/user/daillo/all
由于这部分内容是电子书中的学习笔记,电子书的内容并未直接给出,因此只能根据电子书的标题“JSP&Servlet学习笔记”和描述来推测可能涉及的知识点,而没有具体的电子书内容可以分析。如需进一步学习,建议查阅相关...
吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案 本资源为吉林大学珠海学院JSP&Servlet学习笔记(第二版)的课后答案,涵盖了JSP和Servlet相关的知识点。本笔记共分为九章,每章节都包含了相关的问题答案,...
根据提供的文件信息,标题为“JSP&Servlet学习笔记(第2版)_打印版”,描述指出文档经过空白边裁剪处理以便于打印。虽然提供的部分内文无法直接转化为明确的知识点,但我们可以根据标题和描述推测该文档的主要内容,...
Java相关课程系列笔记之九Servlet学习笔记 Java相关课程系列笔记之十JSP学习笔记 Java相关课程系列笔记之十一Ajax学习笔记 Java相关课程系列笔记之十二jQuery学习笔记 Java相关课程系列笔记之十三Struts2学习笔记 ...
jsp&servlet学习笔记(第2版)光盘,买书附赠光盘,完片版本。
[JSP&Servlet学习笔记(第2版)] 林信良
**JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。
### Servlet学习笔记3:深入理解Servlet与Web应用资源管理 #### 标题解析与扩展知识点 **标题**:“Servlet学习笔记3”表明这是系列学习笔记的一部分,专注于Servlet技术的深入探讨。 **知识点**: 1. **Servlet...
本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP &Servlet;时遇到的概念、操作、应用或认证考试等问题及解决方案。 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都...
本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。, 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做...