河软CSDN乐知学院
学员周学习总结
姓名 |
** |
周次 |
7 |
方向 |
Java |
|||||||
内 容 |
本周学习知识点: Tomcat配置Web站点 HTTP Servlet入门 |
|||||||||||
本周学习收获: Tomcat配置Web站点 WEB应用的相关知识 安装 Tomcat Tomcat 的启动与停止 配置WEB站点的虚拟目录 配置虚拟主机 Web应用程序简介 应用程序:指允许用户执行特定任务的软件程序,主要分为桌面应用程序和Web应用程序两种类型。 桌面应用程序(DesktopApplication):一般是指采用客户机/服务器结构(Client/Server)的应用程序。 C/S模式将应用与服务分离,系统具有稳定性和灵活性 C/S模式配备的是点对点的结构模式,适用于局域网,有可靠的安全性 由于客户端实现与服务器端的直接连接,没有中间环节,因此响应速度快 在C/S模式中,作为客户机的计算机都要安装客户机程序,一旦软件系统升级,每台客户机都要安装客户机程序,系统升级和维护较为复杂 Web应用程序(Web Application) Web应用程序一般是指采用浏览器和服务器结构(Browser/Server,简称B/S结构)的应用程序。 Web应用程序由Web服务器和Web客户端组成。 Web服务器:Web服务器上装有某个应用程序,这个Web服务器应用程序负责接收客户请求进行处理,向客户返回结果 Web客户端:允许用户请求服务器上的某个资源,并且向客户端返回结果。Web应用程序的客户端一般是指Web浏览器。Web浏览器就是一个软件,它知道怎么与服务器通信,它还有一个重要任务,就是解释HTML代码,把Web页面呈现给用户 B/S模式的优点: (1)易于维护:基于B/S模型的系统当需要升级或维护时,只需修改服务器程序即可。 (2)易于实现。B/S模型的表现层可以用制作网页的html来实现,浏览器和网页设计技术已经相当成熟。而且用Java技术开发的Web系统可以安装在任意一种服务器系统平台上,也就是常说的具有跨平台性。 (3)使用方便,无论客户在什么地方,只要服务器正在运行,客户就能通过网络进行连接,实现对数据的访问和操作。 URL:Uniform Resource Locator(统一资源定位符) 例如,http://www.it315.org:80/java/index.html 主要的WEB服务器软件 IIS、Apache 、Tomcat WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。 Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。 静态web资源开发技术 Html 常用动态web资源开发技术: JSP/Servlet、ASP、PHP等 在Java中,动态web资源开发技术统称为Javaweb,我们课程的重点也是教大家如何使用Java技术开发动态的web资源,即动态web页面。 认识web.xml文件的作用: 通过web.xml文件把某个web资源配成网站首页。 部署描述符文件 <WEB应用程序>/WEB-INF/web.xml <Tomcat主目录>/conf/web.xml 目录的默认网页文件 <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> 在一个tomcat服务器中可以放置多个网站,所谓配置虚似主机,就是在tomcat服务器中配置一个网站。 如需在WEB服务器中配置一个网站,需使用Host元素进行配置,例: <Hostname=”site1” appBase=”c:\app”></Host> 配置的主机(网站)要想被外部访问,必须在DNS服务器或windows系统中注册。 配置多个网站。 缺省虚似主机。 HTTP HTTP简介 l 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。 l WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。 l HTTP是hypertext transferprotocol(超文本传输协议)的简写,它是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。 l HTTP协议的版本 HTTP/1.0、HTTP/1.1 l HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。深入理解HTTP协议,对管理和维护复杂的WEB站点、开发具有特殊用途的WEB服务器程序具有直接影响。 HTTP 1.0的会话方式 l 四个步骤: 建立连接 发送请求 回送响应 关闭连接 l 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。 l 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。 HTTP 协议 浏览器访问多图网页的过程 l 一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求。 HTTP请求消息 l 客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容: l 一个请求行、若干消息头、以及实体内容,如下所示:
l 请求消息的结构: 一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。 l 举例: GET /books/java.html HTTP/1.1 Accept: */* Accept-Language: en-us Connection: Keep-Alive Host: localhost Referer: http://localhost/links.asp User-Agent: Mozilla/4.0 Accept-Encoding: gzip, deflate 请求行: l 请求行中的GET称之为请求方式,请求方式有: • POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT • 常用的有: GET、 POST • 用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。 l 不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上: • 如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如: • GET /mail/1.html?name=abc&password=xyz HTTP/1.1 • GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。 • 如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。 消息头: l 用于HTTP请求中的常用头 • Accept: text/html,image/* • Accept-Charset: ISO-8859-1 • Accept-Encoding: gzip,compress • Accept-Language: en-us,zh-cn • Host: www.it315.org:80 • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT • Referer: http://www.it315.org/index.jsp • User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) • Cookie • Connection: close/Keep-Alive • Date: Tue, 11 Jul 2000 18:23:51 GMT HTTP响应 l 一个HTTP响应代表服务器向客户端回送的数据,它包括: 一个状态行、若干消息头、以及实体内容 。
l 举例: HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Thu, 13 Jul 2000 05:46:53 GMT Content-Length: 2291 Content-Type: text/html Cache-control: private <HTML> <BODY> …… 状态行: l 状态行 格式: HTTP版本号 状态码 原因叙述<CRLF> 举例:HTTP/1.1 200 OK 典型情况 l 200(正常) 表示一切正常,返回的是正常请求结果。 l 302/307(临时重定向) 指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。 l 304(未修改) 表示客户机缓存的版本是最新的,客户机应该继续使用它。 l 403(禁止) 服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致。 l 404(找不到) 服务器上不存在客户机所请求的资源。 l 500(内部服务器错误) 服务器端的CGI、ASP、JSP等程序发生错误。 Servlet入门 Servlet的应用 1.Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的web页面。它担当Web浏览器或其他http客户程序发出请求、与http服务器上的数据库或应用程序之间交互的中间层。 2.主要内容:Web应用程序开发过程、Servlet的运行原理、Servlet的生命周期等。 Java Web应用程序的开发过程 1. 开发Java Web应用程序的大致流程 – 设计目录结构:根据具体业务需要,遵照规范的目录结构设计好Web应用程序的目录结构。 – 编写Web应用程序代码:编写业务逻辑所需的Java代码。 – 编写部署描述文件:把Servlet、初始化参数等定义到部署描述文件web.xml中。 – 编译代码:把编写好的Java源代码编译成字节码。 – 将Web应用程序打包:把整个Web应用程序打成War包,以方便部署。 – 部署Web应用程序:把打好的War包部署到Web服务器上。 2. 执行Web应用程序:启动Web服务器,利用客户端浏览器进行访问测试。 注意:在具体的开发过程中,一般都会使用IDE工具,使用IDE工具进行Web应用程序开发时,只需要开发人员完成前三个步骤,其他步骤IDE工具可以自动完成。 Servlet运行原理 1.当Web服务器接收到一个HTTP请求时,它会先判断请求内容——如果是静态网页数据,Web服务器将会自行处理,然后产生响应信息;如果牵涉到动态数据,Web服务器会将请求转交给Servlet容器。此时Servlet容器会找到对应的处理该请求的Servlet实例来处理,结果会送回Web服务器,再由Web服务器传回用户端。 2.针对同一个Servlet,Servlet容器会在第一次收到http请求时建立一个Servlet实例,然后启动一个线程。第二次收到http请求时,Servlet容器无须建立相同的Servlet实例,而是启动第二个线程来服务客户端请求。所以多线程方式不但可以提高Web应用程序的执行效率,也可以降低Web服务器的系统负担。 Servlet的生命周期 不存在Servlet实例—容器装载Servlet—创建Servlet实例—初始化Servlet调用init方法—调用Servlet方法对应Servlet的Servlet方法—结束Servlet调用destroy方法 Servlet接口实现类: 1、HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。 2、HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。 Servlet的一些细节(1) 1、:由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。 2、<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。 3、一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。 Servlet的一些细节(2): 1、同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。 2、在Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。 Servlet的一些细节(3): 对于如下的一些映射关系: Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 *.do Servlet的一些细节(4): 1、Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。 2、针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。 3、在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。 Servlet的一些细节(5): 1、如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。 2、用途:为web应用写一个InitServlet,这个servlet配置为启动时装载,为整个web应用创建必要的数据库表和数据。 Servlet的一些细节(6): 1、如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。 2、凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。 3、在<tomcat的安装目录>\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为了缺省Servlet。 4、当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。 线程安全: 1、当多个客户端并发访问同一个Servlet时,web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用Servlet的service方法,因此service方法内如果访问了同一个资源的话,就有可能引发线程安全问题。 2、如果某个Servlet实现了SingleThreadModel接口,那么Servlet引擎将以单线程模式来调用其service方法。 3、SingleThreadModel接口中没有定义任何方法,只要在Servlet类的定义中增加实现SingleThreadModel接口的声明即可。 4、对于实现了SingleThreadModel接口的Servlet,Servlet引擎仍然支持对该Servlet的多线程并发访问,其采用的方式是产生多个Servlet实例对象,并发的每个线程分别调用一个独立的Servlet实例对象。 5、实现SingleThreadModel接口并不能真正解决Servlet的线程安全问题,因为Servlet引擎会创建多个Servlet实例对象,而真正意义上解决多线程安全问题是指一个Servlet实例对象被多个线程同时调用的问题。事实上,在Servlet API 2.4中,已经将SingleThreadModel标记为Deprecated(过时的)。 ServletConfig对象: 1、在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。 2、当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。 3、阅读ServletConfigAPI,并举例说明该对象的作用: 获得字符集编码 获得数据库连接信息 获得配置文件 |
||||||||||||
学习总结: Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有java applet不过现在使用的很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。 |
||||||||||||
对授课教师意见建议: 希望老师能带领我们学习java web实战开发项目,让我们能更好的体会学习。 |