当前位置:文档之家› Servlet总结

Servlet总结

Servlet总结
Servlet总结

一、SERVLET基础

1 .组件是什么?

是符合一定规范,实现了部分功能的软件模块,组件需要部署到相应的容器里面才能运行。

2 容器是什么?

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

3、什么是servlet?

sun公司制订的一种用来扩展web服务器功能的组件规范。偏重于业务逻辑的实现4、什么是servelet容器?

是符合一定规范,为servlet组件提供运行环境的程序。

5、如何写一个servlet?

step1,写一个java类,要实现Servlet接口或者继承HttpServlet抽象类。

step2,编译。(javac -cp servlet-api.jar -d . 类名.java)

step3,打包。

创建一个符合如下结构的文件夹:

appname (应用名)

WEB-INF

classes(放字节码文件)

lib(可选,放.jar文件)

web.xml(部署描述文件)

注:一般在开发完成之后,交付给用户去使用时,

会使用jar命令将以上文件夹压缩成一个以".war"

为后缀的文件。

step4,部署

将step3创建好的文件夹或者压缩文件(.war文件)

拷贝到servlet容器指定的文件夹下面(比如,

拷贝到tomcat的webapps文件夹)。

step5,访问

http://ip:port/appname/servlet-url

servlet-url在web.xml文件当中有相应的配置。

5、servlet如何运行的?

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

http://ip:port/web01/hello?name=sally

参考day01的servlet2.jpg图片

步骤如下:

1)在浏览器中输入地址确认,浏览器根据IP地址与port号与服务器建立连接

2)浏览器将请求资源路径与请求参数根据http协议打包,生成一个请求数据包

3)浏览器向服务器发送请求(请求数据包)

4)Servlet服务器收到请求后,根据http协议进行解析(拆包)

5)Servlet服务器创建request和response对象,将解析后的请求数据保存在request对象内

6)Servlet服务器根据请求资源路径和web.xml文件找到对应的servlet类,对其实例化7)Servlet服务器创建ServletConfig对象

8)Servlet服务器调用servlet对象的init()方法,将ServletConfig对象作为参数传入,对servlet对象进行初始化

9)Servlet服务器调用servlet对象的service()方法,并将request对象和response对象作为参数传入进来

10)Servlet对象从request对象中获得请求参数,进行处理

11)将处理后的结果保存到response对象中。

12)Servlet服务器从response对象获得处理后的结果

13)Servlet服务器将获得的结果根据http协议进行打包,生成一个响应数据包

14)Servlet服务器向浏览器发送响应(响应数据包)

15)浏览器收到响应,并对响应数据包解析

16)浏览器根据解析后的数据生成新的页面

17)(服务器关闭或服务器超时)调用destroy()方法销毁实例

6、servelet常见的状态码

404、405、500、200、302

7、http(hypertext transfer protocol)协议是什么?

由w3c制订的一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的数据格式。

“一次请求,一次连接"。

优点:高效(即服务器可以利用有限的连接为尽可能多的客户端服务)。

缺点:状态管理的问题。

1)如何通信

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

step2,浏览器将请求数据打包并发送。

step3,服务器将响应数据打包并发送。

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

如果浏览器要发送新的请求,需要重新建立新的连接。

2)数据格式

a,请求数据包

请求行: 请求方式请求资源路径协议类型和版本

消息头: 是一些键值对,表示特定的含义,浏览器与服务器之间都可以发

送。比如,浏览器可以发送一个"User-Agent"消息头,告诉服务

器,浏览器的类型和版本。

实体内容:只有当请求方式为post的时候,实体内容才有数据(请求参数),

如果请求方式是get,请求参数会添加到请求资源路径的后面。

b,响应数据包

状态行: 协议及版本状态码状态描述

消息头:服务器也可以发送一些消息头给浏览器,比如"content-type",告

诉浏览器,服务器返回的数据类型和字符集。

实体内容:程序处理的结果。

8、get请求与post请求

1)哪一些情况下,浏览器会发送get请求?

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

b,点击链接

c,表单默认的提交方式

2)get请求的特点

a,会将请求参数添加到请求资源路径的后面,因为请求行最多只能存放2k左右的

数据,所以,get请求只能发送少量的请求参数。

b,会将请求参数显示在浏览器地址栏,不安全。比如,路由器会记录访问地址。

3)哪一些情况,浏览器会发送post请求

设置了表单的method="post"。

4)post请求的特点

a,将请求参数放到实体内容里面,所以,可以提交大量的数据给服务器。

b,不会将请求参数显示在浏览器地址栏,相对安全(不会加密,对于敏感数据,需

要加密)。如果要加密,可以使用https协议

9、servlet如何输出中文?

(1)常识

a,java语言使用unicode字符集来保存字符。

b,编码:将unicode字符集对应的字节数组转换成

某种本地字符集(gbk,utf-8等等)对应的字节数组。

c,解码:某种本地字符集(gbk,utf-8等等)对应的

字节数组转换成unicode字符集对应的字节数组。

(2)乱码问题产生的原因:

out.println输出时,容器默认会使用"iso-8859-1"去编码。

(3)解决方式:

response.setContentType("text/html;charset=字符集");

字符集必须支持中文,比如"gbk","utf-8"

二、SERVLET核心

10、表单处理:

(1)如何获得请求参数值。

a,String request.getParamter(String paramName);

注意:如果参数名写错(paramName与实际的参数名不一致),返回null。

b,String[] request.getParameterValues(String paramName);

注意:当有多个参数名相同,用此方法。

(2)如何读取中文参数值

1)乱码问题产生的原因

表单提交时,浏览器会对表单中的中文参数值进行编码(会使用打开表单所在的

页面时的字符集来编码)。服务器端默认情况下,会使用"iso-8859-1"去解码。

2)解决方式

step1,保证浏览器按照指定的字符集来编码:

step2,服务器端,按照指定的字符集去解码:

方式一: request.setCharacterEncoding("utf-8");

注意:该方法只对post请求有效。

方式二: new String(name.getBytes("iso-8859-1"),"utf-8");

11、servlet输出中文,要注意什么?

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

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

比如,在浏览器地址栏输入:http://ip:port/web04_2/abc.html

step1,容器依据应用名("/web04_2")找到应用所在的文件夹。

step2,容器会假设访问的是一个servlet,容器会去web.xml文件当中去查找有没有对应的servlet。

匹配过程:

a,精确匹配:要求的值必须是/abc.html。

b,通配符匹配:

使用"*"匹配0个或者多个字符。

