servlet笔记.docx

上传人:b****5 文档编号:8308631 上传时间:2023-01-30 格式:DOCX 页数:40 大小:35.38KB
下载 相关 举报
servlet笔记.docx_第1页
第1页 / 共40页
servlet笔记.docx_第2页
第2页 / 共40页
servlet笔记.docx_第3页
第3页 / 共40页
servlet笔记.docx_第4页
第4页 / 共40页
servlet笔记.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

servlet笔记.docx

《servlet笔记.docx》由会员分享,可在线阅读,更多相关《servlet笔记.docx(40页珍藏版)》请在冰豆网上搜索。

servlet笔记.docx

servlet笔记

Servlet笔记

一、servlet基础

1、什么是servlet?

sun公司制订的一种用来扩展web服务器功能的

组件规范。

1)扩展web服务器功能

早期的web服务器只能够处理静态资源的请求,

不能够依据用户的请求进行计算,生成动态资源。

解决方式有两种:

解决方式一:

使用CGI接口,编写相应的程序。

当请求到达

web服务器时,服务器可以调用CGI程序来处理。

使用CGI程序的问题是:

开发复杂、可移值差、

如果处理不当,性能也比较低。

解决方式二:

使用容器+组件的方式。

web服务器在收到请求后,可以调用容器来处理,

容器用于提供一些基础服务(比如参数的处理,

指的是分析二进制数据流,获得参数),

具体的请求,由容器来调用组件来处理。

2)组件规范

a,什么是组件?

符合规范,实现某种特定功能的,并且可以

部署在某种容器上运行的程序模块。

b,什么是容器?

符合规范,提供组件运行环境的程序。

该程序

还要管理组件的生命周期(即创建组件的实例、

分配相应的资源,调用组件的方法、并且在不再

需要组件时删除其实例的整个过程)。

2、如何开发一个servlet?

step1写一个java类,实现Servlet接口或者

继承HttpServlet类。

step2编译成.class文件。

step3打包(按照规范,定义一个目录结构)

appname

WEB-INF

classes(.class文件)

lib(jar文件,可选)

web.xml(描述文件)

该描述文件可以参考tomcat自带的一些

案例(tomcat主目录/webapps/servlet-examples)。

step4部署

指的是将step3生成的整个目录结构或者

将该结构使用jar命令打包之后生成的

.war文件拷贝到服务器特定的目录(对于

tomcat服务器,就是webapps)。

step5启动服务器,访问servlet。

访问格式:

http:

//ip:

port/appname/

servlet的路径

3、安装和使用tomcat

安装:

将/opt/apache-tomcat5.5...压缩文件

解压到/home/soft01/tomcat5

主目录(tomcat5)。

配置环境变量:

cd/home/soft01

vi.bash_profile

在该文件当中,添加以下几个环境变量

JAVA_HOME:

CATALINA_HOME:

/home/soft01/tomcat5

PATH:

/home/soft01/tomcat5/bin

启动tomcat:

cd/home/soft01/tomcat5/bin

shstartup.sh

或者

shcatalina.shrun

在浏览器地址栏输入:

http:

//localhost:

8080

关闭tomcat:

shshutdown.sh

1、servlet的运行过程

从浏览器输入http:

//ip:

port/helloweb/sayHello?

name=zs

开始分析:

step1浏览器依据ip,port连接服务器。

step2浏览器将请求数据打包(即按照http

协议,将请求数据打成一个数据包,里面包含

请求资源路径(/helloweb/sayHello...))。

step3浏览器发送请求(即将请求数据包发送给服务器)。

step4服务器解析请求数据包,将数据包中的数据

提取出来,生成一个request对象(请求对象,其作用

是方便servlet读取请求数据)。

另外,还要创建一个

response对象(其作用是,servlet将处理结果放置

到该对象上之后,服务器可以从该对象获取结果,生成

相应的响应数据包发送给浏览器)。

step5服务器依据"/helloweb"找到部署目录下的

文件夹,找到该文件夹下面的web.xml文件,通过该

文件,找到servlet类名,接下来通过反射机制创建

servlet对象。

step6服务器调用servlet对象的service()方法。

在调用该方法时,会将step4中创建的request,response

对象作为参数传递。

step7servlet处理请求,在处理请求时,可以通过

request获得请求数据,也可以将处理结果放到response

对象上。

step8服务器从response中获取数据,生成响应数据包,

发送给浏览器。

step9浏览器解析响应数据包,生成相应的界面。

从中可以看出:

1)、开发一个servlet,我们只需要关注如何处理请求,

不要关心网络通讯问题以及协议相关的问题,因为这些

操作都是由服务器来负责的。

2)、servlet不依赖于特定的某个容器(服务器)来运行。

