Java总结(servlet)

资源共享学习交流群号:769674658(快满)
 
qq交流二群(296389054)
 

 

1、什么是Servlet?

答:Servlet是用来处理客户端请求并产生动态网页内容的Java类。
Servlet主要是用来处理或者是存储HTML表单提交的数据,
产生动态内容,在无状态的HTTP协议下管理状态信息。


2、什么是Web容器?有什么作用?你知道哪些web容器?
答:WEB 容器给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,

使 JSP,SERVLET直接跟容器中的环境变量交互,不必关注其它系统问题(从这个角度来说,

web 容器应该属于架构上的概念)。

web 容器主要由 WEB 服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。


3、B/S 与 C/S 的联系与区别?
答:C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,
如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Chrome或Internet Explorer,
服务器安装Oracle或SQL Server等数据库。在这种结构下,用户界面完全通过浏览器实现,一部分事务逻辑在前端实现,
但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。
具体来说,C/S 与 B/S 区别如下: 
1).硬件环境不同: 
  C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
  B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 
有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 
2).对安全要求不同 
  C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
  B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。
3).对程序架构不同 
  C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
  B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 
从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟. 
4).软件重用不同 
  C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
  B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子 
5).系统维护不同 
  C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统
  B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. 
6).处理问题不同 
  C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统
  B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小. 
7).用户接口不同 
  C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
  B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本. 
8).信息流不同 
  C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低
  B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。


4、解释下Servlet的生命周期。
答:对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法,完成Servlet的初始化。
然后,Servlet对象通过为每一个请求单独调用service()方法来处理所有随后来自客户端的请求,
最后,调用Servlet的destroy()方法把Servlet删除掉。


5、doGet()方法和doPost()方法有什么区别?
答:doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。
并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。
最后,通过POST请求传递的敏感信息对外部客户端是不可见的。


6、Servlet 是线程安全的吗?
答:Servlet 不是线程安全的。Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。
当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。
当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。
这样的话,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,
数据可能会变得不一致,所以就很容易造成一系列的一些安全性问题。

要解决Servlet的线程安全问题,可以采用实现 SingleThreadModel 接口、同步对共享数据的操作(即加锁)、

避免使用实例变量等方式。

 


7、如何知道是哪一个客户端的机器正在请求你的Servlet?
答:ServletRequest类可以找出客户端机器的IP地址或者是主机名。
getRemoteAddr()方法获取客户端主机的IP地址,getRemoteHost()可以获取主机名。


8、什么是cookie?session和cookie有什么区别?
答:cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。
以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:
无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,
但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。
在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。


9、Request 对象的主要方法有哪些?(至少四个)
答:Request对象的主要方法: 
setAttribute(String name,Object):设置名字为name的request 的参数值 
getAttribute(String name):返回由name指定的属性值 
getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例 
getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组 
getCharacterEncoding() :返回请求中的字符编码方式 
getContentLength() :返回请求的 Body的长度 
getHeader(String name) :获得HTTP协议定义的文件头信息 
getHeaders(String name) :返回指定名字的request Header 的所有值,结果是一个枚举的实例 
getHeaderNames() :返回所以request Header 的名字,结果是一个枚举的实例 
getInputStream() :返回请求的输入流,用于获得请求中的数据 
getMethod() :获得客户端向服务器端传送数据的方法 
getParameter(String name) :获得客户端传送给服务器端的有 name指定的参数值 
getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例 
getParameterValues(String name):获得有name指定的参数的所有值 
getProtocol():获取客户端向服务器端传送数据所依据的协议名称 
getQueryString() :获得查询字符串 
getRequestURI() :获取发出请求字符串的客户端地址 
getRemoteAddr():获取客户端的 IP 地址 
getRemoteHost() :获取客户端的名字 
getSession([Boolean create]) :返回和请求相关 Session 
getServerName() :获取服务器的名字 
getServletPath():获取客户端所请求的脚本文件的路径 
getServerPort():获取服务器的端口号 
removeAttribute(String name):删除请求中的一个属性 


10、浏览器和Servlet通信使用的是什么协议?
答:浏览器和Servlet通信使用的是HTTP协议。


11、JSP 页面之间传递参数的方法有哪些?
答:cookie和session、request.setAttribute和request.getAttribute、URL追加参数等。