比如:/*

c,后缀匹配:

使用"*."开头,后接任意的一个字符串。

比如:*.do

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

step3,如果没有匹配的servlet,容器会认为访问的是一个文件,然后查找该文件并返回(如果找不到,返回404)。

13、如何让一个servlet处理多种请求?

step1,使用后缀匹配。

比如:

*.do

step2,分析请求资源路径,然后依据分析的结果

来进行相应的处理。

//获得请求资源路径

String request.getRequestURI();

14、重定向

1)什么是重定向

服务器通知浏览器向一个新地址发请求。服务器一般会通过向浏览器发送302状态

码及一个Location消息头(值是一个地址,一般称之为重定向地址),浏览器收到之

后,会立即向重定向地址发请求。

2)如何重定向

response.sendRedirect(String url);

url:重定向地址。

3)重定向的特点

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

b,重定向之后,浏览器地址栏的地址会发生变化。

4)重定向之前,容器会先清空response上缓存的数据。

15、转发

1)什么是转发?

一个web组件(servlet/jsp)将未完成的处理交给另外一个web组件继续完成。

最常见的情况:servlet获得数据之后,转发给一个jsp去展现。

2)如何转发?

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

request.setAttribute(String name,Object obj);

另外,request对象提供了另外两个方法来配合使用

Object request.getAttribute(String name);

request.removeAttribute(String name);

step2,获得转发器

RequestDispatcher rd = request.getRequestDispatcher(String url);

url:是转发的目的地。

step3,转发

rd.forward(request,response);

3)转发的特点

a,转发的目的地有限制,必须是同一个应用。

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

c,转发所涉及的各个web组件会共享同一个request和同一个response对象。16、重定向和转发的区别

1)能否共享request对象

重定向:不行。转发:可以。

说明:重定向是两次请求。当容器收到请求之后,会创建request对象和response 对象,当响应发送完毕,容器会立即删除request和response对象。

2)重定向的地址是任意的,而转发必须是同一个应用内部的某个地址。

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

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

17、servlet的生命周期

1)什么是servlet的生命周期?

servlet容器如何创建servlet对象,如何对刚刚创建的servlet对象进行初始化,如何调

用其方法来处理请求,以及如何销毁servlet对象的整个过程。

(2)生命周期分成哪几个阶段?--》实例化、初始化、就绪、销毁

1)实例化

a,什么是实例化

容器创建servlet对象。

b,什么时候进行实例化

情况1:容器收到请求之后,才会创建servlet对象。

情况2: 容器在启动之后,会立即创建servlet对象。需要给这个servlet

配置参数。该参数是一个大于等于0的整数。值越小,优先级越高(先被创建)。

注意:容器在默认情况下,对于某个类型的servlet,只会创建唯一的一个实例。

2)初始化

a,什么是初始化

容器在创建好servlet对象之后,会立即调用该对象的init方法。

b,初始化方法(init)只会执行一次。

c,一般情况下,我们不用写init方法,因为GenericServlet已经提供了init方法的实现;

GenericServlet的init方法是这样实现的:将容器传递进来的ServletConfig对象保存下来,并且提供了一个getServletConfig方法来获得这个对象。

d,可以override init()方法来实现自己的初始化处理逻辑。

注意:该初始化调用的init方法,调用的是init(ServletConfig)方法,在该方法中会去调用无参的init()方法,可以重写无参init()方法来实现自己的逻辑

e,初始化参数

company

北京达内科技有限公司

ServletConfig.getInitParameter("company");

3)就绪

a,什么是就绪

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

b,HttpServlet已经提供了service方法的实现:

会依据请求类型分别调用doGet或者doPost方法。

所以,我们在写servlet时,有两个选择:

选择1:override HttpServlet的service方法。

选择2: override HttpServlet的doGet/doPost方法。

4)销毁

a,什么是销毁

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

b,destroy方法只会执行1次。

c,一般不需要写自己的destroy方法,因为GenericServlet已经提供了实现。

可以通过override destroy方法来实现自己的销毁逻辑。

3)1)Servlet接口

a,init(ServletConfig config);

b,service(ServletRequest req,ServletResponse res);

c,destroy();

2)GenericServlet抽象类

实现了init,destroy方法。

3)HttpServlet抽象类

继承GenericServlet,并且实现了service方法

18、路径问题:

(1)什么是路径问题?

链接、表单提交、重定向、转发这几种情况下如何填写路径(地址)。

(2)相对路径:不以"/"开头的路径。

(3)绝对路径:以"/"开头的路径。

(4)如何写绝对路径

链接、表单提交、重定向从应用名开始写;

转发从应用名之后开始写。

不要直接写绝对路径,要使用以下方法获得应用名:

String request.getContextPath();

19、Servlet线程安全问题

(1)为什么说servlet会有线程安全问题?

a,servlet默认是单例(对于某个类型的servlet,容器只会创建一个实例)。

b,容器在收到请求之后,会启动一个线程来处理。比如,有多个请求同时访问某个

servlet,此时,就会有多个线程同时调用该servlet对象的service方法。如果这些

线程修改servlet对象的属性,就有可能发生线程安全问题。

(2)如何解决?

a,加锁可以使用synchronized加锁。

b,让servlet实现SingleThreadModel接口。实现了该接口的servlet,容器会为每一个

请求创建一个对应的实例。不建议使用,因为如果请求过多,可能会产生过多的

servlet实例,影响性能。

三、状态管理

19、什么是状态管理?

将浏览器与web服务器之间多次交互当做一个整体来看待,并且将多次交互所涉及的数据保存下来。

20、如何进行状态管理?

1)客户端的状态管理:将状态保存在客户端(浏览器)。比如cookie技术。

2)服务器端的状态管理:将状态保存在服务器端。比如session技术。

21、cookie技术

1)什么是cookie?

服务器临时保存在浏览器端的少量的数据。

2)cookie的工作原理

当浏览器向服务器发送请求时,服务器会将少量的数据以set-cookie消息头的方式

发送给浏览器,浏览器会将这些数据临时保存下来;当浏览器再次访问服务器时,会将之前保存的数据以cookie消息头的方式发送给服务器。

3)如何添加cookie?

Cookie c = new Cookie(String name,String value);

response.addCookie(c);

4)如何查询cookie?

Cookie[] cookies=request.getCookies();

String name = cookies[i].getName();

String value = cookies[i].getValue();

5)cookie的生存时间

cookie.setMaxAge(int seconds);

注意:

a,单位是秒

b,seconds > 0: 当cookie的生存时间大于指定的秒数,浏览器会删除这个cookie。

浏览器会将cookie保存在硬盘上。

seconds = 0:立即删除cookie。

比如,要删除一个名称为"uid"的cookie:

Cookie c = new Cookie("uid","");

c.setMaxAge(0);

response.addCookie(c);

seconds < 0: 缺省值,浏览器会将cookie保存在内存里面。只要浏览器不关闭,

cookie就一直存在。

6)编码问题

cookie只能保存合法的ascii字符串。如果需要保存中文,需要将中文转换成合法的ascii

字符串的形式。

String URLEncoder.encode(String str,String code);

String URLDecoder.decode(String str,String code);

7)路径问题

a,浏览器在向服务器发请求时,会比较cookie的路径是否与请求地址匹配,只有匹配的cookie才会发送。

b,cookie的路径默认情况下等于添加该cookie的组件的路径,比如:

/web07/biz01/addCookie.jsp添加了一个名叫"userId"的cookie,则该cookie的路径等

于"/web07/biz01/"。

c,要访问的路径(请求地址)必须是cookie的路径或者其子路径,浏览器才会将该cookie 发送出去。

d,可以修改cookie的路径

cookie.setPath(String path);

比如,经常cookie.setPath("/appname");

8)cookie的限制

a,cookie可以被用户禁止。

b,cookie只能保存少量的数据(大约4k)。

c,cookie数量也有限制(浏览器在本地大约能保存300个左右的cookie)。

d,cookie不安全,如果要将敏感数据保存在cookie里面,必须加密。

e,cookie只能保存字符串。

22、session(会话)技术

(1)session是什么?

浏览器访问服务器时,服务器会创建一个对象(该对象称之为session对象,有一个唯一的id号,称之为sessionId),服务器在默认情况下,会将这个sessionId以cookie的方式发送给浏览器;当浏览器再次访问服务器时,会将之前保存的sessionId发送过来,服务器就可以依据sessionId找到之前创建的session对象。

(2)如何获得一个session对象?

1)方式一

HttpSession s = request.getSession(boolean flag);

a,当flag=true时

服务器会检查请求当中有没有sessionId,如果没有sessionId,服务器会创建一个session对象;如果有sessionId,服务器会依据这个sessionId查找对应的

session对象,如果找到了,则返回;找不到,则创建一个新的session对象。

b,当flag=false时

服务器会检查请求当中有没有sessionId,如果没有sessionId,返回null;

如果有sessionId,服务器会依据这个sessionId查找对应的session对象,如果找

到了,则返回;找不到,返回null。

2)方式二

HttpSession s = request.getSession();

等价于request.getSession(true)。

(3)绑订数据相关的方法

setAttribute(String name,Object obj);

Object getAttribute(String name);

removeAttribute(String name);

(4)session的超时

a,服务器会将空闲时间过长的session对象从内存当中删除(为了节省内存空间)。

b,服务器默认的超时限制一般是30分钟。

c,可以修改服务器缺省的超时限制,比如,

可以修改tomcat的配置文件:

conf/web.xml

30

也可以将以上配置信息放到某个具体的应用所在的

配置文件里面(web.xml),此时,只对这个应用有效。

d, setMaxInactiveInterval(int seconds);

(5)立即删除session对象

invalidate();

23、如果禁止cookie,如何继续使用session?(URL重写)

(1)什么是url重写?

浏览器向服务器上的某个地址(url)发请求时,不能够直接使用这个url,而应该使用添加了sessionId的url(即改写或者重写原来的url)。

(2)如何进行url重写

a,对于链接地址和表单提交地址,使用:response.encodeURL(String url);

b,对于重定向地址,使用response.encodeRedirect(String url);

比如:

"<%=response.encodeURL("some.do")%>"

response.sendRedirect(

response.encodeRedirect("list.jsp"));

24、cookie与session的比较。

(1)session是一种服务器端的状态管理技术,cookie是一种客户端的状态管理技术(2)cookie只能保存4K左右的数据,并且cookie的个数是有限制的;session可以保存更多的数据,并且数据类型不受限制

(3)cookie只能保存保存字符串,session可以保存丰富的数据类型

(4)cookie技术会将状态数据保存在客户端,不安全,但是减少了服务器内存的占用;

session技术会将状态数据保存在服务器端,相对cookie来说,安全,当访问量大的时候,服务器的内存空间占用比较大。

25、session的会话机制有哪种方式?

a)借助于cookie机制缺点:用户可以禁止cookie

b)Url重写缺点:凡是含有URL的页面必须使用servelet或jsp动态生成,并且会

话关闭,再次访问会话的信息会丢失。

c)隐藏表单域缺点:只适合含有表单的页面

26、会话跟踪的基本步骤

1).访问与当前请求相关的会话对象

2).查找与会话相关的信息

3).存储会话信息

4).废弃会话数据

四、数据库访问(mysql)

25、将中文保存到数据库需要注意的问题

(1)数据库本身要支持中文,即要设置好支持中文的字符集。

比如,在mysql数据库中创建一个数据库时,

create database jsd1402db default character set utf8;

(2)jdbc驱动程序要能够进行正确的编码和解码。

当插入中文数据时,要做编码(unicode-->某种本地字符集),有些jdbc驱动默认情况下,会按照iso-8859-1去编码,所以会有乱码。

可以明确告诉jdbc驱动如何去做编码和解码:

jdbc:mysql://localhost:3306/jsd1402db?useUnicode=true&characterEncoding=utf8; 26、如何获得自增列的值

PreparedStatement ps =conn.prepareStatement("insert into friend_user (username,password,name,age,gendar,phone) values(?,?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS);

ps.executeUpdate();

ResultSet rs = ps.getGeneratedKeys();

rs.next();

String id = rs.getString(1);

27、servlet如何使用jdbc访问数据库

step1,将jdbc驱动(.jar文件)放到WEB-INF\lib下。

step2,使用jdbc访问数据库,需要注意异常的处理。

类的加载:jvm委托类加载器(类加载器也是一个对象)查找类的字节码文件,并且将字节码文件的内容读入到方法区,然后将读入的信息封装成一个class对象。28、dao(data access object 数据访问对象)

(1)什么是dao?

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

(2)如何写一个dao?

step1,写一个实体类

实体类与表对应,一般来说,表有哪些字段,实体类就会有相应的属性,属性

的类型与字段的类型要匹配,并且这些属性有对应的get/set方法。有了实体

类之后,就可以将数据库中的记录转换成内存当中的一个对象,方便程序访问。

step2,写一个java类,封装数据访问逻辑。

29、创建表时create table 表名() type=?

mysql的存储引擎: innoDB:支持事务MyIsam:不支持事务

五、过滤器

29、什么是过滤器?

servlet规范当中定义的一种特殊的组件,用来拦截servlet容器的调用过程,容器会先执行过滤器的方法,然后才调用其后的servlet。

30、如何写一个过滤器?

step1,写一个java类,实现Filter接口。

step2,在doFilter方法里面,编写处理逻辑。

step3,配置(web.xml)过滤器,让容器知道哪些请求需要过滤。(其中url-pattern和要过滤的servlet的url-pattern是一样的)

31、过滤器的优先级

如果有多个过滤器都满足过滤器的条件,则容器会按照的先后顺序来调用。

32、过滤器的初始化参数

step1,在web.xml文件当中,使用配置初始化参数

step2,使用FilterConfig对象提供的String getInitParameter(String paranName)来获得参数的值;

33、过滤器的优点

a,可以不用修改原有代码,为系统增加新的功能。

b,可以将多个web组件相同的逻辑集中写在一个类里面(过滤器),方便代码的维护。

34、过滤器什么时候创建

容器启动之后,会立即创建过滤器实例(单例),接下来,会立即调用该实例的init(FilterConfig config)方法来完成初始化操作。

* FilterConfig用来访问过滤器的初始化参数。

* init方法只会执行一次。

35、过滤器什么时候销毁

容器在删除过滤器实例之前,会调用destroy方法。该方法只会执行一次。(服务器停止或者从容器中移除)

36、过滤器的doFilter(ServletRequest request,ServletResponse,FilterChain arg2)方法

doFilter方法相当于servlet的service方法,用来处理请求。容器会将事先创建好的request,response对象作为参数(参数类型为HttpServletRequest和HttpServletResponse的父类)传递进来。如果调用了FilterChain的doFilter方法,容器会调用后续的过滤器或者servlet,否则,请求处理完毕。

37、如果web.xml中存在多个过滤器,创建和销毁的顺序

创建:过滤器会依次按照web.xml从后往前的顺序创建并初始化

销毁:过滤器会依次按照web.xml从后往前的顺序销毁

六、监听器

38、什么是监听器?

servlet规范当中定义的一种特殊的组件,用来监听servlet容器产生的事件并进行相应的处理。

事件主要有两类:

a,生命周期相关的事件:容器创建或者销毁了

request,session,servletContext(servlet上下文)时产生的事件。

b,绑订相关的事件:调用了request,session,servletContext的

setAttribute,removeAttribute时产生的事件。

39、如果写一个监听器?

step1,写一个java类,实现相应的监听器接口(比如HttpSessionListener接口)。

step2,在监听器接口方法中,编写相应的处理逻辑。

step3,注册(web.xml文件当中添加相应的配置)。

40、ServletContext接口

1)servlet上下文

容器启动之后,会为每一个web应用创建唯一的一个符合ServletContext接口要求的对象,称之为servlet上下文。

该对象有两个特点:

a,唯一性:一个web应用对应一个servlet上下文。

b,一直存在:只要容器不关闭,应用没有被卸载,servlet上下文就一直存在。

2)如何获得servlet上下文对象

a,GenericServlet提供了getServletContext方法。

b,ServletConfig提供了getServletContext方法。

c,HttpSession提供了getServletContext方法。

d,FilterConfig提供了getServletContext方法。

3)作用

a,绑订数据setAttribute,getAttribute,removeAttribute

绑订到servlet上下文上的数据有两个特点:

a1,随时可以访问(一直存在)

a2,全局(所有组件都可以访问)

注意:request,session,servlet上下文都提供了绑订数据相关的方法,区别如下: a1,生存时间不一样。request < session < servlet上下文。

在满足使用条件的情况下,应该优先使用生命周期短的。

a2,访问的范围不一样。

request < session < servlet上下文。

request对象上绑订的数据,只有同一个请求所涉及的组件可以访问(比如转发,过滤器与对应的servlet/jsp)。

session对象上绑订的数据,只有同一个会话所涉及的组件可以访问。

servlet上下文上绑订的数据,同一个应用上的所有组件均可访问。

b,访问全局的初始化参数

String getInitParameter(String paranName);

web.CountListener

c,通过逻辑路径获得实际部署时的物理路径

String getRealPath(String path);

七、上传文件

41、上传文件(扩展)

step1,设置表单的提交方式为"post",还要设置表单的enctype属性值为"multipart/form-data"。

step2,在服务器端,不能够使用request.getParameter方法来获得任何参数值,

要使用InputStream request.getInputStream()获得一个输入流,然后分析该输入流来获得表单参数值。因为直接分析该输入流比较复杂,所以我们一般使用一些开源的工具来分

析,比如,可以使用commons-fileupload.jar来分析。

案例代码:

public class FileUploadServlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//step1,创建DiskFileItemFactory对象,

//该对象为解析器提供解析时的一些缺省配置。

DiskFileItemFactory dfif = new DiskFileItemFactory();

//step2,创建一个解析器

ServletFileUpload sfu = new ServletFileUpload(dfif);

//step3,解析

//解析器会分析InputStream,然后将解析的结果封装到相应的FileItem对象里面//(一个表单域对应一个FileItem)。

try {

//只需要调用FileItem对象的方法就可以获得表单中的数据。

List items = sfu.parseRequest(request);

for(int i=0;i

FileItem item = items.get(i);

if(item.isFormField()){

//这是一个普通的表单域

//(不是上传文件域)

//获得参数名

String fieldName = item.getFieldName();

System.out.println(fieldName);

//获得参数值

String username = item.getString();

System.out.println(username);

}else{

//这是一个上传文件域

ServletContext sctx = getServletContext();

//依据逻辑路径获得实际部署时的物理路径

String path = sctx.getRealPath("upload");

System.out.println(path);

//获得上传文件的名称

String fileName = item.getName();

System.out.println(fileName);

File file = new File(path +

File.separator + fileName);

item.write(file);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

八、验证码

42、验证码

(1)什么是验证码

验证码是用来干扰机器人(机器人是一个程序,可以用来模拟用户的操作,比如登录)的图片。

(2)如何生成验证码

step1,绘图

step2,将图片压缩并输出。

(3)如何使用验证码

案例一:

Form表单中处理

onclick="this.src='checkcode?' + Math.random();"/>

onclick="document.getElementById('img1').src='checkcode?'+ Math.random();">看不清,换一个

CheckcodeServlet.java中处理

public class CheckcodeServlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println("CheckcodeServlet's service");

/*

* 一、绘图

/*

* step1,创建一个内存映像对象(画布) BufferedImage(宽度,高度,类型)

*/