练习:

写一个DateServlet,输出当前系统时间。

输出格式

"2011-12-23"。

访问方式:

http:

//localhost:

8080/web02_lab/time

2、http协议(了解)

1)什么是http协议?

由w3c定义的一套网络应用层协议,定义了浏览器

(或者其它客户端程序)与web服务器之间通讯的过程

与数据的格式。

2)通讯的过程

step1浏览器向服务器发送建立连接的请求。

step2浏览器将要发送的数据打包,发送给服务器。

step3服务器处理请求,将请求结果打包,发送给浏览器。

step4服务器关闭连接。

如果浏览器再次发送请求,需要再次建立连接。

3)数据格式

a,请求数据包(浏览器发送给服务器)

请求行:

请求方式(get/post)请求资源路径协议的类型与版本

若干消息头:

a1、消息头由w3c定义,通讯的各方都会遵守。

a2、浏览器与服务器在打包时,会自动生成一些

消息头。

也可以编程生成需要的消息头。

实体内容:

只有当请求方式是post时,请求

参数才会放在这儿。

b,响应数据包(服务器发送给浏览器)

状态行:

协议的类型与版本状态码状态描述

b1、状态码是一个数字,有特定的含义,比如

500:

系统出错,一般是由于程序运行出错引起。

404:

找不到对应的资源。

一般是由于路径写错。

200:

正确。

若干消息头:

实体内容:

服务器返回给浏览器的处理结果。

3、get请求与post请求

1)哪一些是get请求。

a,在浏览器地址栏直接输入某个地址。

b,表单默认提交的方式。

c,点击链接。

2)哪一些是post请求

a,表单method="post"。

3)比较两种方式:

a,get方式将请求参数放在请求行,放置的数据

大小有限制。

而post方式将请求参数放在了实体内容

里面,理论上大小没有限制。

b,get方式会将请求参数显示在浏览器地址栏,

不安全,而post不会显示,相对安全。

get方式适合向服务器请求资源或者提交少量的数据,

而post方式适合向服务器提交大量数据。

练习:

写一个BMIServlet,可以依据用户输入的

身高(height),体重(weigth),性别(gender)

计算该用户的bmi指数。

bmi指数反映了一个人

的身体体质。

比如,用户通过表单输入

体重70kg,身高是1.75,性别m(m表示男,f表示女)

则BMIServlet依据这三个参数,进行相应的计算,最

输出:

"你的bmi指数是22.86你的体质适中"。

bmi=weigth/height/height

EX:

70kg/1.75/1.75=22.86

成人的bmi数值

体重指数,男性,女性

过轻,低于20,低于19

适中,20<=bmi<25,19<=bmi<24

过重,25<=bmi<30,24<=bmi<29

肥胖,30<=bmi<35,29<=bmi<34

非常肥胖,高于35,高于34

专家指出最理想的体重指数是22

1、表单的处理

(1)获取表单参数值

//依据参数名,获取参数值。

Stringrequest.getParameter(StringparaName);

要注意:

a,paraName与实际的参数名不一致,则返回null。

b,如果有多个参数名相同,则要使用另外一个方法

//依据参数名,获取参数值(多个参数名相同)

String[]request.getParameterValues(StringparaName);

要注意:

a,paraName与实际的参数名不一致,则返回null。

此外,还要注意:

一般来说,客户端,需要添加表单验证(即使用

javascript对表单中的数据进行合法性验证,比如

,用户名没有填写,则不能提交)。

但是,客户

端有可能禁止javascript,此时,客户端验证会

失效,所以,服务器端最好也加上相应的验证。

(2)中文问题

step1html页面当中,添加

content="text/html;charset=utf-8">

另外,表单的提交方式要设置成post。

step2服务器端,在servlet类里面,添加

request.setCharacterEncoding("utf-8");

这儿解释一下:

浏览器会对表单中的中文参数值进行编码,

它会选择打开该表单所在的页面时的编码格式来

进行编码。

request.setCharacterEncoding方法其作用是,

设置解码格式,该解码格式应该与客户端一致。

混杂模式:

ie浏览器在打开一个html文件时,如果没有

文档类型声明(即Doctype...这句话),则打开

混杂模式,即让浏览器降级,目的是为了兼容

老的html页面。

混杂模式有一个问题,即对

css的支持不好,可能会出现一些界面混乱的问题。

所以,建议在写一个html文件时,最好加上

文档类型声明,即

DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:

//www.w3.org/TR/html4/loose.dtd">

2、mysql的简单使用

1)进入mysql控制台

mysql-uroot;

2)常用指令

查看当前所有数据库

showdatabases;

选择要使用的数据库

usetest;

查看当前数据库所有的表

showtables;

建新的数据库

