基本知识
一.Web结构
1.两种应用程序

①桌面应用程序:QQ、CS、MyEclipse、Office、DW、360、浏览器等必须下载、安装、桌面快捷方式、注册表信息、操作系统后台服务、占用操作系统端口

②web应用程序:不需要下载、占用硬盘空间、占用操作系统服务,只需要浏览器、网线

(运行在 Internet 网络上面的软件项目)  阿里巴巴

③注意:在普通的Java项目中需要考虑文件导入路径,而Java web项目则不需要,包含在项目中的文件随时随地可以使用。

2.web 项目结构

客户端浏览器  ---------Internet 网络---------  Web 服务器

3.Web 项目开发技术

SUN    Java EE(Ejb、JavaMail、JMS 、JNDI、Servlet、JSP、)

微软   Asp.Net

自由人 PHP    (sina、FaceBook)

Adobe  Flex   (Flash、Java、ActionScript)

4.Http协议

①HTTP是一个属于应用层的面向对象的超文本传输协议,基于TCP/IP协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年由W3C组织制定的,具体协议内容在内部有一个文件编号:RFC2616,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

②HTTP特点:

(1)无连接:分为4个阶段:建立连接、发送请求、等待响应、关闭连接

优点:快速、简单、不占用网络服务器资源

缺点:速度由网络来决定,每次传输数据量不能太大

(2)无状态:HTTP 协议只负责传输数据,不负责保管所传递的数据

客户端                       服务器

b1  ---------------------\

b2  ---------------------  \

b3  ---------------------    \

server

b4  ---------------------     /

b5  ---------------------   /

b6  --------------------- /

URL:(Uniform/Universal Resource Locator)统一资源定位符,请求的是服务器上的资源。资源是一个抽象的概念,指存放在服务器上的能够被客户端访问到的所有类型的文件(比如:文本、图片、音频、视频等)。

④Http访问服务器资源的方式

⑴URL地址

⑵表单提交

表单提交实例

⑤get和post方法的区别

⑴get方法通过URL传递参数,用户在客户端地址栏可见,如果是传递密码的话,不安全;post方法通过请求的body传递参数,用户在客户端不可见,更安全。

⑵get方法通过地址栏URL传递请求,而URL本身有长度限制,一般不超过255个字符;post方法通过请求body传递参数,没有长度限制。

但是get和post读取的范围是一样的,只是一个信息可见,而另一个则不可见。

5.web容器

①web容器是web程序运行的环境,一般由具体的服务器程序实现具体的功能

②web容器功能:

⑴生成并管理相关对象,供servlet使用

⑵管理servlet生命周期,提供servlet的运行环境

⑶充当web服务器和servlet之间的桥梁

Ⅰ.将请求从web服务器转发到servlet

Ⅱ.将响应从servlet转发到web服务器

6.容器与服务器

服务器:食堂提供就餐服务,提供全部服务的通称,内部可能包含多种服务。

容器:一种容器就是一个独立的小服务器,提供单一的服务功能。

Tomcat 服务器|Tomcat 容器

(1)Tomcat实现了SUN JavaEE 中多个API 标准--Servlet、JSP、没有实现大型(企业级程序)的标准如EJB

(2)在Tomcat中提供的每个实现标准,我们都可以称为一个小的容器实际上Tomcat中包含了Servlet容器、JSP容器

(3)实际上Tomcat服务器是由很多小容器组成,也可以称Tomcat是一个大容器--Tomcat 容器

二.Servlet

1.Servlet的概念

①Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。Servlet与Web服务器的关系类似于Applet与Web浏览器的关系(这也是为什么Servlet技术被称为Servlet的原因),我们可以将Servlet想象成没有前端界面(faceless)的Applet。

②服务器端动态处理常见技术

③在Servlet中,修改web.xml、servlet类都要重新启动tomcat服务器才能生效

2. Servlet 的对象创建和生命周期

Servlet 是一个Java 类,该类要运行必须创建对象。

问题:

①由谁创建?

   答:由读取web.xml 文件的服务器软件来进行创建。

   ②何时创建Servlet 对象?

      (1)web程序,服务器端只有一个,但是访问的客户端数量没有办法控制

      (2)客户端访问的时间没有办法限制。

   在Tomcat服务器端,一个Servlet类一次只创建一个Servlet对象,该对象通过线程(对用户使用该Servlet的时间进行分段)使用