12、MVC是什么?
答:MVC 是一种软件设计典范,是Model-View-Controller 的简写。Model 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现), 
View是应用的表示面(由JSP 页面产生),Controller 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把
应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。


13、sendRedirect()和forward()方法有什么区别?
答:sendRedirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上。
重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,
而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。
一般认为sendRedirect()比forward()要慢。


14、何时使用转发?何时使用重定向?
答:对于前后两个页面,如有数据传递,则用请求转发,没有则用重定向。
比如servlet查询了数据需要在页面显示,就用请求转发。
比如servlet做了update操作跳转到其他页面,就用重定向。


15、Tomcat 服务器的默认端口是多少?怎样修改 tomcat 的端口?
答:Tomcat 服务器的默认端口是8080,可以在Tomcat安装目录下的conf文件夹找到并打开server.xml文件,
修改其中<Connector>标签的port属性值实现修改端口的目的。


16、什么是JSP页面?
答:JSP页面是一种包含了静态数据和JSP元素两种类型的文本的文本文档。静态数据可以用任何基于文本的格式来表示,
比如:HTML或者XML。JSP是一种混合了静态内容和动态产生的内容的技术。


17、JSP请求是如何被处理的?
答:浏览器首先要请求一个以.jsp扩展名结尾的页面,发起JSP请求,然后,Web服务器读取这个请求,

 

 

使用JSP编译器把JSP页面转化成一个Servlet类。

 

需要注意的是,只有当第一次请求页面或者是JSP文件发生改变的时候JSP文件才会被编译,

然后服务器调用servlet类,处理浏览器的请求。一旦请求执行结束,servlet会把响应发送给客户端。


18、JSP 和 Servlet 有哪些相同点和不同点,他们之间的联系是什么? 
             答:JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。
相同点:JSP和Servlet和本质上都是java类。
不同点: Servlet 的应用逻辑是在 Java 文件中,并且完全从表现层中的 HTML 里分离开来。
              而 JSP 的情况是 Java和 HTML 可以组合成一个扩展名为.jsp 的文件。
              JSP 侧重于视图,Servlet 主要用于控制逻辑。


19、JSP有什么优点?
答:使用JSP的优点:
JSP页面是被动态编译成Servlet的,因此,开发者可以很容易的更新展现代码。
JSP页面可以被预编译。
JSP页面可以很容易的和静态模板结合,包括:HTML或者XML,也可以很容易的和产生动态内容的代码结合起来。
开发者可以提供让页面设计者以类XML格式来访问的自定义的JSP标签库。
开发者可以在组件层做逻辑上的改变,而不需要编辑单独使用了应用层逻辑的页面。


20、隐含对象是什么意思?有哪些隐含对象?
答:JSP隐含对象是页面中的一些Java对象,JSP容器让这些Java对象可以为开发者所使用。
开发者不用明确的声明就可以直接使用他们。JSP隐含对象也叫做预定义变量。下面列出了JSP页面中的隐含对象:
application
page
request
response
session
exception
out
config
pageContext


21、JSP作用域有哪些?
答:所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。
4个JSP内置对象的作用域分别为:application、session、request、page 。
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。 
整个应用是指从应用启动,到应用结束。
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。
所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。
所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。
如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。


22、谈谈你对Servlet过滤器的理解。
答:Servlet过滤器是Servlet2.3规范中定义的一种小型的、可插入的Web组件。
用来拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。
过滤器通常封装了一些功能的类,实现了对Web应用程序中的预处理和后期处理逻辑。
例如记录请求和响应的数据、管理会话属性等。


23、你在使用servlet的过程中,遇到过哪些错误?
答:505 HTTP Version Not Supported 服务器不支持所指定的HTTP版本
504 Gateway Timeout 网关超时
502 Bad Gateway 请求不完整,服务器从上游服务器接受了一个无效的响应
500 Internal Server Error 请求不完整,服务器遇见了出乎意料的状况
406 Not Acceptable 服务器只能创建一个客户端无法接受的响应
405 Method Not Allowed 请求中所指定的方法不被允许
404 Not Found 服务器无法找到所请求的页面
403 Forbidden 禁止访问所请求的页面
400 Bad Request 服务器无法识别请求
200 OK 请求被确认

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值