ServletWord格式.docx

上传人:b****6 文档编号:18594377 上传时间:2022-12-28 格式:DOCX 页数:34 大小:31.42KB
下载 相关 举报
ServletWord格式.docx_第1页
第1页 / 共34页
ServletWord格式.docx_第2页
第2页 / 共34页
ServletWord格式.docx_第3页
第3页 / 共34页
ServletWord格式.docx_第4页
第4页 / 共34页
ServletWord格式.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

ServletWord格式.docx

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

ServletWord格式.docx

3、tomcat的安装与使用

(1)安装

可以从www.apache.org下载tomcat的安装文件,或者

将/opt/apache-tomcat.zip文件解压到/home/soft01。

(2)启动

cd/home/soft01/apache-tomcat/bin

shstartup.sh(window:

startup)

启动有问题的同学:

shcatalina.shrun

在浏览器地址栏输入:

http:

//localhost:

8080

(3)关闭

shshutdown.sh

(4)各个目录的作用:

bin:

可执行文件,比如启动和关闭服务器的命令文件。

common:

存放共享的文件。

conf:

服务器的配置文件。

webapps:

部署目录。

work:

服务器运行时产生的一些临时文件。

4、使用myeclipse来开发Servlet?

step1,启动myeclipse,配置myeclipse,使myeclipse

可以启动和关闭tomcat。

step2,创建一个web工程。

5、servlet是如何运行的?

在浏览器地址栏输入http:

8080/web01

/sayHello

step1,浏览器依据ip,port建立与服务器之间的连接。

step2,浏览器将请求数据(请求资源路径,请求参数)按照http协议

打包(http请求数据包),发送给服务器。

step3,服务器解析请求数据包,将请求数据封装到request

对象里面(封装的目的,是为了方便servlet获得请求数据包中的

数据,如果没有request对象,就需要在servlet类里面编写

解析请求数据包的代码)。

另外,服务器还会创建一个对象response

对象(用来存放servlet处理的结果)。

step4,服务器依据请求资源路径(web01/sayHello)找到对应的

servlet的配置,创建servlet对象。

step5,服务器会调用servlet对象的service方法(在调用该方法时,

会将事先创建好的request,response对象作为参数传递进来)。

可以在service方法里面,通过request获得请求数据,也可以

将处理之后的结果存放到response对象上。

step6,服务器从response对象上取出处理结果,生成响应数据包。

发送给浏览器。

step7,浏览器解析响应数据包,取出处理结果,生成相应的界面。

Day02

1、http协议(了解)

(1)什么是http协议?

超文本传输控制协议(w3c定义),它定义了浏览器与

web服务器之间数据传输的过程以及数据的格式。

(2)数据传输的过程:

step1,浏览器建立与服务器之间的连接。

step2,浏览器打包,发送请求。

step3,服务器处理请求之后,将处理结果打包,发送响应。

step4,服务器立即关闭连接。

特点:

一次请求,一次连接。

优势:

“效率高”,服务器可以在一段时间内,尽可能为更多

的客户服务。

(3)数据的格式

a,请求数据包

请求行:

请求方式请求资源路径协议类型及版本

若干消息头:

消息头是一般情况下是由浏览器或者服务器自动生成的

,在特定情况下,也可以通过编程的方式来生成一些

消息头。

比如,浏览器在向服务器发请求时,会生成

user-agent消息头,告诉服务器浏览器的类型和版本。

实体内容:

只有当请求方式是post方式时,请求参数才会放到

实体内容里面。

当请求方式是get时,请求参数会添加

到请求资源路径里面。

b,响应数据包

状态行:

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

状态码:

一个三位数字,表示不同含义,状态码

由w3c定义。

404:

依据请求资源路径,找不到对应的资源。

200:

服务器处理正常

500:

系统错误,一般是程序在执行过程当中,发生了

异常。

405:

找不到service方法。

服务器也可以发送一些消息头给浏览器,比如,发送

content-type消息头,告诉浏览器服务器返回的数据的

类型。

实体内容:

处理结果。

2、get与post请求

(1)哪一些情况下,浏览器以get方式向服务器发请求:

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

b,点击链接

c,表单默认提交方式

(2)哪一些情况下,浏览器以post方式向服务器发请求:

a,设置表单的method="

post"

(3)get与post方式的区别:

get方式会将请求参数添加到请求资源路径的后面,

因为请求行能够存放的数据量有限(2k左右),所以get方式

只能提交少量的数据给服务器。

get方式会将请求参数显示在浏览器地址栏,不安全。

post方式会将请求参数添加到实体内容里面,理伦上讲,

提供的数量大小没有限制。

另外,不会将请求参数显示在

浏览器地址栏,相对安全。

要注意,http协议不会对数据

做加密处理。

3、常见的错误及处理方式

(1)404:

错误原因:

请求资源路径写错。

解决方式:

检查请求资源路径,

按照http:

port/appname/servlet-url标准检查。

(2)500:

程序运行出错。

检查程序代码。

比如检查程序代码是否

