Servlet简介

JavaScript知识点补充

prototype.js是Sam Stephenson写的一个javascript类库。如果根据一个id号定位页面里的一个元素,用getElementById.这个二次开发的类库,已经把这个方法包装成一个更好用的方法。

不可多得的javascript(AJAX)开发工具—Aptana。

Java脚本只能运行在客户端(浏览器)。



【背景知识】


常用的Web服务器

  • IIS:应用服务器
  • Apache:Web服务器(只处理静态页面)
  • Tomcat:免费的最好用的可以跑Java的服务器,tomocat严格的说叫JSP、Servlet容器,不能跑EJB
常用的动态网页技术

  • CGI(Common GateWay Interface)
  • API常用的有(NSAPI,ISAPI)
  • ASP(Active Server Page)
  • PHP(Personal Home Page):上手简单,薪水低,入门周期低,LAMP(Linux,Apache,MySQL,PHP黄金组合)免费
  • JSP/Servlet(Java Server Page):学习J2EE的API,MVC设计框架

【基础知识】
Servlet简介

  • Servlet是服务器端小应用程序
  • 用来完成B/S架构下,客户端请求的相应处理
  • 平台独立,性能优良,能以线程方式运行:如果同时有五个客户端来访问Servlet,它能以现成的方式,每个线程处理一个客户端的请求,以这种多线程方式运行,提高了处理客户端并发访问的可能性。
  • Servlet API为Servlet提供了统一的编程接口
  • Servlet一般在容器中运行(即部署在Tomcat中)
  • 常见的Servlet容器:Tomcat、Jetty、Resin等

Web Application的概念

一、每个web应用程序下面都有以下目录结构:

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

三、javax.servlet包

Servlet是一个接口,这个接口是通用的,没有考虑到程序是放在Http服务器里还是放在XML服务器中,没有考虑到Http协议相关的细节。

GenericServlet实现了Servlet接口,包含一个service抽象方法。

HttpServlet抽象类继承了GenericServlet抽象类,实现了service方法。(事实上HttpServlet中有两个service方法)我们的程序要继承HttpServlet类,并重写doGet()或doPost()。(好像重写protected service方法也可以,Get和Post方式都会调用service。)

运行机制:当程序运行时,tomcat会自动调用HttpServlet中的public类型的service方法,并ServletRequest、ServletResponse对象传递给public service(),public service()会调用protected类型的service方法,并ServletRequest、ServletResponse对象传递给protected service()中的HttpServletRequest、HttpServletResponse参数,最后protected service()自动调用doGet()或doPost(),并传递HttpServletRequest、HttpServletResponse对象。

补充说明:html文档中form的action中的斜杠/表示域名的访问路径,web.xml中<url-pattern>中的斜杠/代表的是web app的根路径。

例如:<form action=/my/HelloWorldServlet method=get></form>和<url-pattern>/HelloWorldServlet</url-pattern>(其中/my/HelloWorldServlet表示绝对路径,如果去掉第一个/则表示相对路径)


Servlet的生命周期

在Servlet为客户端提供服务的过程当中,也就是生命全过程,在服务器的内部只有一个Servlet的对象

当客户端第一次请求访问Servlet时,tomcat会帮忙把这个Servlet new一个实例出来,new完了之后,会帮忙调用init(ServletConfig)方法,这个方法只调用一次,接下来以多线程的方式处理客户端的请求,以单个请求来说,请求过来时,tomcat会调用service方法,service方法会调用受保护的service方法,受保护的service再调用doGet或doPost。

多线程的解释:tomcat中有一个线程池,如果Servlet访问量特别大(比如同时有一百个人),tomcat不会new一百个Servlet对象,从始至终Servlet对象只有一个,它会提前准备若干个线程,让这些个线程提前跑起来,当第一个客户端请求过来了,tomcat会在线程池里分配一个闲置的线程处理这个请求,同样以线程池中的其他闲置线程来处理接下来的其他请求,而每一个线程访问的都是同一个Servlet对象,都是通过这个对象的引用调用service方法。

当Servlet退出服务的时候(Web应用程序退出了或重新加载了等情况),会自动调用destroy()方法,结束Servlet的生命周期。

生命全过程:

加载ClassLoader

实例化 new :在客户端第一次请求过来的时候

初始化 init(ServletConfig):实例化后会自动调用init,只调用一次

处理请求 service doGet doPost:多线程的方式

退出服务 destroy:结束生命周期

从实例化到destroy整个过程,无论有多少个客户端发出了请求,都只有一个对象存在。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值