BufferedImage image = new BufferedImage(80,30,

BufferedImage.TYPE_INT_RGB);

/*

* step2,获得一个画笔

*/

Graphics g = image.getGraphics();

/*

* step3,给笔设置颜色

*/

Random r = new Random();

g.setColor(new Color(255,255,255));

/*

* step4,给画布设置背景颜色

* fillRect(x,y,width,height)

*/

g.fillRect(0, 0, 80, 30);

/*

* step5,绘图

*/

g.setColor(new Color(r.nextInt(255),

r.nextInt(255),r.nextInt(255)));

//Font(字体,风格,大小)

g.setFont(new Font(null,Font.ITALIC,22));

String number = getNumber(5);

//将number绑订到session对象上

HttpSession session =

request.getSession();

session.setAttribute("number", number);

//drawString(String,x,y) x,y是左下角的坐标

g.drawString(number, 2, 23);

//step6,加一些干扰线

for(int i=0;i<6;i++){

g.drawLine(r.nextInt(80),

r.nextInt(30),

r.nextInt(80), r.nextInt(30));

}

/*

* 二、将图片压缩并发送给浏览器

*/

//设置content-type消息头,告诉浏览器返回的是图片response.setContentType("image/jpeg");

//一定要获得字节输出流

OutputStream ops = response.getOutputStream();