浏览器端                    服务器端

www.taobao.com/search    s = new SearchServlet()

t1     t2      t3     t4...       t10

u1

u2

u3

u1

...

u3

类似于电影,1秒轮换24张静态图片,人们就认为图片是动态的。

③该Servlet 对象创建的时间有两个:

   (1)服务器启动时创建,多出现在项目运行阶段,会检查所有当前服务器上的项目,检测项目中web.xml文件,在检测的同时,看到<servlet-class>,就会自动的创建对象,并且保持在内存中。

    (2)当用户第一次访问服务器上一个新的Servlet时,在开发过程中。

④生命周期:

Servlet生命周期:指Servlet对象在服务器内存中从创建到调用,到销毁的整个过程,主要研究该过程中哪些方法对我们的开发有用。

(1)实例化:当客户端通过URL请求的时候,web容器根据web.xml配置自动调用该Servlet的构造方法,实例化对象。

(2)初始化:通过该servlet对象调用init()方法,读取web.xml中该servlet的配置信息,为service方法提供相关数据。

(3)服务:通过该对象调用service()方法,如果是继承HttpServlet,则根据请求头信息中的请求方法,调用对应的doGet()/doPost()

(4)销毁:不是在service()方法调用完后,立即调用,而是由JVM来决定。当JVM需要销毁一些对象、释放内存空间的时候,才会去调用该实例的destroy()方法。

3. Servlet 中的常用对象

①Interface:javax.servlet.Servlet

Mothd:init(ServletConfig config)

service(ServletRequest req, ServletResponse res)

destroy()

public ServletConfig getServletConfig();//得到 web.xml 中的配置信息

②abstract Class:

⑴javax.servlet.GenericServlet

//重写父接口中的所有方法

      //从web.xml文件中得到初始化参数的值

      String  getInitParameter(String name)

      //代表web.xml配置文件

      public ServletConfig getServletConfig()

//代表服务器中该项目的访问路径(上下文对象即项目名)

public ServletContext getServletContext()

⑵javax.servlet.http.HttpServlet

doXXXX()

//返回上次修改 HttpServletRequest 对象的时间,该时间是自格林威治标准时间1970年 1月1日午夜起经过的毫秒数

protected long getLastModified(HttpServletRequest req)

③HttpServletRequest(interface) 实现了ServletRequest接口,为 HttpServlet提供请求信息.在 HTTP 协议中,规定了很多信息:请求头信息、请求内容。

http://localhost:8080/servlet/index.jsp

    http:         request.getScheme();

    localhost:     request.getServerName();

    8080:          request.getServerPort();

    /servlet:      request.getContextPath();

    /index.jsp     request.getServletPath();

    /servlet/index.jsp: request.getRequestURI();

    完整请求路径: request.getRequestURL();

    IP 地址:      request.getLocalAddr();

 

HttpServletResponse(interface):代表服务器向浏览器返回的响应直接输出内容到浏览器,使用Servlet输出HTML页面   

       PrintWriter out = response.getWriter();

       out.print("Hello :");

    设置响应的内容类型:

       response.setContentType("text/html; charset=UTF-8");

注意:使用response对象跳转,可以跳到项目外的一个URL资源上

