美国上市公司

亿元级外企IT培训企业

  • 全国服务监督电话400-827-0010
IT培训 > 学习笔记 > Servlet总结:系列笔记之九
  • Servlet总结:系列笔记之九

    发布:IT培训 来源:达内 时间:2014-12-29

  • Servlet总结:系列笔记之九

  • 参赛学员:常彦博

    所获奖项:二等奖

    内容:

    4个月的坚持!530个小时的整理!15本笔记!496页的A4纸!22万8千字的纯手打!全部完成!

    说明:(又一重量级系列九Servlet的word版笔记发布!看目录就知道知识点很多!笔记内容真实,都是课上及TTS上内容,不是从网上复制粘贴来的! 同时也不会去刷点击率!不想评分的按F5刷新页面即可!不用选择分数,一旦选择就不能改了!也可以拿到电子版后再来评分!Q群在下。毕业了!不知道 TTS帐号能保留多久?大家抓紧进群下载~最近人数暴涨!目前15本笔记都已完成,可搜索查看此15本笔记。对于新学员,建议进群下载系列一!包括:Java基础、面向对象、JavaSE核心)

    1)此笔记为本人系列笔记之一:Java(1)、Oracle(2)、PL/SQL(3)、JDBC(4)、XML(5)、HTML(6)、 CSS(7)、JavaScript(8)、Servlet(9)、JSP(10)、Ajax(11)、jQuery(12)、Struts2(13)、 Hibernate(14)、Spring(15)……

    2)笔记内容整理了:Servlet(程祖红老师主讲,占笔记内容100%)。

    3)此笔记已打印出成品,一共56页!(不包括目录)。排版格式大部分按照毕业论文做的!有目录、章节、页眉、页脚、缩进、一二三级标题等。同时排版格式也照顾到了双面打印,所以电子版可直接双面打印,不需要调格式。

    因此,本人的系列笔记平均花费20个小时以上(笔记纯手工输入)!每天的总结、排版很辛苦!之前有很多朋友拿到了我分享的笔记,因此还望各位尊重他人劳动成果(你懂得~~)。

    4)评选系统由于不能上传word版,所以格式、布局上不太好看,如文中的注意事项有特殊项目符号,这里显示的是字母u和字母v,有的图片也不能显示!内容太长,老是提交失败!只能一点一点发!

    5)各位加此Q群:227252731,后面的笔记会发到群共享里。

    一、Servlet概述

    1.1 B/S架构(了解)

    1)什么是B/S架构

    客户端使用浏览器,服务端使用web浏览器,客户端跟服务器之间使用HTTP协议进行通讯。

    2)优点

    ①客户端不需要单独安装(因为使用浏览器);C/S架构比较麻烦的是需要单独安装每个客户端,并且一旦客户端版本发生改变,就需要再次安装。

    ②开发相对简单;C/S架构需要我们分别在,客户端和服务器端编写相应的通信处理模块和自定义协议,而B/S架构使用标准的HTTP协议(即不再需要自定义协议),而且浏览器与Web服务器已经包含了相应的通信模块了。

    1.2 什么是Servlet

    Sun公司制订的一种用来扩展Web服务器功能的组件规范。

    1)扩展web服务器功能

    早期(2000年左右)的Web服务器:apache的web server、微软的iis。只能够处理静态资源(即需要事先将html文件写好),不能够处理动态资源的请求(即需要依据请求参数然后进行计算,生成相应的页面)。

    为了让这些web服务器能够处理动态资源的请求,需要扩展他们的功能。

    早期使用的是CGI技术(Common Gateway Interface通用网关接口),可以使用很多语言编写,如perl,C/C++等来开发CGI程序。但是CGI程序有几个问题,比如开发比较复杂(因为需要程序员自己去分析请求参数)、性能不佳(因为当Web服务器收到请求之后,会启动一个CGI进程来处 请求)、CGI程序依赖平台(可移植性不好)。

    现在,可以使用Servlet来扩展。

    当浏览器将请求发送给Web服务器(比如:apcahe的web server),Web服务器会向Servlet容器发送请求,Servlet容器负责解析请求数据包。当然,也包括网络通讯相关的一些处理,然后将解析之后的数据交给Servlet来处理(Servlet只需要关注具体的业务处理,不用关心网络通讯相关的问题)。

    u 注意事项:可以不使用服务器,而直接向Servlet容器发送请求,因为Servlet容器里面也有个通信模块,所以也可直接把Servlet容器当作简单的Web服务器来使用。

    2)组件规范

    ①组件:是符合一定规范,并且实现部分功能的可以单独部署的软件模块。组建必须要部署到容器里面才能运行。

    ②容器:也是符合一定规范,并且提供组件的运行环境的程序。

    u 注意事项:单个的组件、单个的容器都是没意义的,都不能单独运行,需要放在一起才能运行。

    1.3什么是Tomcat

    Tomcat本身是一个Servlet容器,即可以提供Servlet运行环境的一个程序,但是Tomcat还提供了Web服务器所具有的所有功能,所以我们也称Tomcat是一个Web服务器。Tomcat的默认端口是8080。

    1)安装Tomcat(www.apache.org下载)

    ①Linux系统下安装和配置的步骤

    step1:解压到/home/soft01下

    step2:配置环境变量

    cd /home/soft01

    vi .bash_profile

    JAVA_HOME:jdk的主目录

    CATALINA_HOME:tomcat的主目录

    PATH:CATALINA_HOME/bin

    step3:启动Tomcat

    cd /home/soft01/tomcat主目录/bin

    sh startup.sh或者sh catalina.sh run

    接下来,可以打开浏览器,输入 http://localhost:8080,验证是否配置成功。

    step4:关闭Tomcat

    cd /home/soft01/tomcat主目录/bin

    sh shutdown.sh

    ②Windows系统下安装和配置的步骤

    step1:解压到某个盘下

    step2:配置环境变量

    JAVA_HOME(JDK的主目录) 必须配置

    CATALINA_HOME(Tomcat的主目录)可以不配置

    PATH(Tomcat的bin目录)可以不配置

    “我的电脑”右键“属性”,打开“系统属性”的“高级”选项卡,找到“环境变量。

    新建“用户变量”。

    新建JAVA_HOME。

    u 注意事项:新建系统变量或新建用户变量均可,建议新建用户变量。

    新建CATALINA_HOME (可以不配置)。

    新建PATH(可以不配置)。

    u 注意事项:

    v 如果环境变量中已经有PATH,修改该PATH即可,使用“;”分号作分隔,如下所示:

    PATH C:\Program Files\Java\jdk1.6.0_06\bin ;

    D:\apache-tomcat-5.5.23\bin

    v Windows操作系统下以“;”分号为分隔符;linux系统下以“:”冒号为分隔符。

    step3:启动Tomcat

    进入启动Tomcat的bin目录下,双击“startup.bat”。

    接下来,可以打开浏览器,输入 http://localhost:8080,验证是否配置成功。

    step4:关闭Tomcat

    进入启动Tomcat的bin目录下,双击“shutdown.bat”。

    2)Tomcat目录结构简介

    ①bin目录:存放启动和关闭服务器的一些脚本(命令)。

    ②common目录:共享(部署在该服务器上的所有程序都可以使用)的一些jar包。

    ③conf目录:存放服务器的一些配置文件。

    ④webapps目录:部署目录。

    ⑤work目录:服务器运行时,生成的一些临时文件。

    1.4如何写一个Servlet(不使用开发工具)

    step1:先写一个Java类,实现Servlet接口或者继承HttpServlet抽象类。

    public class HelloWorldServlet extends HttpServlet {

    //Tomcat会自动调用service,自己不用再去写方法调用了,所以必须把名字写对!

    public void service(HttpServletRequest request,HttpServletResponse response)

    throws ServletException,IOException{

    //异常必须写两个,不能写成Exception,也不能再多个异常

    //设置一个消息头content-type,告诉浏览器返回的数据类型是一个html文档,以及编码格式。此外,还可以告诉服务器,在使用out输出时,使用指定的编码格式进行编码

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

    //通过响应对象,获得一个输出流

    PrintWriter out=response.getWriter();

    //调用流的方法进行输出,其实质是将处理结果写到了response对象上

    out.println("Hello World");

    /** out.close()不调用也可以,因为Servlet方法执行完毕,容器会自动调用out.close方法*/

    out.close(); } }

    step2:执行编译操作:javac -d . HelloWorldServlet.java

    但是会报错,找不到某些类!其中 -d . 代表把编译后的文件放在当前文件夹下。

    把Tomcat安装目录中common中lib中的servlet-api.jar和刚编写类放一起(是编译时需要用的jar)。

    再次编译:javac -cp servlet-api.jar -d . HelloWorldServlet.java,其中 -cp servlet-api.jar表示告诉Java编译器去哪里找需要的class文件(到servlet-api.jar的jar包中找)。

    step3:打包,即创建一个具有如下结构的文件夹:

    appname(文件夹名起应用名)

    |--WEB-INF(必须大写)

    |--classes(文件夹,放.class文件)

    |--lib(文件夹,放.jar文件,可没有)

    |--web.xml(部署描述文件 url-pattern)

    将编译好的.class文件放入classes文件夹中(如有包,则一起放入)。

    web.xml文件内容:

    xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    helloWorld

    Servletday01.HelloWorldServlet

    helloWorld

    /hello

    step4:部署,将step3创建的文件夹拷贝到Servlet容器特定的文件夹下面(拷贝到Tomcat的webapps目录下)。

    u 注意事项:也可以将step3创建的文件夹使用jar命令进行压缩,生成.war为后缀的文件,然后拷贝。

    step5:启动Servlet容器,访问Servlet。

    访问格式:http://ip:port/appname/url-pattern

    比如在浏览器地址栏输入:http://localhost:8080/web01/hello

    1.5使用MyEclipse开发Servlet

    step1:配置MyEclipse,使得MyEclipse能够管理Tomcat。

    1)点击工具栏上的“Run/Stop/Restart MyEclipse Servers”图标旁边的下拉箭头,选择“Configure Server”。

    2)在弹出的对话框“Preferences”中展开“MyEclipse”--“Servers”--“Tomcat”--“Tomcat5.X”

    u 注意事项:选择你目前电脑上Tomcat的版本,此处以Tomcat5为例。

    3)将Tomat server选项置为“Enable”(默认为“Disable”)。

    4)点击“Tomcat home directory”之后的“Browse”按钮,选择Tomcat主目录,确定,然后“Tomcat base directory”和“Tomcat temp directory”自动生成,点击“OK”。

    u 注意事项:两项可改可不改的:

    v Tomcat下的JDK--“Tomcat JDK name”是自己已安装的JDK(Tomcat也是java写的也得依赖JDK)。

    v 建议Tomcat下的Launch--“Tomcat launch mode”设置为Run model,默认为Debug mode而该模式在有些时候会显示不正常。

    5)回到工具栏上的“Run/Stop/Restart MyEclipse Servers”图标旁边的下拉箭头,选择Tomcat 5.x,点击“Start”。

    6)当在控制台显示“Server startup in XXX ms“,则Tomcat启动成功。

    u 注意事项:如果出现“Address already in use:JVM_Bind”异常,则说明已经启动了一个Tomcat。解决办法:运行shutdown命令,关闭之前开启的Tomcat。

    step2:建立一个Web Project(Web工程),填写“Project ame”,JDK最好选5.0,其他选项默认,点击“Finish”。

    step3:编写Java类和web.xml文件。

    step4:部署项目到Tomcat服务器。

    1)点击工具栏“Deploy MyEclipse J2EE Project to Server”按钮。

    2)弹出对话框“Project Deployments”,点击“Add”按钮。

    3)弹出“New Deployment”对话框,选择“Tomcat 5.x”,点击“Finish”,最后点击"OK"。

    u 注意事项:在对话框“Project Deployments”对话框有4个按钮,常用的为

    ①“Add”按钮:在Tomcat服务器上增加新应用。

    ②“Remove”按钮:删除Tomcat服务器上的新应用。

    ③“Redeploy”按钮:重新部署该应用,一般每次修改后都需要重新部署一下。

    step5:访问Tomcat服务器上的Servlet实例。

    访问格式:http://ip:port/appname/url-pattern

    比如在浏览器地址栏输入:http://localhost:8080/web01/hello

    u 注意事项:

    v 在IDE工具(集成开发环境)中启动Tomcat部署项目后,不需要重新启动服务器,系统会自动部署。

    v IDE工具简化了Servlet的开发步骤:

    第1步 写一个java类 手动

    第2步 编译 自动

    第3步 打包 自动

    第4步 部署 不用手动拷贝,点一下

    第5步 启动服务器,访问servlet 手动

    默认情况下,应用名和工程名相同。

    v 工程--属性--MyEclipse--Web--Web Context可修改部署后的应用名。

    v 新建Web工程时也可以手动在Context root RUL中更改应用名。

    1.6 Servlet是如何运行的

    比如,在浏览器地址栏输入:http://ip:port/web01/hello(web01/hello为请求资源路径)。

    step1:浏览器依据ip和port建立与Servlet容器之间的连接。

    step2:浏览器将请求数据打包(即按照http协议的要求,将相关数据封装成一个数据包,一般称之为请求数据包)并发送给Servlet容器。

    step3:Servlet容器解析请求数据包,并将解析之后得到的数据放到已创建的request对象上,同时,容器也已经创建好了一个response对象。

    step4:Servlet容器依据请求资源路径(即/web01/hello)找到Servlet的配置,然后创建Servlet对象(根据xml文件里配置的类而创建)。

    step5:Servlet容器接下来调用Servlet对象的service方法,并且会将事先创建好的request对象和response对象作为service方法的参数传递给Servlet对象。

    step6:Servlet可以通过request对象获得请求参数,进行相应的处理,然后将处理结果写到response对象上。

    step7:Servlet容器读取response对象上的数据,然后将处理结果打包(响应数据包)并发送给浏览器。

    step8:浏览器解析响应数据包,将返回的数据展现给用户。

    1.7常见错误及解决方式

    1)404:是一个状态码(是一个三位数字,由服务器发送给浏览器,告诉浏览器是否正确处理了请求),404的意思是说:服务器依据请求资源路径,找不到对应的资源。

    解决:①依据http://ip:port/appname/url-pattern检查你的请求地址是否正确。

    ②仔细检查web.xml,特别要注意servlet-name是否一致。

    2)500:服务器处理出错,一般是因为程序运行出错。

    解决:①检查程序的代码,比如:是否继承。

    ②检查web.xml,类名要填写正确。

    3)405:服务器找不到对应的service方法。

    解决:检查service方法的签名(方法名、参数类型、返回类型、异常类型)。

    1.8案例:根据请求次数显示结果和显示当前时间

    十、请求转发

    10.1什么是转发

    一个Web组件(Servlet/JSP)将未完成的处理通过容器转交给另外一个Web组件继续完成。常见的情况是:一个Servlet将数据处理完毕之后,转交给一个JSP去展现。

    10.2如何转发

    step1:绑定数据到requset:request里有个HashMap。

    request.setAttribute(String name,Object obj);//name:绑定名。obj:绑定值。

    另一个方法获取绑定值:

    Object request.getAttribute(String name);//如果绑定对象的值不存在,会返回null

    step2:获得一个转发器:url:要转发给哪一个Web组件

    RequestDispatcher rd=request.getRequsetDispatcher(String url);

    step3:转发

    rd.forward(request,response);//JSP和Servlet会共享相同的请求和响应对象

    step4:在转发的目的地,可以使用request.getAttribute方法获得绑定的数据,然后进行处理。

    10.3编程需要注意的两个问题

    1)转发之前,先清空response对象中缓存的数据。

    out.println("hello");//看不到结果

    rd.forward(request, response);//能看到结果

    2)转发之前,不能调用out.close()或着out.flush只能同时处理一个响应

    out.println("hello");//看到结果

    out.close();

    rd.forward(request, response);//看不到结果

    10.4转发原理图

    10.5转发的特点

    1)转发的目的地只能够是同一个应用内部的某个组件的地址。

    2)转发之后,浏览器地址栏的地址不变。

    3)转发所涉及的各个Web组件可以共享同一个request对象和response对象

    10.6转发和重定向的区别

    1)转发的目的地只能是同一个应用内部某个组件的地址,而重定向的目的地是任意的。

    2)转发之后,浏览器地址栏的地址不变,而重定向会变。

    3)转发所涉及的各个Web组件可以共享request对象,而重定向不可以。

    4)转发是一件事情未做完,而重定向是一件事情已经做完。

    10.7何时用重定向

    1)比如用户作删除操作时,删除操作已做完,重定向访问list.do

    10.8何时用转发

    1)用户调用list.do

    2)有ListServlet到数据库查询数据

    3)ListServlet将查询到的结果通过Servlet引擎(通信模块)转发给负责显示的empList.jsp

    4)empList.jsp将数据通过友好的界面显示给用户,比如用户作删除操作时,删除操作已做完,重定向访问list.do

    10.9案例:修改6.4案例中step7中的ListEmpServlet.java

  • 上一篇:我的俄罗斯方块项目总结1

    下一篇:java经典核心基础(一)

相关资讯
2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56