//write方法会对原始图片(image)按照

//指定的压缩算法(jpeg)进行压缩,并且

//将压缩之后的数据输出到指定的流(ops)。

javax.imageio.ImageIO.write(image, "jpeg", ops);

ops.close();

}

/*

* 生成一个验证码,该验证码由"A~Z","0~9"中

随机选取5个字符组成

*/

private String getNumber(int size) {

String rs = "";

String strs = "ABCDEFGHIJKLMNOPQ" +

"RSTUVWXYZ0123456789";

Random r = new Random();

for(int i=0;i

rs += strs.charAt(r.nextInt(strs.length()));

}

return rs;

}

}

案例2:

private void getCheckCode(HttpServletRequest request,

HttpServletResponse response) throws IOException { response.setContentType("image/jpeg");

// 设置页面不缓存

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

int width=60;int height=20;

BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

Graphics g = image.getGraphics();

Random r = new Random();

g.setColor(getRandColor(200,250));

g.fillRect(0, 0, width, height);

g.setFont(new Font("Times New Roman", Font.PLAIN, 18));

g.setColor(getRandColor(160,200));

for(int i=0;i<155;i++){

int x = r.nextInt(width);

int y = r.nextInt(height);

int x1 = r.nextInt(12);

int y1 = r.nextInt(12);

g.drawLine(x, y, x1+x, y1+y);

}

String sRand = "";

for (int i = 0; i < 4; i++) {

String rand = String.valueOf(r.nextInt(10));

sRand += rand;

// 将认证码显示到图象中

g.setColor(new Color(20 + r.nextInt(110), 20 + r

.nextInt(110), 20 + r.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成

g.drawString(rand, 13 * i + 6, 16);

}

// 将认证码存入SESSION

request.getSession().setAttribute("rand", sRand);

// 图象生效

g.dispose();

// 压缩图像

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response

.getOutputStream());

encoder.encode(image);

}

九、摘要加密

43、(1)特点

a,不可逆性:不使用密钥,依据密文,无法反推出明文。

b,唯一性:不同的明文,经过加密之后,得到唯一的一个密文。

https://www.doczj.com/doc/565857478.html,

案例:

String pwd="1234";

//创建一个使用指定算法加密的工具

MessageDigest md = MessageDigest.getInstance("md5");

//加密,参数值必须是字节数组,返回值为字节数组

byte[] buf = md.digest(pwd.getBytes());

//创建BASE64Encoder字符集

BASE64Encoder encoder= new BASE64Encoder();

//BASE64Encoder可以将任意格式的字节数组编码为字符串

String md5=encoder.encode(buf);

十、MVC思想

1,mvc(model,view,controller 即模型,视图,控制器)

是一种软件架构思想,将一个软件按照模型,视图,控制器来划分成不同类型的模块。

模型:用来封装业务逻辑。

视图:用来实现表示逻辑(即输入与输出,将模型处理的结果展现出来,另外,也要提供相应的界面方便用户使用)。

控制器:用来协调模型与视图(模型与视图不相互依赖:视图将请求先发给控制器,

由控制器选择对应的模型来处理;模型返回的处理结果也要先交给控制器,由控制器选择相应的视图来展现)。

2、使用mvc来开发一个web应用程序

在javaee平台里面,一般使用java类来封装业务逻辑,使用Servlet或Filter来实现控制器,使用jsp来实现表示逻辑。

3、mvc的优点

1)实现模型的复用

a,模型处理的结果,可以使用不同的视图来展现。

b,可以使用不同视图来访问模型。

2)维护性好

修改模型或者修改视图,不会相互影响。

3)方便测试

比如,将业务逻辑写在servlet类里面,需要部署之后才能测试;而将业务逻辑写在java类里面,可以直接测试。

4)mvc的缺点

使用mvc,会增加软件设计的难度,也会增加代码量和软件开发的成本。

Java_Web总结

选择题: 1、Servlet类文件放置的位置是()。 A.WEB-INF/lib B.WEB-INF/servlet C.WEB-INF/web D.WEB-INF/classes 2、在JSP中,page指令的()属性用来引入需要的包或类。 A.extends B.import C.languge D.contentType 3、一个servlet源文件的后缀名是()。 A..jsp B..exe C..class D..java 4、J2EE中,JSP EL 表达式${user.loginName}的执行效果等同于()。 A.<% = user.getLoginName()%> B.<%user.getLoginName();%> C.<% = user.loginName%> D.<% user.loginName;%> 5、在Web容器中,以下哪个类的实例代表HTTP的请求()。 A.HttpRequest B.HttpServletRequest C.HttpServletResponse D.HttpPrintWriter 6、Web应用中,常用的会话跟踪方法不包括()。 A.URL重写B.Cookie C.隐藏表单域D.有状态HTTP协议 7、以下对PayServlet的定义正确的是()。 A.class PayServlet implements javax.servlet.servlet B.class PayServlet extends javax.servlet.GenericServlet C.class PayServlet extends javax.servlet.http.HttpServlet D.class PayServlet extends javax.servlet.ServletRequest 8、aa.jsp把请求转发给bb.jsp。aa.jsp在请求范围内存放了一个String类型的name 属性,bb.jsp如何获取该属性()。 A.<% String name=request.getAttribute("name"); %> B.<% String name=(String)request.getAttribute("name"); %> C.<% String name=request.getParameter("name") %> D.<% String name=(String)application.getAttribute("name") %> 9、在JSP页面中,作用域范围由小到大依次是()。

JAVAWEB经验总结之SERVLET API

基本类和接口 一、javax.servlet.Servlet接口 servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。 Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。 servlet接口中的方法 void init(ServletConfit config)throws ServletException在servlet被载入后和实施服务前由servlet引擎进行?次性调用。如果init()产生溢出UnavailableException,则servle退出服务。ServletConfig getServletConfig()返回传递到servlet的init()方法的ServletConfig对象void 果 String getServletInfo()返回描述servlet的一个字符串 void destory()当servlet将要卸载时由servlet引擎调用service(ServletRequest request, ServletResponse response)throws ServletException,IOException处理request对象中描述的请求,使用response对象返回请求结 二、javax.servlet.GenericServlet类(协议无关版本) GenericServlet是一种与协议无关的servlet,是一种跟本不对请求提供服务的servlet,而是简单地从init()方法启动后台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。servlet API提供了Servlet接口的直接实现,称为GenericServlet。此类提供除了service()方法外所有接口中方法的缺省实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的servlet。 除了Servlet接口外,GenericServlet也实现了ServletConfig接口,处理初始化参数和servlet 上下文,提供对授权传递到init()方法中的ServletConfig对象的方法。 GenericServlet类中的方法 void destory()编飞组成单词“destory”的一个注册入口 String getInitParameter(String name)返回具有指定名称的初始化参数值。通过凋用config.getInitParameter(name)实现。 Enumeration getInitParameterNames()返回此serv]et已编码的所有初始化参数的?个枚举类型值。调用config.getInitParameterNames()获得列表。如果未提供初始化参数,则返回?个空的枚举类型值(但不是null) ServletConfig getServletConfig()返回传递到init()方法的ServletConfig对象ServletContext getServletContext()返回在config对象中引用的ServletContext String getServletInfo()返回空字符串 void init(ServletConfig config)throws ServletException在一实例变量中保存config对象。编写组成单词“init”的注册入口,然后调用方法init() void init()throws ServletException可以被跳过以处理servlet初始化.在config对象被保存后init(ServletConfig config)的结尾处自动被调用.servlet作者经常会忘记调用super.init(config) void log(String msg)编写注册servlet的入口.为此调用servlet上下文的log()方法.servlet的名字被加到消息文本的开头。 void log(String msg,Throwable t)编写一个入口和servlet注册的栈轨迹。此方法也是ServletContext中相应方法的一个副本。 abstract void service(Request request,Response response)throws ServletException,IOException 由servlet引擎调用为请求对象描述的请求提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子类所覆盖的方法。 第1/7页

java开发技术总结

数据库 oracle-->数据库管理系统-->SQL、PL/SQL-->Java(JDBC+SQL) DBA,数据库编程程序员 1.概念导论 1)什么是数据库 有组织和结构存储数据。可以存储 字符、字节、图形、图像等类型数据 DB(数据库):数据集合 DBMS(数据库管理系统):对数据集合进行管理和操作的软件 --Oracle --DB2 --MySQL --SQLSERVER JDBC 1.什么是JDBC 全称Java DataBase Connection,Java数据库访问。 JDBC是Java访问数据库的一项技术 JDBC是SUN推出的Java访问数据库的一套标准。由一系列接口构成。 各个数据库厂商负责提供JDBC接口API的实现包。 开发者只需要掌握JDBC接口的使用,就可以实现对各种数据库的操作,不需要了解开发商的实现类。 XML 1、什么是xml(xtendsible markup language可扩 展的标记语言)? 1)定义 基于文本的通用的数据保存格式。 (1)通用的点的坐标 Point类point对象(x=10,y=20) a,序列化 b,数据库表 c,文件 ... (2)数据格式 10 20

HTML 知识准备 1、分层:表现层:UI界面(DOS界面、桌面类型、web类型) 业务层: 数据层:文件、Oracle数据库 2、Web类型的应用程序----B/S类型 打开Browser,输入URL,浏览器将请求发送到服务器 服务器得到请求,分析,返回响应 浏览器得到响应,解析(翻译),显示为页面 3、web学习阶段 客户端技术:HTML+CSS+Javascript---Web基础 服务器端技术:JSP、PHP、https://www.doczj.com/doc/565857478.html, 4、web基础的课程 HTML:页面的创建 CSS:页面的外观 JavaScript:页面的动态效果和交互行为--3 一:HTML概述 1、超文本标记语言:一种编写页面的纯文本的标记语言,文件以.html或者.htm为后缀,依靠浏览器运行显示----解释性的语言 2、标记:一些用<>括起来的内容,特殊的显示 3、主流浏览器:IE/Firefox/Chrome/ 4、浏览器兼容性:符合标准规范,具体问题 CSS 一:CSS概述 1、CSS:级联样式表(层叠样式表) 2、特征:为页面定义外观的语言,实现内容和表现的分离,多个样式可以合为一个,如果冲突,以优先级为准 二:基础语法 1、语法:属性名称:值;属性名称:值;比如--color:red; 2、如何应用 方式一(内联方式):<元素style=""/>---将样式直接定义在元素的style属性里 方式二(内部样式表):在页面的head里的style里定义样式 方式三(外部样式表):定义一个单独的.css的文件(定义样式);然后,在页面的head里用link引入---推荐方式 3、外部样式表的优点:实现内容和表现的分离,提高代码的可重用性和可维护性

Servlet方法中的常用五大方法