如:response.sendRedirect(“http://www.csdn.net”);

使用request对象跳转,只能在本项目资源中跳转

如:request.getRequestDispatcher(“url”).forward(request,response);

告诉浏览器不要缓存页面:

页面刷新:单位是秒

⑤两个对象公用方法:

response.setCharacterEncoding("UTF-8");

request.setCharacterEncoding("UTF-8");

就像盖房子,运送沙子:

(1)不管什么沙子,全部运到后,再用机器筛成需要的大小

(2)先按照要求,筛好后运到工地

⑥javax.servlet.RequestDispatcher(interface):对请求响应进行补充的一个接口,主要负责两个功能RequestDispatcher disp = request.getRequestDispatcher("login_ok.jsp");

(1)跳转

disp.forward(ServletRequest,ServletResponse);

(2)包含

disp.include(ServletRequest,ServletResponse);

程序中一般连写:

request.getRequestDispatcher("login_ok.jsp").forward(request,response);

⑦Cookie(class): 保存在浏览器中的一部分数据,可以被包含在请求对象中传递给服务器

Http响应中的Cookie

Set-Cookie:CustomerID=1234;domain=abc.com;path=/sales

Set-Cookie:对Cookie通过名称=值的方式进行设置,这些值在用户下次访问的时候会被使用,其中名值对可以设置多个。

domain:指定该Cookie是用户访问的哪个网站返回的

path:指Cookie在这个网址下面的路径

(1)新建 Cookie

Cookie cik = new Cookie("name",value);

//设置cookie的生存期是必须的,如果不设置或者设置为0,则此cookie是瞬时的,只保存在本机的内存中,而不会在硬盘上

cik.setMaxAge(秒);

(2)设置 Cookie,在响应中加入cookie

cik.setPath("/test/test2");  //可选

response.addCookie(cik);

(3)读取Cookie,通过request读取cookie

Cookie[] cks = request.getCookies();

for(int i=0;i<cks.length;i++)

{

Cookie temp = cks[i];

if("name".equals(temp.getName()))

{

String value = temp.getValue();

}

}

(4)删除 Cookie

ck.setMaxAge(0);

好处:保存数据,方便用户操作

坏处:能够保存的数据很少,字符格式,不超过4kb;受浏览器本身影响,不一定能够一直有效。

⑧HttpSession(interface)是在服务器端保存数据最常见的方式。

Session:会话,(进行某活动连续的)一段时间,使用该对象可以完成一定的操作。会话信息的范围仅限于当前Web应用程序(
ServletContext
),因此存储在一个上下文中的信息在另一个上下文中不是直接可见的。

Ⅰ.Hibernate中Session和Servlet中HttpSession的区别

Hibernate中Session对象:主要作用是数据库连接、数据库操作

Servlet中HttpSession对象:

(1)帮助服务器,识别不同的浏览器

(2)帮助服务器传递数据到不同的Servlet或JSP页面

(3)能够人工控制连续的时间段的长短。

Ⅱ.HttpSession 对象的常用方法:

(1)创建

HttpSession session = request.getSession(true);

要求服务器端重新创建一个session对象

HttpSession session = request.getSession(false);

不需要服务器端新建session对象,只需要从已有的session中取一个

HttpSession session = request.getSession();

没有要求,由服务器自动分配

(2)识别浏览器

//随机生成一个不重复的id,随着响应发送给浏览器,绑定在浏览器中,每次浏览器请求,都会把该id返回并与服务器端的id对比

String id = session.getId();

(3)传递数据

//把数据存入session中

session.setAttribute("name",object);

//在其他Servlet或jsp页面中取出数据

Object obj = session.getAttribute("name");

一般情况下,需要先判断是否为空,再取值

(4)设置有效时间

一个session对象默认有30分钟的有效时间

//设置单个session对象的最长有效时间

session.setMaxInactiveInterval(60*60*24秒);

//设置整个工程中所有session的有效时间

<session-config>

<session-timeout>20000</session-timeout>

</session-config>

(5)清除数据

session.removeAttribute("name");

(6)设置Session失效或钝化

session.invalidate();

例如:

Session类似储物柜,最主要作用就是存取数据

寝室的储物柜:

(1)一人一个

(2)能够存取东西

(3)一般的一个柜子一把钥匙

(4)特殊情况,可以给柜子贴封条

(5)有时候柜子可能两个人或N个人共用

⑨ServletContext(interface)

⑴ServletContext的定义

⑵ServletContext对象能够访问web项目的初始化参数、存储在ServletContext中的对象、web项目中的资源文件、日志;ServletContext就是Servlet容器,提供的方法可以在同一个web应用下的所有Servlet中使用。

⑩ServletConfig(interface)

ServletConfig封装了web.xml文件中的配置信息,可以在每个servlet的初始化方法中得到并且使用该对象。

4. Java EE中关于Servlet类的层次结构

Servlet(interface)(接口,规定了基础的客户端、网络、服务器端程序开发的基本方法,银行系统、军用导弹系统,不局限于特定网络)

|

GenericServlet(abstract)(抽象的实现类,定义一般的、与协议无关的servlet)

|

HttpServlet(abstract)(在Internet网络中,实现了HTTP协议的抽象类HttpServlet 的子类至少必须重写一个方法)

/  |  \

自定义的Servlet具体到一个方法(GET/POST)提交的请求(普通类,继承于HttpServlet)

Java EE技术架构

5.过滤器(Filter)

①过滤器:是一个可插拔的Web组件,从Servlet 2.3之后出现,提供了一个接口,用于开发Servlet中的过滤器---Filter,是一个独立的程序,由一段Java代码和一段配置信息组成。通过不同规格的滤网,在过滤过程中,这些滤网可以组合使用。我们在 Servlet 中,可以通过实现Filter接口,创建不同规格的滤网,再通过web.xml文件配置,把上述多个过滤器组合在一起。

与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序档案中。但是与其他web应用程序组件不同的是,过滤器是“链”在容器的处理过程中。这就意味着它们会在Servlet处理器之前访问一个进入的请求,并且在触发的响应信息返回到客户端前访问这些响应信息,这种访问使得过滤器可以检查并修改请求和响应的内容。

上图的Servlet Engine、JSP Engine分别代表各自的引擎

上图为filter作用的示意图

②Filter过滤器的生命周期

(1)实例化:由Tomcat调用过滤器类的构造方法,创建对象在服务器启动时创建

(2)初始化:由Tomcat调用过滤器对象中的init(XXXXConfig)

(3)过滤:由Tomcat调用doFilter(request,response)

(4)销毁:destroy()

③Filter 的创建过程

(1)创建普通类,实现javax.servlet.Filter接口

(2)在doFilter()方法中截取request/response对象,进行请求或响应的过滤

(3)在web.xml文件中进行配置,使它能够在整个web工程中生效。剩下的都交给服务器。

④过滤器过滤条件的配置:

(1)过滤服务器上所有的资源

<filter-mapping>

<filter-name>charSet</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

(2)过滤制定类型的文件

<filter-mapping>

<filter-name>charSet</filter-name>

<url-pattern>*.html</url-pattern>

</filter-mapping>

<filter-mapping>

<filter-name>charSet</filter-name>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

(3)过滤指定的目录

<filter-mapping>

<filter-name>charSet</filter-name>

<url-pattern>/folder/*</url-pattern>

</filter-mapping>

(4)过滤指定的Servlet

<filter-mapping>

<filter-name>loginFilter</filter-name>

<servlet-name>loginServlet</servlet-name>

</filter-mapping>

<servlet-mapping>

<servlet-name>loginServlet</servlet-name>

<url-pattern>/login</url-pattern>

</servlet-mapping>

⑤过滤器的通用功能

⑴拦截请求头:安全认证、日志

⑵数据转换:加密、解密

⑶抢占特殊资源的服务:缓存

⑥filter的接口

⑴javax.servlet.Filter

⑵javax.servlet.FilterChain

⑶javax.servlet.FilterConfig

⑦过滤字符编码的实例代码

其中的filterChain.doFilter(request,response);表示跳出前一个filter,继续到另一个filter中执行。
6.事件监听器(Listener)

①什么是事件监听器

⑴支持ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中状态改变的事件通知;

⑵实现了一个或多个servlet事件监听器接口的类型

⑶控制ServletContext、HttpSession(since v2.3)及ServletRequest(since v2.4)中的生命周期。

②监听器组成: (1)监听器本身  Listener (2)监听器触发事件  Event

③监听器主要使用在JavaSwing、JavaScript、Servlet中。在Servlet中,监听器主要针对有限的几个对象——作用域对象(这些对象都能在一定的有效时间内,保存数据,供其他Servlet或jsp页面使用)如:ServletContext、HttpSession、ServletRequest

④事件介绍

⑴事件是Java中的一个重要的概念,指某个代码运行过程中的一个状态:如HttpSession创建、属性值的改变等都可以用事件来描述。

⑵事件原型:java.util.EventObject

⑶事件监听程序是当事件发生后发现并处理的程序,实现接口java.util.EventListener

⑤各种事件对应的监听器接口

更具体的对应关系如下图

⑥使用事件及监听器的步骤

⑴编写一个类,实现某监听器接口(具体由所要监听的事件类型决定)

⑵在web.xml中注册监听器

<listener>

<listener-class>具体的类路径</listener-class>

</listener>

⑦Servlet API中给这些对象提供了监听器,主要监听以下内容:

(1)监听生命周期事件

//新建一个session,新建的session状态就是激活状态

HttpSession session =request.getSession(true);

//改变当前session对象的状态,变为钝化状态

session.invalidate();

//监听 session对象的激活和钝化

javax.servlet.http.HttpSessionActivationListener

//通知创建了一个会话

javax.servlet.http.HttpSessionListener

sessionCreated(HttpSessionEvent se)

//通知某个会话即将无效

sessionDestroyed(HttpSessionEvent se)

(2)监听属性改变事件

//监听用户登录,前提是用户在登录的时候创建新的session对象

7.Servlet处理请求和响应

Servlet是完全用Java代码编写的一个文件,编译过程和Java代码一样,但具体运行是由web服务器控制。客户端访问服务器上哪个Servlet,服务器就加载运行哪个Servlet的字节码来生成结果。

8.web.xml介绍

①Web.xml是web项目的核心,任何一个web项目都必须有这样的配置文件,通过这个配置文件,所有的服务器Tomcat、JBoss、WebLogic、GlassFish等都要通过web.xml来了解一个web项目的相关信息。该文件中能够配置很多的内容,其中包括servlet,能够为servlet配置名称、类路径、访问路径,可以通过访问路径在地址栏中通过URL访问到某个包下面的某个servlet类。

②Servlet的配置

servlet基础讲解的更多相关文章

  1. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  2. JSP数据交互(二)和Servlet基础

    01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...

  3. Servlet基础(三) Servlet的多线程同步问题

    Servlet基础(三) Servlet的多线程同步问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率. 由于Servlet/JSP默认是以多线程模式执行的, ...

  4. Servlet基础(二) Servlet的生命周期

    Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...

  5. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  6. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  7. Servlet基础简单总结(上)

    Servlet基础一些简单总结(上): 1.Java Servlet是运行在Web服务器上的Java程序2.Java平台给Servlet开发者提供了强大的API/面向对象编程平台无关/强类型/垃圾回收 ...

  8. 原生AJAX基础讲解及兼容处理

    原文:原生AJAX基础讲解及兼容处理 AJAX = Asynchronous JavaScript and XML (异步的JavaScript和XML). AJAX不是新技术 ,但却是热门的技术.它 ...

  9. JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

    说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...

随机推荐

  1. Web UI Design Patterns 2014

    http://www.uxpin.com/web-design-patterns.html?utm_source=Interaction%20Design%20Best%20Practices%20V ...

  2. 静态wenb开发,动态web开发

  3. 爬虫组NABC

    Need(需求): 我们小组的研究课题是编写一个更实用的爬虫软件,编写时会应用到学长的部分代码并在其基础上完善创新. 鉴于学长代码已经实现了基本功能,即从网站上面爬取相关的Word文档等与计算机有关的 ...

  4. 从OGRE,GAMEPLAY3D,COCOS2D-X看开源

    OGRE,大家都很熟悉咯. 说到这一点真的有点好笑,我见过很多人说认识OGRE,但是却不知道D3D和OPENGL是什么东东的,可能是我的笑点真的很低,反正是莫名喜感.前天在COCOS2D-X的一个群里 ...

  5. 2391: Cirno的忧郁 - BZOJ

    Description Cirno闲着无事的时候喜欢冰冻青蛙.Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有青蛙冰冻.雾之湖生活着m只 ...

  6. 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

    // ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "stdafx.h ...

  7. HTML5 本地裁剪图片

    下面奉上我自己写的一个demo,代码写得比较少,很多细节不会处理.如果有不得当的地方恳请指教,谢谢啦 ^_^ ^_^   功能实现步奏:   一:获取文件,读取文件并生成url   二:根据容器的大小 ...

  8. 【BZOJ】【2940】【POI2000】条纹

    博弈论 一开始想成S-Nim了……后来发现不一样= =石子是一定得取的,但是这个铺条纹就像Crosses and Crosses一样,是可以铺到中间,左右留下空隙但是对手无处可放的…… 所以就是两道题 ...

  9. matlab中读取txt数据文件(txt文本文档)

    matlab中读取txt数据文件(txt文本文档) 根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如te ...

  10. [设计模式] 4 原型模式 prototype

    设计模式:可复用面向对象软件的基础>(DP)本文介绍原型模式和模板方法模式的实现.首先介绍原型模式,然后引出模板方法模式. DP书上的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ...