servlet复习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.使用JAVA读写Properties属性文件
Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件。它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,
而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门
的操作属性文件的类。这个类就是 java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。
2.MVC
MVC是 模型(Model),视图(View)和控制(Controller)的缩写,其目的实现Web系统的职能分工。其中Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现; View层用于与用户的交互,
通常用JSP来实现; Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
MVC开始是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
特点:
优点:多个视图对应一个模型;
一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变;
有利于软件工程化管理。
缺点:增加了系统结构和实现的复杂性;
视图与控制器间的过于紧密的连接;
视图对数据模型的低效率访问;
一般高级的界面工具或构造器不支持MVC构架。
3.doGet和doPost的区别
get和post是http协议的两种数据传送方法。
(1) doGet和doPost分别对应get请求和post请求。
(2)如果以超链接或在表单中以get方式传送数据,在servlet中调用doGet方法对请求进行处理。如果在表单中以post方式传送数据,在servlet中调用doPost方法进行处理。
(3)get方法传送的数据量较小,一般为字符串且大小有限制,一般为255。而post方法传送数据量大,也可以是对象。
(4)get方法请求会在地址栏中显示请求的内容,而post方法请求会隐藏内容,更加安全。
(5)doGet方法中不修改服务器端的数据,doPost方法中能修改服务器端的数据。
* doGet方法浏览器直接访问,超级连接默认为doGet;不安全;会在浏览器显示;字符有限制.doPost事件只可接受form的post方法访问.
4.getProperty()方法
将getProperty(String) 方法使用的当前系统属性集合作为 Properties 对象返回。如果没有当前系统属性集合,则先创建并初始化一个系统属性集合


5.request.getRequestDispartcher与reponse.sendRedirect的区别
request.getRequestDispatcher()是请求转发,前后页面共享一个request;
response.sendRedirect()是重新定向 前后页面不是一个request。

转发方式:request.getRequestDispatcher().forward();

重定向方式:response.sendRedirect();


下面是HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较:
(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同
一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;
如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

(2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward
方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

(3)HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找
张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器 ”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏
览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方 法在服务器端内部将请求转发给另外一个资源,浏览器
只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏 览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上
自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

(4)RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者
与被调用者使用各自的request对象和response对象,它们属于两个独立的访

问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使
用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用RequestDispatcher.forward方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应
该使用HttpServletResponse.sendRedirect方法。

(5)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些
内容将被从缓冲区中清除。

怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始
页面将会被重新调用。如果你不想看到这样的情况,则选择转发。
不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
6.Servlet与JSP的比较:

有许多相似之处,都可以生成动态网页。

JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。

Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。

7.servlet生命周期
Servlet是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、
处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生命周期的具体说明如下:
Servlet容器完成加载Servlet类和实例化一个Servlet对象
init()方法完成初始化工作,该方法由Servlet容器调用完成
service()方法处理客户端请求,并返回响应结果
destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源
8.servletContext与servletConfig的区别
ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
ServletContext:对任何servlet,任何人在任何时间都有效,这才是真正全局的对象。
9.request与session的区别
两个生命周期不一样,request的生命周期只在数据提交,提交以后即释

放,session则是浏览器关闭才释放。
例如:一般一些用户信息类的内容都会存在session里,比如购物车内信息,或者用户登录的各种身份验证信息,这样不会因为跳转页面而丢失这些信息。
request和session的优点和缺点
request占用资源比较少 安全性也比较高 可是相对来说 缺乏持续性
session则相对来说 对资源的消耗会大点 安全性相对来说也会稍微低点 可是它能实现比如会话跟踪技术
如果可以使用request的情况下 尽量使用request 因为相对于服务器来说 资源的消耗这个问题还是比较重要的 。
10.模板模式
所谓模板模式,就是在父类中定义算法的主要流程,而把一些个性化的步骤延迟到子类中去实现,父类始终控制着整个流程的主动权,子类只是辅助父类实现某些可定制的步骤。
11.数字
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)它的值必须是一个整数,表示servlet应该被载入的顺序
3)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
4)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
5)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
6)当值相同时,容器就会自己选择顺序来加载。
所以,x,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。
12.动态include与静态include的区别
静态include主要是对静态页面的引入,不会检查所包含文件的变化,include指令在转换时一次性地将内容复制到jsp中,如果所包含的资源发生变化,则使用include指令的jsp将不能反应出新的
内容,除非重新编译该jsp。
动态include主要是对动态页面的引入,它总是会检查所引入的页面的变化,如果所包含的资源在请求间发生变化,则下一次请求包含动作的jsp时,将包含资源的新内容。使用动态
include动作时,根据jsp1.1规范,jsp容器允许判断通过include指令包含的资源是否发生变化。如果发生变化。则容器可以重新编译包含该资源的jsp,然而,该规范并没有提供向容器表明某个包含
的资源发生变化的机制。
静态是先编译一下included.jsp文件,然后再包含---------先编译,后包含
动态是先把文件包含就来,然后统一编译-----------------先包含,后编译
动态include的优点和不足:
优点:

1:引入和同步一个动态的页面,使jsp页面更具灵活性
2:能和不同页面之间进行信息的交互和快捷的实现方式。
3:改变了原始的所有页面编码都放在一个jsp上,

使不同的功能分别写在不同页里,通过动态include方式引用到页面,更易于编码,更易于管理。

不足:

动态的引入时需要频繁的变化和页面信息的更新和交互,要占用大量的资源开销。降低页面的访问速度。如果在没必要动态引入的情况下,不要使用动态include

注意事项:

1:动作的flush属性必须要定义,不定义会出现转换错误。而且设置的flush必须要为true
2:在动作中指定的页面必须是同一web应用程序的一部分。如果引入的是非同一web应用的页面将导致请求时错误。
13.过滤器
过滤器是一种组件,可以截取发送至某Servlet、jsp页面或静态页面的请求,也可以在响应发送至客户之前截获。


















相关文档
最新文档