Servlet方法中的常用五大方法 Servlet方法有很多,但是本篇向你介绍的五大Servlet方法是功能非常强大的,在Web 开发中作用不小。是不是很感兴趣呢? 这五大Servlet方法都是功能比较强大的。相信对于WEB设计来说有一定的帮助。不要一个一个方法的试验,等看完所有的内容,然后一起运用这些方法并结合以前的workshop 来做个小程序。 ◆parseTextMessage()方法 在这个例子里:定义了一个数据接受类。parseTextMessage()方法接受了一组从表单传送过来的对象以及他们的值。我们在做一些产品开发的时候,比如自定义表单,往往不知道传送过来有多少对象,对于这样的问题,程序是无法知道的,用了这个方法后,就可以报所有的对象一下子都拿到了。下面看一下这个例子: 1private void parseTextMessage(HttpServletRequest request){ 2 3Enumeration names;//列举client传送过来的所有的对象 4String name;/ 5String[]value;// 6//接受所有的对象 7names=request.getParameterNames(); 8 9while(names.hasMoreElements()){ 10//得到对象名称 11name=(String)names.nextElement(); 12//根据对象名称重新找到对象的值 13value=request.getParameterValues(name); 14//把对象名称和值放到一个类中,这个类的代码在前面的练习中有 15put(name,value); 16} 17 18//获取一个page的ID,为什么要设置page id,在java规则中有 19pageID=getPostPageID(); 20 21//获取事务id,如果有事务的话

javaweb开发要学习的所有技术和框架总结:

学习javaweb开发要学习的技术和框架总结: 前言:当初想学习javaweb开发的时候,希望能够全方面地学习(这样找工作时就胸有成足了)。但是对这个根本不理解,又不认识从事这方面的熟人,所以学习起来无从下手。经过了一年的‘死’学习,从网上,从书本,从视频里面深入了解了java。想从事java的朋友,只要把这些技术全学会了,哪就业肯定没有问题了。 前端技术: HTML, CSS, JA V ASCRIPT, JQUERY, AJAX HTML “超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 超文本标记语言的结构包括“头”部分(外语:Head)、和“主体”部分(外语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。 CSS 级联样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。 JavaScript JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。 jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。

JavaWeb期末总结

第一章Web开发基础知识(简单描述)表单(续) 表单元素 form body

元素括起整个表单,并给出一些基本定义。表单仅占用HTML文档的部分空间;实际上,一个HTML文档可以包含几个独立的、完成不同功能的表单。method指定了信息传递给HTTP服务器的方法;action给出与处理提交信息的脚本相关的URL(如“registinfor.asp”,“registinfor.jsp”)。 表单输入元素 ?用来把不同的字段放在表单里,以便用户输入信息。 ?name属性指定该字段在某个表单中的唯一名称; ?可选的value属性给出该标记的默认值。 ?在提交表单时,向Web服务器呈上以一组用“?”开头并用“&” 号分开的一组“名字=值”形式的信息,如 http://…/Scriptname?name=me&address=here&time=now ?type属性给出所使用标记的样式,“string”可以是: ?CHECKBOX(复选框)。 ?RADIO(单选按钮) ?TEXT(单行的文本输入栏)。 ?IMAGE(图像放在表单里) ?SUBMIT(提交按钮) ?RESET(清除按钮) ?HIDDEN(在表单中保留不供显示的内容) ?FILE(上传文件) 第二章Servlet开发 1.什么Servlet Servlet是用Java语言编写的运行在服务器端的小应用程序,能够接收Web客户端的请求,并能对Web客户端进行响应,通常是通过HTTP (HyperText Transfer Protocol)协议进行工作的。(可以认为Servlet是服务 器端的一个动态Java程序,用户通过访问这个程序获取服务器的服务。) 2. Servlet的主要方法 Servlet是一个Java类,通常会有3类方法,分别是: init方法,用于初始化。 destroy方法,用于释放资源。 service方法,服务类方法,对用户的请求进行处理,并对用户进行响应,几乎所有处理功能都在这里完成。这类方法可以有多个,最常用的

JAVAWEB复习总结

B1.{JSP-Servlet题目}表示“资源移动”的状态码是。(选择1项) A)200 B)302 C)400 D)500 A2.{JSP-Servlet题目}哪一个对象可以用于获得浏览器发送的请求。(选择1项) A)HttpServletRequest B)HttpServletResponse C)HttpServlet D)Http B3.{JSP-Servlet题目}如果不希望在JSP页面中存取HTTP会话,应该如何设定page指令?(选择1项) A)<%pagesession="disabled"%> B)<%pagesession="false"%> C)<%pagesession="true"%> D)<%pagedisablesession="true"%> CD4.{JSP-Servlet题目}在Servlet的生命周期中,容器只调用一次的方法是。(选择2项) A)service B)getServletConfig C)init D)destroy C5.{JSP-Servlet题目}在使用服务器端的会话管理时,通过什么方法标识会话。(选择1项) A)IP地址 B)Cookie C)Session id D)请求头 A6.{JSP-Servlet题目}下列哪个为JSP的小脚本的标签?(选择1项) A)<%%> B)<@%> C)<%!%> D)<%--%> C7.{JSP-Servlet题目}下面哪一个不是元素的属性。(选择1项) A)scope B)Id C)Value D)Class C8.{JSP-Servlet题目}HttpServlet中,用来处理POST请求的方法是(选择1项)

javaweb知识点总结

javaweb知识点总结 篇一:javaweb期末复习知识点整理 1、 Web应用概述 1. URL与URI URL: 统一资源定位器 URI:统一资源定位符 2. 常见HTML标签 3. 表单的处理 4. 静态文档与动态文档的概念:静态文档是一种以文件的形式存放在服务器端的文档,客户发出对该文档的请求,服务器返回这个文档。动态文档是指文档的内容可根据需要动态生成,又可分为服务器端动态文档和客户端动态文档技术。 5. Servlet概念:服务器端小程序,是使用ServletAPI 以及相关类编写的java程序,主要用来扩展web服务器的功能。 6. 处理404错误:查看给定的路径名是否正确,查看Servlet类文件是否在classes目录下,查看文件内容是否正确,查看tomcat是否启动 2、 Servlet技术模型 1. Servlet的API:包,包 Servlet接口及方法 :

1) public void init(ServletConfig config):完成Servlet初始化并准备提供服务。容器传给该方法一个ServletConfig类型的参数。 2)public void service(ServletRequest req,ServletResponse res)throw ServletException,IOException:对每个客户请求容器调用一次该方法,它允许Servlet为请求提供响应。 3) public void destroy()该方法由容器调用,指示Servlet清除本身,释放请求的资源并准备结束服务。 4) public ServletConfig getServletConfig()返回关于Servlet的配置信息,如传递给init()方法的参数。 5) public String getServletInfo()返回关于Servlet 的信息,如作者,版本及版权信息。 ServleConfig接口作用及方法 HttpServlet类 :新的service方法,doGet,doPost HttpServletRequest接口及常用方法 HttpServletResponse接口及常用方法 2. Servlet的开发步骤 编写一个Servlet类 编译 部署 (1)在tomcat的虚拟目录下,创建Web目录

学习JSP和servlet程序设计心得体会

学习JSP程序设计和Servlet心得体会JSP这门课是教我们怎么做网站的,学习了许多枯燥的语言知识,总算是可以自己做网站了 记得在第一节课上,我就跟学生们讲了“为什么学JSP?”,“JSP学什么?”,“学JSP有什么用?”还有“如何学JSP?”从我对这些问题的讲解中同学们确实体会到了学习JSP的重要性和如何去学。在课上还了解了这门课程我要讲述的主要内容以及需要具备的相关知识。 学生们在JA V A上是最欠缺的,之前也只是跟着老师学,自己在课下并没有下很多功夫。 在前阶段的学习中都感觉很轻松,因为我讲到的HTML学生已经在上个学期的差不多了,所以做一个静态的页面还是没有多大问题,但是后来学到后面要用到JA V A做一些动态的网页就感觉越来越吃力了,之前学过的很多JA V A知识也有很多都已经忘了。所以在第一次上课后完成任务时就用到了比较长的时间,最后才能勉强做到符合我的要求。还出现了很多小错误,有了第一次视频教学的教训,我在后面赶紧复习之前学习的JA V A知识,但是毕竟过了挺久了,有些东西需要重头再教,而且我也是以做项目的形式

来完成教学,项目里包括了JSP呀Servlet等技术,所以学生们大概花了一个多月才将这学期JSP和Servlet 课程中所掌握的一些关于JA V A的东西搞清楚。后来也就顺利的完成了我们要做的项目。 我想简单的谈谈我在JSP程序设计这门课中都学到了什么,JSP的全称是 Java Server Pages,它是一种动态网页技术。我们需要配置的坏境有JDK,Tomcat,还要用到Dreamweaver。最开始我们学习了HTML这种文本标记语言,用HTML可以做一些静态网站,看的出在学生第一次用HTML做出第一个网页时的兴奋,都觉得好神奇!后面我们学到做动态网站,其中就涉及到JSP内部对象及内部对象所对应的一些方法。再就是JSP与数据库的联系,怎么样引用数据库。通过以上所学到的知识我们可以基本上上做出一个比较实用的小网站,比如一个班级网站,在上面可以上传下载一些学习资料,以及存储班上同学的一些基本信息,给班上同学提供一个交流平台等等。 那在以后的学习中学生该如何学呢?从这一次JSP程序设计课程的学习中我总结了以后学习的方法。首先要把基础打牢,不要只是注重技术开发,对于一些基本概念也要掌握;其次要多一些专业方面的书,多了解我们专业动向;再者就是要多上机实践,

韩顺平servlet笔记(个人总结版)

第一课 第二课tomcat 简单模拟

