2019年Java面试题(九) Servlet 2019-04-27

1. Servlet的生命周期

答:

      分为 5 个阶段:加载、创建、初始化、处理客户请求、卸载。

①、加载:容器通过类加载器使用 Servlet 类对应的文件加载 servlet;

②、创建:通过调用 Servlet 构造函数创建一个 Servlet 实例;

③、初始化:调用 init() 方法初始化;

④、处理客户请求:每当有一个客户请求,容器会创建一个新的线程来处理客户请求(调用 service() 方法来响应客户请求,service() 方法会根据请求的 method 属性来调用 doGet() & doPost() 方法)

⑤、卸载:容器在卸载 Servlet 之前,需要调用 destroy() 方法让 Servlet 自己释放其占用的资源。

2. 如何现实servlet的单线程模式

<%@ page isThreadSafe=”false”%>

3. JAVA SERVLET API中forward() 与redirect()的区别?

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,其实客户端浏览器只发了一次请求,所以它的地址栏中还是原来的地址,session,request参数都可以获取。

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,相当于客户端浏览器发送了两次请求。

4. 过滤器的作用

答:

可以验证客户是否来自可信的网络,可以对客户提交的数据进行重新编码,可以从系统里获得配置的信息,可以过滤 掉客户的某些不应该出现的词汇,可以验证用户是否登录,可以验证客户的浏览器是否支持当前的应用,可以记录 系统的日志等等。

5. 过滤器的用法

答:

首先要实现(implements)Filter 接口,同时覆盖Filter 接口的三个方法:

init(FilterConfig config) //用于获得FilterConfig 对象;

doFilter(ServletRequest request, ServletResponse response,FilterChain chain) //进行过滤处理一些业务;

destroy() //销毁Filter。

6. 过滤器和监听器的区别

答:

过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,监听器Listener是实现了 javax.servlet.ServletContextListener 接口的服务器端程序

都是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁

过滤器拦截指定的请求,监听器侦听指定的动作

7. 转发和重定向的区别

答:转发是服务器端跳转,地址栏地址不改变,客户端向服务器发送一次请求,重定向是客户端跳转,地址栏地址发生改 变,向服务器发送两次请求

8. POST和GET的区别

答:

1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。

因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

2、传输数据的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

3、安全性

POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击

4、HTTP中的GET,POST,SOAP协议都是在HTTP上运行的

9. doGet()方法和doPost()方法有什么区别?

doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。

doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。

10. sendRedirect()和forward()方法有什么区别?

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

11. 什么是MVC

答:MVC是一种设计模式,即model(模型)、view(视图)、control(控制)分离设计;这是目前WEB 应用服务系统 的主流设计方向。

Model:即处理业务逻辑的模块,每一种处理一个模块;

View:负责页面显示,显示MODEL 处理结果给用户,主要实现数据到页面转换过程;

Control:负责每个请求的分发,把FORM 数据传递给MODEL 处理,把处理结果的数据传递给VIEW 显示。

12. 解释一下mvc 以及熟悉的mvc 框架

MVC 是Model-View-Controller 的简写。Model 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现), View 是应用的表示层(由JSP、HTML、各种Taglib 等组成),Controller 是提供应用程序的中心控制处理。通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用,另外有利于维护。Struts1、Struts2、Spring MVC、WebWork 等这些都是属于基于MVC 模式实现的框架

13. Tomcat,apache,jboss的区别

Tomcat是servlet容器,用于解析jsp,servlet。是一个轻量级的高效的容器;缺点是不支持EJB,只能用于Java应用。

Apache是http服务器(web服务器),类似于IIS可以用来建立虚拟站点,编译处理静态页面。支持SSL技术,支持多个虚拟主机等功能。

Jboss是应用服务器,运行EJB的javaee应用服务器,遵循javaee规范,能够提供更多平台的支持和更多集成功能,如数据库连接,JCA等。其对servlet的支持是通过集成其他servlet容器来实现的。如tomcat。

你可能感兴趣的:(2019年Java面试题(九) Servlet 2019-04-27)