Servlet学习笔记

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容器会自动使用线程池等技术来支持系统的运行

你可能感兴趣的:(tomcat,编程,应用服务器,Web,servlet)