package com.my.first; import java.io.*; import https://www.doczj.com/doc/565857478.html,.*; publicclass Mytomcat { /** * @param args */ publicstaticvoid main(String[] args) throws Exception { ServerSocketss = new ServerSocket(9999); Socket s = ss.accept(); System.out.println("在9999上等待。。。"); OutputStreamos =s.getOutputStream(); BufferedReaderbr = new BufferedReader(new FileReader("f:\\hello.html")); String str=""; while((str = br.readLine())!=null){ os.write(str.getBytes()); } br.close(); os.close(); s.close(); // ss.close(); } } 在浏览器中输入 http://localhost:9999 就会出现“hello world” 第三课 启动tomcat 各种问题总结

第四课

第五课 虚拟目录 如在f盘存放着各种web应用,但是空间不够了,这是我在d盘弄个文件当做该web应用的文件。但是要在server.xml中指定一下。 步骤:1、在那个磁盘下建立“f:\web2”,并建立相关的资源文件 2、在server.xml中配置 ps: path中的“/web2”是什么,在地址中就输入什么。 http://localhost:8080/web2/hello2.html context 能配置的属性 path、docBase、reloadable(有改变就重启tomcat)、unpackWAR

Servlet 实验报告

软件学院设计性实验报告 专业:JAVA 年级/班级: 09计算机2班 2011—2012学年第一学期课程名称Java EE框架指导教师周运 姓名张盈盈学号8888 实验地点过街楼机房B区实验时间9月29日5-8节 项目名称编写一个Servlet应用实验类型设计性 一、实验目的 1.掌握Servlet应用,熟悉web开发的MVC模式。 2.了解servlet工作的流程,servlet的作用。 3.掌握servlet的方法init(),destory(),doget(),dopost(); 二、实验仪器或设备 1.计算机一台 2.MyEclipse软件 三、总体设计(设计原理、设计方案及流程等) A:设计原理: 1.servlet相当于MVC模式中的C控制器。 2.作为服务器或监听程序并响应客户请求。 3.后台业务逻辑处理,对后台数据的操作、对组件模型的操作。 4.servlet有专有的方法init(),destory(),doget(),dopost(); B:设计方案及流程: 设计一个登陆页面,用户提交后,将数据提交给action,Servlet来控制处理,判断用户名、密码是否正确,根据不同的结果返回不同的信息。再进行部署测试,运行。 四、实验步骤(包括主要步骤、代码分析等) 1.创建一个web项目命名为myproject。 2.创建登陆页面index.jsp代码如下: 注:由于css是写在页面里面的,此处省略不写,css代码见电子稿。 <%@page language="java"import="java.util.*"pageEncoding="UTF-8"%> <% String errormessage=(String)request.getAttribute("errormessage"); if(errormessage==null){ errormessage= ""; } %>

javaWeb总结+小结

JavaWeb B/S与C/S的区别 1,从安装上来讲,B/S只需要在服务器端安装即可,而C/S却需要每一个客户端进行安装。2,从部署上来说,B/S只需要服务器能够支持即可,而C/S却对每一个客户端的电脑提出了要求。 3,从升级,维护角度来说,B/S只需要在服务器端升级维护即可,像网易的邮箱,而C/S 却是服务器更新维护一次,客户端就要下载相关的补丁才能使用 4,从安全性来讲,B/S是基于服务器的,较之C/S安全性好 5,从本质上来说,B/S是基于请求驱动的,即客户端发送一个Http请求,然后服务器进行处理之后,响应给客户端,而C/S却是基于事件驱动的,像腾讯的QQ。 6,从耦合度来讲,B/S与服务器端耦合,而C/S却是与客户端的操作系统进行耦合。 但是Client/Server(从游戏的角度来讲)较之Brows/Server具有优质的画面。 Servlet的使用步骤: 1,创建一个JA V A类,存放在com.fit.servlet包中,并且此类extends HttpServlet类,才能成为一个Servlet 2,覆写doGet()和doPost()方法 3,最后,在web.xml文件中进行Servlet配置。具体的配置如下: Servlet类名 完整的包.类名称 Servlet类名 网页访问的名称,例如/hello Servlet的生命周期,作用,并说出和CGI(Common Gateway Interface)的区别 就是指Servlet从创建出实例对象到销毁的过程。它是一个容器,负责创建实例来接受客户端的请求,并且以多线程的方式响应给客户。具体过程如下: Servlet被服务器实例化之后,容器运行其init方法进行初始化,请求到达时运行其service 方法,在此过程中仅创建一个对象,然后service方法自动调用与请求相应的doXxx方法,当服务器决定将实例进行销毁时,再调用其destroy方法。 与CGI(通用网关接口)的区别在于,Servlet处于服务器进程中,它通过多线程的方式运

Javaweb开发中的servlet知识总结

Java web开发中的servlet知识总结 1. 请求(request)—响应(response)模式:用户在浏览器的地址栏中输入一个网址并回 车,浏览器会向服务器发送一个HTTP请求,服务器端程序接受这个请求,并对请求做 出处理,然后发出一个回应,浏览器收到这个回应,并把回应的内容显示出来,这就是web应用程序的访问过程。 2. HTTP协议:浏览器单击链接是,会向服务器发送一段文本,告诉服务器请求的是那个 网页,这段文本遵循HTTP协议格式,包含访问方式,HTTP协议版本,所用的浏览器,访问的地址等。 3. Servlet概述:Java web应用程序中所有的请求与响应都是通过servlet来完成的,servlet 是java web的核心程序,所有的网址最终都要交给servlet来处理,servlet没有main之类的执行方法,当用户访问服务器是,服务器通过调用servlet的某些方法来处理整个过程。4. Servlet的工作流程:浏览器提交的数据是遵循HttP协议的文本,这段文本由服务器接 受并解析,封装成httpservletrequest类型的request对象,所有的http头数据都可以通过request的相应方法得到。Tomcat同时把输出流圭寸装成HTTPServletresponse类型的 response,通过设置response的相关属性就可以控制输出的内容,然后服务器将request 和response作为参数,调用servlet的相应方法比如doPost,doGet等。 5. Servlet的作用:主要处理业务逻辑,比如读取数据库,权限检查,业务处理等。 6. Servlet 接口:servlet 是一种实现了javax.servlet.Servlet 接口的类,servlet 规定了特定的 方法来处理特定的请求,开发者只需要实现servlet的相应方法,用户访问web程序的时候,服务器会调用这些方法来完成业务处理。 7. 访问方式:servlet是建立在HTTP规范基础上的,HTTP1.1支持options , get, post, head , put,delete,以及trace七种访问方式,各方式的意义分别是: Get表示查询信息,URL中可以附少量的参数信息,但是URL总长度不能超过255个字符,并且参数会显示在浏览器的地址栏。 Post表示提交信息,一般用于提交大数据信息或者文件,提交的内容不受长度限制,并且不会显示在浏览器的地址栏。 Options,put,delete,trace属于被声明了,但是没有被使用的web访问方式,现在的浏览器也很少用到这几种方式。 8. Java web目录结构:web程序部署在tomcat下的webapps下面,一个webapps下可以部署 法和从服务器移除的方法,这些方法称为生命周期方法,它们是按以下顺序调用的:构造servlet,然后使用init()方法将其初始化 处理来自客户端对service ()的全部调用 从服务器中取出servlet,然后使用destory()方法将其销毁,最终进行垃圾回收并终止它。 10. servlet 的方法: (1)public void destory() (2)public void init(ServletConfig config ) throws ServletException (3)public void service(ServletRequest req,ServletResponse res)throws

Java Web期末个人总结复习资料