添加了数据验证代码(比如,程序没有添加数据验证代码,

用户就有可能提交一些非法的参数值)。

此外,还要检查和代码相关的配置文件是否正确。

另外,程序如果在运行过程当中,依赖一些其它的资源,

比如要访问数据库,那么要看数据库是否正常运行。

(3)405

服务器找不到service方法。

检查service方法的签名。

4,处理中文

(1)servlet如果要输出中文

解决方式:

response.

setContentType("

text/html;

charset=支持中文的编码"

);

java语言在内存里面,保存的所有字符采用unicode编码格式。

当将内存当中的字符输出到硬盘上的文件时,

需要做编码(unicode-->

某种本地编码格式,比如gbk,utf-8)

反过来,将文件里的内容读取到内存,

需要解码(某种本地编码格式,比如gbk,utf-8-->

unicode)。

(2)表单当中有中文参数值,如何处理?

出现乱码问题的原因:

当点击表单提交按钮时,浏览器会对表单中的中文参数值

按照打开表单所在的页面时的编码格式进行编码。

服务器在默认情况下,会使用iso-8859-1这种编码格式

进行解码。

方式一:

request.setCharacterEncoding("

utf-8"

方式二:

str=newString(str.getBytes("

iso-8859-1"

),"

注意:

方式一只能处理post请求。

练习:

写一个add_emp.html,该html文件提供一个表单,包含

员工姓名,薪水,年龄三个表单域。

当点击提交,提交给

AddEmpServlet来处理,该Servlet读取三个请求参数值,

然后输出员工的所有信息。

5、使用mysql数据库

(1)登录

mysql-uroot;

(2)显示所有的数据库实例

showdatabases;

(3)创建一个新的数据库实例(并且设置缺省的字符集是utf8)

createdatabasejd1208dbdefaultcharactersetutf8;

(4)使用某个数据库实例

usejd1208db;

(5)查看当前数据库有哪些表

showtables;

(6)建表

createtablet_emp(

idintprimarykeyauto_increment,

namevarchar(32),

salarydouble,

ageint

);

auto_increment:

自增长列,每当插入一条新的记录,

数据库会自动生成一个值。

insertintot_emp(name,salary,age)values('

zs'

10000,24);

ww'

20000,34);

6、在Servlet类里面,使用jdbc访问数据库。

step1,将jdbc驱动程序所对应的.jar文件拷贝到WEB-INF\lib

下。

step2,在servlet类里面,使用jdbc访问数据库,要注意

异常的处理。

写一个ListEmpServlet,该servlet查询t_emp表,将所有

记录查询出来,然后生成一个表格显示给用户。

http:

port/web02/list

Day03

1、重定向

(1)什么是重定向?

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

Location(包含有一个地址,该地址称为重定向地址);

浏览器会立即向重定向地址发送请求。

(2)如何重定向?

//url:

重定向的地址,可以是任意的一个地址

response.sendRedirect(Stringurl);

(3)编程需要注意的问题

a,在重定向之前,服务器会先清空response中

存放的数据。

b,在重定向之前,不能够调用out.flush(),out.close()。

(4)特点

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

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

2、dao(dataaccessobject)

(1)dao是什么?

封装了数据访问逻辑的模块。

(2)如何写一个dao?

step1,实体类

用来封装记录,方便程序操作。

比如,在数据库里面有一张表t_emp,可以设计一个

实体类Employee。

step2,dao接口

比如,为了方便对t_emp表进行操作,可以设计一个

接口EmployeeDAO

//接口设计,不应该涉及具体的实现技术。

publicList<

Employee>

findAll()throwsException;

step3,实现dao接口

比如,写一个EmployeeDAOImpl类

step4,工厂类

能不能做到dao的实现发生了改变,比如从jdbc

的实现改为hibernate的实现,不影响调用者?

可以通过引入"

工厂设计模式"

来解决:

什么是“工厂”,工厂负责为调用者提供一个符合接口

要求的对象,调用者不用了解对象的创建细节。

这样

做的好处是,当对象的创建细节发生了改变,不会

影响到调用者。

Day04

 

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

比如,在浏览器地址栏输入http:

port/web04/abc.html

其中"

/web04/abc.html"

称为请求资源路径,会放到请求数据包

里面,发送给servlet容器(web服务器)。

step1,依据应用名("

/web04"

)找到应用所在的文件夹,然后

找到web.xml文件,去匹配"

/abc.html"

step2:

匹配过程:

精确匹配:

通配符匹配:

使用"

*"

来代替任意的字符。

比如:

<

url-pattern>

/*<

/url-pattern>

/abc/*<

后缀匹配:

*."

加上后缀。

*.do<

匹配所有以.do结尾的请求。

step3:

如果没有匹配成功,此时会认为是一个文件,

去查找该文件,如果找到,返回;

找不到,返回404。

3、让一个servlet处理多种不同请求。

step1, 使用后缀匹配模式。

step2, 在servlet的service方法里面,分析

请求资源路径。

4、servlet的生命周期

(1)生命周期的含义?

servlet容器创建servlet对象,分配资源进行初始化操作,

然后调用相应方法处理请求以及销毁servlet对象的过程。

(2)生命周期包括四个阶段:

a,实例化(创建servlet对象)

a1,实例化在什么时候进行?

第一种情况:

当请求到达容器时,容器查找对应的

servlet对象是否已经存在,如果不存在,则创建;

如果已经存在,则不再创建。

第二种情况:

容器事先创建好servlet对象。

只需要

在web.xml文件中,添加<

load-on-startup>

配置即可。

a2,如何实例化?

调用servlet的构造器。

b,初始化(分配资源)

b1,如何初始化?

调用servlet的init(ServletConfigconfig)方法,

容器在调用该方法时,会事先创建好一个config对象,

该对象的作用是提供了访问servlet的初始化参数的方法。

b2,初始化参数

step1,在web.xml文件里,使用<

init-param>

配置

初始化参数。

step2,使用ServletConfig提供的

getInitParameter(StringparaName)获得参数值。

b3,如何实现自己的初始化处理逻辑?

overrideinit(ServletConfigconfig)方法。

overrideinit()方法(推荐)

b4,init方法只会执行一次。

c,就绪(调用相应方法处理请求)

容器调用service方法来处理请求。

d,销毁(销毁servlet对象)

容器在销毁servlet对象之前,会调用destroy方法。

只会执行一次该方法。

(3)生命周期相关的接口与类

a,Servlet接口

init(ServletConfigconfig)

service(ServletRequestreq,ServletResponseres)

destroy()

b,GenericServlet抽象类

实现了init,destroy方法。

c,HttpServlet抽象类

实现了service方法,该方法会依据请求类型分别调用

doGet,doPost方法。

所以我们在写一个servlet时,

可以选择两种方案来编写处理逻辑:

第一种方式:

overrideservice方法

第二种方式:

overridedoGet,doPost方法

d,ServletConfig接口

StringgetInitParameter(StringparaName);

e,ServletRequest接口/HttpServletRequest接口

f,ServletResponse接口/HttpServletResponse接口

给产品计税:

产品的价格(price)=原始价格*(1+税率)。

税率与销售城市的对应关系可以写在web.xml文件里面,

比如:

<

<

param-name>

taxRate<

/param-name>

param-value>

bj,0.13;

sh,0.14;

cs,0.08<

/param-value>

/init-param>

Day05

1,jsp是什么?

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

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

技术当中,只需要在html标记当中,添加少量的java代码,就可

以实现动态页面。

因为直接使用servlet输出动态页面非常麻烦(需要使用

out.println),并且难以维护(如果页面发生改变,需要修改

java代码)。

所以,sun才会制订jsp规范。

2,如何写一个jsp文件?

step1,写一个以.jsp为后缀的文件。

step2,在该文件里面,可以添加如下的内容:

1)html(css,javascript):

直接写。

2)java代码:

a,java代码片断

%java代码%>

b,jsp表达式

%=java表达式%>

3)隐含对象:

a,隐含对象是什么?

是在.jsp文件里面,可以直接使用的一些对象,

比如out,request,response。

b,为什么可以直接使用?

因为容器会自动添加创建这些隐含对象的代码。

4)指令:

a,指令是什么?

通知容器,在将.jsp文件转换成.java文件时做一些

额外的处理,比如导包。

b,指令的基本语法?

%@指令名称 属性%>

c,page指令

import属性:

导包

比如:

<

%@pageimport="

java.util.*"

%>

java.util.*,java.text.*"

contentType属性:

设置response.setContentType的内容。

pageEncoding属性:

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

这样,容器在读取.jsp文件的内容时,就不会发生乱

码问题。

3,jsp是如何执行的?

step1,容器先将.jsp文件转换成一个.java文件(其实,就是将

jsp转换成一个对应的servlet)。

a,html------>

service方法里,使用out.write输出(

write方法会将"

null"

转换成"

"

输出)。

b,<

%%>

------>

service方法里,照搬。

c,<

%=%>

service方法里,使用out.print输出。

out.print();

step2,执行servlet的service方法。

4、转发

(1)什么是转发?

一个web组件(servlet,jsp)将未完成的处理通过容器

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

常见的情况是:

一个servlet获得数据之后,转发给

一个jsp来生成相应的页面。

(2)如何转发?

step1,绑订

//绑订数据到request

request.setAttribute(Stringname,Objectobj);

//解除绑订

request.removeAttribute(Stringname);

//依据绑订名称获得绑订值,如果找不到,返回null。

Objectrequest.getAttribute(Stringname);

step2,获得转发器

转发的目的地。

RequestDispatcherrd=

request.getRequestDispatcher(Stringurl);

//step3,转发

rd.forward(request,response);

(3)转发需要注意的问题

a,在转发之前,服务器会清空response中的所有数据。

b,在转发之前,不能够调用out.flush(),out.close()。

a,转发的目的

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

当前位置:首页 > 高等教育 > 农学

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

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