createdatabasejd1110db

defaultcharactersetutf8;

建表

createtablet_employee(

idbigintprimarykeyauto_increment,

namevarchar(50),

salarydouble,

ageint);

createtablet_user(

idbigintprimarykeyauto_increment,

namevarchar(255),

usernamevarchar(50)unique,

infotext,

birthdaydate,

registTimedatetime,//timestamp

flagtinyint,//0~255-128~127

idCardchar(18),

salarydecimal(8,3)

);

auto_increment:

表示当前列是自增长列,插入记录

时,该列的值由数据库自动生成。

unique:

唯一性约束

text类型:

相当于clob,用于保存大量的字符。

3、访问数据库

step1将mysql的jdbc驱动程序相关的jar文件

copyWEB-INF/lib下。

step2在servlet类当中,使用jdbc访问数据库。

但是,要注意两点:

a,如果数据库当中,要处理中文数据,要保证

jdbc驱动程序能够获知当前数据库保存中文的编码是

什么。

mysql数据库的某些jdbc驱动程序不能够正确

获知数据库保存中文的编码,需要明确指定。

jdbc:

mysql:

//localhost:

3306/jd1110db?

useUnicode=true&characterEncoding=utf8

b,要正确处理异常。

step1对于系统异常,先记录日志,然后

抛给服务器。

throwsnewServletException(e);

step2配置一个错误处理页面,当服务器

捕获到错误之后,会调用该错误处理页面。

500

/error.html

以上配置的含义:

当服务器碰到系统异常,

会调用error.html页面。

写一个ListEmpServlet,该servlet以表格的形式返回

所有雇员的信息。

http:

//localhost:

8080/web03_2/list

写一个DelEmpServlet,删除指定id的雇员。

http:

//localhost:

8080/web03_2/del?

id=1;

1、重定向

1)什么是重定向?

服务器向浏览器发送一个状态码(302)及一个消息头

(location),浏览器收到以后,立即向location所指

向的地址发请求。

2)编程

response.sendRedirect(Stringurl);

需要注意的问题:

重定向之前,不要刷新response当中的数据,否则

会出错。

重定向之前,会清空response当中的数据。

3)特点

a,重定向的地址是任意的。

b,重定向之后,浏览器的地址栏的地址会变成

location所指定的地址。

2、servlet容器如何处理请求资源路径?

比如,输入http:

//ip:

port/web04/abc.html

请求资源路径是:

/web04/abc.html

step1容器依据appname,找到该应用对应的文件夹。

比如,对于tomcat,会查找到webapps文件夹下面对应的

web04文件夹。

step2将/abc.html与web.xml中的进行

匹配:

a,精确匹配:

b,通配符匹配:

即使用"*"来代替任意的字符串。

比如:

/abc/*

c,后缀匹配:

即使用"*.任意的字符串"来进行匹配。

比如:

*.do

表示任意的以.do结尾的请求均匹配。

step3如果均不匹配,则查找有没有一个abc.html文件。

有,则返回,没有,则返回404。

3、如何让一个servlet处理多个请求。

step1servlet使用后缀匹配的模式。

step2获得请求资源路径。

Stringrequest.getRequestURI();

step3分析请求资源路径,依据请求路径的不同,

执行不同的分支(if..else..)。

开发一个简单的web应用:

学生信息管理

可以实现学生信息的添加、

列表(只显示学号、姓名、性别,当点击查看时,

会显示该学员的所有信息)、

删除、查看、修改五项功能。

学生的信息包含:

学号姓名性别家庭住址

createtablet_student(

idbigintprimarykeyauto_increment,

stuNumvarchar(20)unique,

namevarchar(20),

gendarchar

(1),

addressvarchar(50));

1、DAO

1)什么是DAO?

DataAccessObject(数据访问对象)。

封装数据访问逻辑的一个模块,调用者在使用dao

时,不用了解底层的数据访问细节。

使用dao的好

处是:

当数据访问逻辑发生改变,只要接口不变,不会

影响到调用者。

2)怎样写一个DAO?

a,实体类

与数据库中的表对应的一个java类,dao实现者

需要将表中的记录转换成实体类的实例。

比如与t_employee表对应的一个实体类Employee

b,DAO接口

声明一系列与实现无关的方法。

比如EmployeeDAO接口提供下列方法:

publicvoidsave(Employeee)throwsSQLException;

//throwsSQLException不好,因为实现者只能

//使用jdbc技术来实现该方法。

publicvoidsave(Employeee)throwsException;

publicvoidsave(Employeee)throwsRuntimeException;

publicListfindAll()

c,DAO实现

使用具体的技术来实现DAO接口的一个具体类。

比如,使用jdbc技术实现EmployeeDAO接口。

EmployeeDAOImpl类。

d,DAO工厂

封装了DAO实例创建的过程,调用者通过工厂来

获得某个DAO实例。

2、servlet生命周期

1)什么是servlet生命周期?

servlet容器如何创建servlet对象、如何为该

对象分配相应的资源(初始化)、如何调用其方法

来处理请求、以及如何销毁servlet对象的整个

过程。

2)servlet的核心接口与类

a,Servlet接口

a1,init(ServletConfigconfig):

容器在

创建好servlet对象之后,必须调用该方法来

完成初始化。

容器在调用该方法时,必须创建好一个config

对象。

a2,service(ServletRequestreq,ServletResponseres)

容器在收到一个请求之后,会调用该方法来处理

请求。

容器在调用该方法时,必须创建好req,res两个

对象。

a3,destroy():

容器在删除servlet对象之前,会调用该方法,

用于释放资源。

b,GenericServlet抽象类

主要实现了Servlet接口中声明的init,destroy方法。

c,HttpServlet抽象类

继承了GenericServlet,主要实现了service方法。

该方法实现的逻辑如下:

依据请求的不同,调用不同的do***方法。

比如,get请求,调用doGet方法。

而doGet方法

实现是抛出异常,需要开发者去override

doGet方法。

d,ServletConfig接口

访问Servlet的初始化参数(web.xml文件中,为

servlet配置的一些参数)。

StringgetInitParameter(StringparaName);

3)生命周期的四个阶段

1、jsp

1)什么是jsp?

javaserverpage(java服务器端页面技术)

sun公司制订的一种服务器端动态页面生成技术的规范。

2)jsp的优点

直接使用servlet生成动态页面,过于烦琐,而且,

维护困难。

而使用jsp,只需要在html代码当中添加

少量的java代码,就可以实现动态页面,开发相对

简单,维护方便。

3)如何写一个jsp?

写一个以.jsp为后缀的文件,在文件里面,

可以添加html或者java代码。

a,html(包括css,javascript)

直接写就可以了。

b,java代码

方式一:

使用java代码片断

<%java代码%>

方式二:

使用jsp表达式

<%=java表达式%>

c,指令:

告诉容器,在将.jsp文件转换成.java

文件时,做一些额外的处理,比如导包。

语法:

<%@指令名属性名=属性值%>

c1、page指令

import属性:

导包。

比如<%@pageimport="java.util.*"%>

<%@pageimport="java.util.*,java.text.*"%>

contentType属性:

作用与以前编写Servlet代码时所写的

response.setContentType方法等价。

pageEncoding属性:

告诉容器,.jsp文件的编码是什么。

注意,

该编码必须与实际保存该文件的编码一致!

d,隐含对象:

在.jsp文件中,可以直接使用的对象。

因为容器在生成的.java文件中,会包含声明和创建

这些对象的代码。

d1,out

d2,request

d3,response

4)jsp是如何执行的?

step1、容器会将.jsp文件先转换成一个.java文件

(.java文件其实就是一个servlet)。

转换的规则:

html---->放到service()方法里,

使用out.write()输出。

write()方法会将null转

换成""输出。

java代码片断-->放到service()方法里,照搬。

jsp表达式-->放到service()方法里,

使用out.print()输出。

2、转发

1)什么是转发?

一个web组件(jsp/servlet)将未完成的处理交

给另外一个web组件继续完成。

一般情况下,一个servlet将获得的数据转发给

一个jsp,jsp会将数据以合适的方式展现给用户。

2)如何转发?

step1将数据绑订到request对象上。

request.setAttribute(Stringname,Objectobj);

//解除绑订

request.removeAttribute(Stringname);

//依据绑订名获得绑订值,如果name对应的值不存在,

//返回null。

Objectrequest.getAttribute(Stringname);

step2获得转发器对象。

RequestDispatcherrd=

request.getRequestDispatcher(Stringurl);

step3转发

rd.forward(request,response);

1、转发编程需要注意的问题

在转发之前,不要out.close(),out.flush(),否则会

出错。

转发之前,会将response中缓存的数据清空。

2、特点

1)转发的目的地只能是同一个应用内部的各个

组件。

2)转发发生之后,浏览器地址栏的地址不会发生

改变。

3、转发与重定向的区别

1)相同点:

都可以实现一个web组件间接地调用另外一个

web组件。

2)区别:

a,重定向:

浏览器地址栏地址会改变。

转发:

不变。

b,重定向:

不能够共享request,response对象。

转发:

可以共享request,response对象。

(response,request对象的生存时间是一次请求

与响应期间)。

c,重定向:

地址任意

转发:

同一个应用内部

4、路径问题

a、链接地址

b、表单提交

c、重定向response.sendRedirect("路径"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1