第二章Java Web概述 HTTP请求和响应消息: HTTP是Hyper Text Transfer Protocol的缩写,即超文本传输协议。它是一种请求/响应式的协议,客户端在与服务器端建立连接后,就可以向服务器端发送请求,这种请求被称作HTTP请求,服务器端接收到请求后会做出响应,称为HTTP响应。 HTTP协议特点:支持客户端/服务器模式(C/S);简单快速;灵活;无状态(没有记忆功能) 在HTTP中,一个完整的请求消息是由请求行、请求头和实体内容(消息体)三部分组成;一个完整的响应消息主要包括响应状态行、响应消息头和实体内容(响应体)。 HTTP有8种请求方式,常见的是GET、POST(还有HEAD、OPTIONS、DELETE、TRACE、PUT和CONNECT) GET和POST的区别: ①GET方式地址栏有参数,POST方式地址栏没有参数。 ②GET请求有数据大小的限制(大约1KB),而POST没有限制。 ③GET请求只能进行url编码,而POST支持多种编码方式。 ④POST比GET请求方式更安全。 ⑤GET方式通过URL传递参数(?后面为参数),POST方式将表单元素及数据作 为HTTP消息的实体内容发送给服务器。 状态码:1xx:表示请求已接收,需要继续处理。 2xx:表示请求已成功被服务器接收、理解并接受。(200) 3xx:为完成请求,客户端需进一步细化请求。(302,304) 4xx:客户端的请求有错误。(404) 5xx:服务器端出现错误。(500) 在Eclipse中配置Tomcat: Tomcat是Apache提供的开源免费的运行Servlet和JSP的容器(引擎)。 Tomcat特点:稳定、可靠、效率高 Tomcat默认端口为8080,访问方式为: http://localhost:8080 (localhost也可以是127.0.0.1) 第三章Servlet基础 开发动态Web资源的相关技术比较常见的有ASP、PHP、JSP和Servlet等。基于Java的动态Web资源开发,SUN公司提供了Servlet和JSP两种技术。Servlet是使用Java语言编写的运行在服务器端的程序。Servlet主要用于处理客户端传来的HTTP请求,并返回一个响应,它能够处理的请求有doGet()和doPost()等方法。 Servlet技术特点:方便、跨平台、灵活性和可扩展性。 在Servlet接口中定义了5个抽象方法,分别是: ①void init(ServletConfig config) ②ServletConfig getServletConfig() ③String getServletInfo() ④void service(ServletRequest request,ServletResponse response)

Servlet总结

一、SERVLET基础 1 .组件是什么? 是符合一定规范,实现了部分功能的软件模块,组件需要部署到相应的容器里面才能运行。 2 容器是什么? 是符合一定规范,提供组件运行环境的程序。 3、什么是servlet? sun公司制订的一种用来扩展web服务器功能的组件规范。偏重于业务逻辑的实现4、什么是servelet容器? 是符合一定规范,为servlet组件提供运行环境的程序。 5、如何写一个servlet? step1,写一个java类,要实现Servlet接口或者继承HttpServlet抽象类。 step2,编译。(javac -cp servlet-api.jar -d . 类名.java) step3,打包。 创建一个符合如下结构的文件夹: appname (应用名) WEB-INF classes(放字节码文件) lib(可选,放.jar文件) web.xml(部署描述文件) 注:一般在开发完成之后,交付给用户去使用时, 会使用jar命令将以上文件夹压缩成一个以".war" 为后缀的文件。 step4,部署 将step3创建好的文件夹或者压缩文件(.war文件) 拷贝到servlet容器指定的文件夹下面(比如, 拷贝到tomcat的webapps文件夹)。 step5,访问 http://ip:port/appname/servlet-url servlet-url在web.xml文件当中有相应的配置。 5、servlet如何运行的? 比如,在浏览器地址栏输入 http://ip:port/web01/hello?name=sally 参考day01的servlet2.jpg图片 步骤如下: 1)在浏览器中输入地址确认,浏览器根据IP地址与port号与服务器建立连接 2)浏览器将请求资源路径与请求参数根据http协议打包,生成一个请求数据包 3)浏览器向服务器发送请求(请求数据包) 4)Servlet服务器收到请求后,根据http协议进行解析(拆包) 5)Servlet服务器创建request和response对象,将解析后的请求数据保存在request对象内 6)Servlet服务器根据请求资源路径和web.xml文件找到对应的servlet类,对其实例化7)Servlet服务器创建ServletConfig对象

JSPServlet总结

第一章动态网页开发基础 (1)什么是动态网站 动态网页是指在服务器运行的,根据某种条件变化,返回不同的内容。(2)动态的网页的优势 交互性:即网页会根据用户的要求和选择而动态改变和显示内容。 自动更新:即无须改变页面代码,便会自动生成新的页面内容可以节省工作量。 随机性:即当不同的时间、不同的人访问同一网址时会产生不同的页面结果。 问答:动态网页是静态网页的代替品吗? 解答:静态网页和动态网页各有特点,网站采用动态网页还是静态网页主要取决于网站的功能需求和网站的多少。 C/S(Client/Server,客户端/服务器)架构的系统,其分为客户端和服务器两层,用户在本地安装客户端软件,通过网络与服务器相互通信。 B/S(Browser/Server,浏览器/服务器)B/S架构的web应用程序不在受安装客户端的限制。 B/S维护和升级方式简单 C/S 一般面向相对固定的用户群,页面友好。 B/S架构的工作流程 (1)浏览器接受用户的输入 (2)浏览器向服务器端发送请求 (3)数据处理:服务器端通常使用服务器端脚本语言(如JSP等)进行数据库访问查询数据、解释HTML文件,呈现结果界面。 (4)发送响应:服务器向浏览器发送响应消息(一般是动态生成HTML页面),并由浏览器解释HTML文件,呈现结果界面。 什么是URL URL(Uniform Resource Locator)的意思是统一资源定位符,是用于完整地描述Internet上网的其他资源的地址的一种标示方法。 URl的组成 (1)协议 (2)服务器域名或IP地址 (3)端口号 Tomcat目录结构 /bin 存放各种平台下用于启动和停止Tomacat的脚本文件。 /conf 存放Tomcat服务器的各种配置文件 /lib 存放Tomcat服务器所需的各种JAR文件 /logs 存放Tomcat日志文件 /temp Tomcat运行时用于存放临时文件 /webapps web应用的发布目录

HttpServletrequest 与HttpServletResponse总结汇总

http协议 浏览器需要URL找到服务器当中的资源,浏览器传给服务器一个请求,服务器对这个请求进行相应的处理(比如增删改查),服务器根据处理结果返回给浏览器,浏览器根据返回结果进行相应的处理(比如显示网页显示图片),那么浏览器和服务器怎么相互传输数据,数据如何解析,传输什么格式的数据需要制定好一套规则,HTTP协议就应运而生了,这是一群外国人(www)勾搭之后产生的,HTTP协议自出现以来,主要解决的就是浏览器和服务器数据交换的格式问题,所以HTTP协议定义了一套数据格式,一个http请求一般含有请求方法,请求地址,http协议版本,和header,这些header就相当于http协议提供的功能,你设置相应的header可以让服务器产生相应的行为,服务器响应中一般包含协议版本,状态码和状态码描述,和一大堆header,不同的是请求和响应所支持的header 并不一样,具体的参观相应的介绍,http与web开发的联系中有request 和response对象,使用相应的方法可以取到http请求中header内容也可以返回相应的http内容给浏览器,还有一点就是response 当中定义一大把状态码和状态描述,比如200对相应ok,404对应找不到, 由来 Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest; HTTP 协议是基于请求-响应的协议,客户端请求一个文件,服务器对该请求进行响应。HTTP 使用TCP 协议,默认使用80 端口。最初的HTTP 协议版本是HTTP/0.9,后被HTTP/1.0 替代。目前使用的版本是HTTP/1.1, 在HTTP 协议中,总是由主动建立连接、发送HTTP 请求的客户端来初始化一个事务。服务器不负责连接客户端,或创建一个到客户端的回调连接(callback connection)。 HttpServletRequest 公共接口类HttpServletRequest继承自ServletRequest.客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。所有的信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。 一个HTTP 请求包含以下三部分: a.请求地址(URL) b.请求头(Request headers) c.实体数据(Entity body) 举例如下 POST /examples/default.jsp HTTP/1.1

相关主题
文本预览
相关文档 最新文档