• Servlet笔记


    背景知识

          常用的Web服务器

                      IIS      应用服务器

                      Apache   web服务器(处理静态页面)

                      Tomcat   JSP/Servlet容器

          通常的动态网页技术

                      CGI (Common GateWay Interface)

                      API常用的有(NSAPI,ISAPI)

                      ASP(Active Server Page)

                      PHP(Personal Home Page)

                      JSP/Servlet (Java ServerPage)

    tomcat启动与停止

             startupshutdown

             catalinastart catalina stop

             catalinadebug 调试错误的时候

             runexit help

             设置环境变量JAVA_HOME

             shutdown.batà小心使用

    tomcat目录结构

             bin: 存放各种平台下启动和关闭Tomcat的脚本文件。

             startup.bat是windows下启动tomcat的文件,

             shutdown.bat是关闭tomcat的文件。

             common: 在common目录下的lib目录,存放Tomcat服务器和所有web应用都能访问的JAR。

             shared: 在shared目录下的lib目录,存放所有web应用能访问的,但Tomcat不能访问的JAR。

             server: 在server/webapps目录中,存放Tomcat自带的两个APP-admin和manager应用,来管理Tomcat-web服务用的。

             work: Tomcat把各种由jsp生成的servlet文件放在这个目录下。

             temp: 临时活页夹,Tomcat运行时候存放临时文件用的。

             logs: 存放Tomcat的日志文件

             webapps: web应用的发布目录,把 java开发的web站点或war文件放入这个目录下就可以通过tomcat服务器访问了。

             conf: Tomcat的各种配置文件,最重要的是server.xml.

    Tomcat配置文件

             conf/server.xml
                      服务器的主配置文件

                       顶层类元素: 位于整个配置文件的顶层,<Server>;

                       连接器类元素[Connectors]: 客户和服务(容器类元素)间的通讯接口。接受客户请求,返回响应结果;<Connector>

                       容器类元素[Containers]: 处理客户请求并且生成响应结果,包含3个:<Engine><Host> <Context>

                       嵌套类元素[NestedComponents]:可以加入到容器中的元素,包括:<logger> <Valve><Realm>等

                       一个<Server>包含一个或多个<Service>,一个<Service>包含唯一一个<Engine>和一个或多个<Connector>,多个 <Connector>共享一个<Engine>;一个<Engine>包含多个<Host>,每个 <Host>定义一个虚拟主机,包含一个或多个web应用<Context>; <Context>元素是代表一个在虚拟主机上运行的Web应用。

                                Pleasenote that for tomcat 5.x, unlike tomcat 4.x, it is NOT recommended to place <Context> elements directly inthe server.xml file. Instead, put them in the META-INF/context.xml directory of your WAR file orthe conf directory as described above.

             conf/web.xml
                      定义所有Web应用的配置

                      (缺省的Servlet定义和MIME类型定义)

             conf/tomcat-user.xml 
                      定义了tomcat用户的信息(用于权限与安全)

    HTTP协议基础

             HTTP(HypertextTransfer Protocol, 超文本传输协议)

             HTTP是以明文方式发送数据的

             用于从WWW服务器传输超文本到本地浏览器的传输协议。

             HTTP协议是以TCP/IP为基础的高层协议。

             现在广泛使用的版本HTTP/1.1  支持持续连接

    Web Application的概念

          Web ApplicationName

               WEB-INF 静态文件直接放在这,就可访问

                                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"/>

    Tomcat的目录结构

             bin/             二进制可执行文件和脚本

                      catalina start stop

                      catalina debug run exit

             common/    Catalina本身和web应用可加载的类目录

             conf/           配置文件目录

             logs/           日志目录

             server/        服务器所需的类库目录

             shared/             Web App共享的类库

             webapps/    Web应用所存放的目录applications

             work/           Tomcat的工作目录(存放jsp产生的class文件)

             temp/                存放临时产生的文件

    Servlet简介

             Servlet是服务器小应用程序(http/ftp等)

             用来完成B/S架构下,客户端请求的响应处理

             平台独立,性能优良,能以线程方式运行

             ServletAPI为Servlet提供了统一的编程接口

             Servlet一般在容器中运行

             常见的Servlet容器

                       Tomcat(其下载、安装和运行请参考视频文件)

                       Jetty/ Resin

    创建Servlet

             1.XXXextends HttpServlet

             2.OverridedoGet doPost

             3.copyto WEB-INF/classes

             4.web.xml

                       <servlet><servlet-name><servlet-class></servlet>

                       <servlet-mapping><url-pattern>/

             5.restartserver

    Servlet的生命周期

          生命全过程:

                       加载ClassLoader
                       实例化 new (注意:构造方法不能有返回值类型,连void也不行(否则就变成普通方法了))

                       初始化init(ServletConfig)只一次
                       处理请求 servicedoGet doPost
                       退出服务destroy()         servlet退出服务(web应用程序退出,重新加载)调用

          只有一个对象(servlet在服务器内只有一个s对象,多线程也是访问一同个s对象)

          API中的过程:

                       init()//只执行一次, 第一次初始化的时候
                       public voidinit(ServletConfig config) throws ServletException
     
                       service()
                       public voidservice(ServletRequest req, ServletResponse res) throws ServletException,java.io.IOException
     
                       destroy()//webapp 退出的时候
                       public void destroy()

    init

          init(servletconfigconfig)

                       this.config= config

                       init();

                       重写必须得super.init(config)

                                不然不能使用this.getServletConfig

                                当然也就不能用getInitParameter();

          我们只需要重写init();

    Servlet编程接口

          GenericServlet是所有Servlet的鼻祖

          用于HTTP的Servlet编程都通过继承javax.servlet.http.HttpServlet 实现

          请求处理方法:(分别对应http协议的7种请求)

                       1、doGet                   响应Get请求,常用(参数在传递过程中,在URL地址栏中显示出来)
                       2、doPost                 响应Post请求,常用(参数在传递过程中,在URL地址栏中隐藏了)
                       3、doPut          用于http1.1协议
                       4、doDelete    用于http1.1协议
                       5、doHead           仅响应Get请求的头部。
                       6、doOptions  对webserver进行配置

                       7、doTrace      用于http1.1协议进行跟踪(调试用)

          实例的个数:

                       在非分布的情况下,通常一个Servlet在服务器中有一个实例

    HTTP的状态处理

             HTTP是无状态

                       有状态:Server知道Client以前在我这儿做过什么事儿

                       HTTP协议无连接性(传完数据断开)

    处理Cookie 服务器端写到客户端的小文本信息

             Http协议的无连接性要求出现一种保存C/S间状态的机制

             Cookie:保存到客户端的一个文本文件,与特定客户相关

             Cookie以“名-值”对的形式保存数据

             创建Cookie:newCookie(name,value)

             可以使用Cookie 的setXXX方法来设定一些相应的值

                       setName(Stringname)/getName()

                       setValue(Stringvalue)/getValue()

                       setMaxAge(intage)/getMaxAge()

                       利用HttpServletResponse的addCookie(Cookie)方法将它设置到客户端

                       利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie,返回一个Cookie数组

             设置Cookie

             读取Cookie

    会话跟踪 Session

          Session  记录在服务器端

                      在某段时间一连串客户端与服务器端的“交易”

                       在Jsp/Servlet中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid=1234

                       可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。

                       通过HttpSession来读写Session(地址栏传送Session)

          规则

                      如果浏览器支持Cookie, 创建Session的时候会把SessionID保存在Cookie里

                      如果不支持Cookie, 必须自己编程使用URL重写的方式实现Session

                       response.encodeURL()

                                转码

                                URL后面加入SessionId

                       Session不象Cookie拥有路径访问的问题

                                同一个application下的servlet/jsp可以共享同一个session,前提示同一个客户端窗口.

    HttpServletRequest中的Session管理方法

             getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。

             getSession(booleanisNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession

             isRequestedSessionIdFromCookie():当前的SessionID如果是从Cookie获得,为true

             isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true

             isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false

             HttpSession的常用方法

                       getAttributeNames()/getAttribute()

                       getCreateTime()

                       getId()

                       getMaxInactiveInterval()

                       invalidate()

                       isNew()

                       setAttribute()

                       setMaxInactivateInterval()

    Session总结

             1.服务器的一块内存(存key-value)

             2.和客户端窗口对应(子窗口)(独一无二)

             3.客户端和服务器有对应的SessionID

             4.客户端向服务器端发送SessionID的时候两种方式:

                       cookie(内存cookie)

                       rewritenURL

             5.浏览器禁掉cookie,就不能使用session(使用cookie实现的session)

             6.如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie

    Application

             用于保存整个WebApplication的生命周期内都可以访问的数据

             在API中表现为ServletContext

             servlet运行环境 contect与webapps一一对应

             通过HttpServlet的getServletContext方法可以拿到

             通过ServletContext的 get /setAttribute方法取得/设置相关属性

    Servlet中的请求转发

             RequestDispatcher接口对象允许将请求转发到其他服务器资源

             通过RequestDispatcher的forward(HttpServletRequest,HttpServletResponse)方法可以将请求转发

             通过ServletContext的getRequestDispatcher(Stringurl)方法来获得RequestDispatcher对象,并且指定转发的目标url资源

             可以通过HttpServletRequest的setAttribute(Stringname,String value)来设置需要传递的参数,然后在代理servlet中就可以使用HttpServerRequest的getAttribute(String name)来获得对应的值

    数据库处理以及在Servlet中使用Bean

             广义javabean = 普通java类

             狭义javabean = 符合SunJavaBean标准的类

             在Servlet中使用Bean和在通常程序中使用Bean类似

                       属性名称第一个字母必须小写,一般private,
                       比如:privateproductId

                       一般具有gettersand setters

                       要具有一个参数为空的构造方法

                       但Bean不应具有GUI表现

                       一般是用来实现某一业务逻辑或取得特定结果

    如何掌握Servlet

             创建Servlet

                       从HttpServlet继承

                       重写doGet /doPost方法

                       在web.xml中配置

             servlet生命周期

             Cookie/ Session / Application的概念

             请求转发

             使用javabean

    Servlet的多线程机制

             Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。

             当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有 多个线程在使用这个实例。

             Servlet容器会自动使用线程池等技术来支持系统的运行


  • 相关阅读:
    Coding4Fun.Phone.Controls的使用
    发布windows phone应用经历实谈
    我的第一款windows phone软件
    华农js抢课神器
    zookeeper 实战案例分享:cruator客户端编程
    zookeeper学习与实战(二)集群部署
    zookeeper学习与实战(一)环境部署
    Flask框架的学习与实战(三):登陆管理
    Flask框架的学习与实战(二):实战小项目
    Flask框架的学习与实战(一):开发环境搭建
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12926049.html
Copyright © 2020-2023  润新知