Servlet和JSP面试题

Servlet的生命周期,以及Servlet和CGI的区别

Servlet的生命周期:

  1. Web容器加载Servlet并将其实例化后,Servlet生命周期开始.
  2. 容器运行其init()方法进行Servlet的初始化.
  3. 请求到达时调用Servlet的service方法,service方法会调用与请求对应的doGet或doPost等方法.
  4. 当服务器关闭会项目被卸载时服务器会将Servlet实例销毁.此时会调用Servlet的destroy方法.

CGI:
CGI(Common Gateway Interface)通用网关接口.
通过CGI接口,Web服务器就能够获取客户端传递的数据,并转交给服务器端的CGI程序处理,然后返回结果给客户端(CGI程序是实现了CGI接口标准的程序).
Web服务器接收到动态脚本请求,Web服务器主进程就会创建出一个新的进程来启动CGI程序,也就是将动态脚本交给CGI程序来处理.当CGI程序启动后会去解析动态脚本,然后将结果返回给Web服务器,最后由Web服务器将结果返回给客户端,之前创建出来的进程也随之关闭.
(转自:https://www.jianshu.com/p/c4dc22699a42)


Servlet与CGI的区别:
在于Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁.
CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet.随着Fast CGI解决CGI效率上的问题,二者在效率长差别不是很大.

转发(forward)和重定向(redirect)的区别

forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址.
redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址.
前者更加高效,在前者可以满足需要时,尽量使用转发.(通过RequestDispatcher对象的forward方法.RequestDispatcher对象可以通过ServletRequest对象的getRequestDispatcher方法获得),并且,这样也有助于隐藏实际的链接.
在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用重定向(通过HttpServletResponse对象调用其sendRedirect方法)

JSP的内置对象及其作用

  • request:封装客户端的请求,其中包含来自GET或POST请求的参数.
  • response:封装服务器对客户端的响应.
  • pageContext:通过该对象可以获取其他对象.
  • session:封装用户会话的对象.
  • application:封装服务器运行环境的对象.
  • out:输出服务器响应的输出流对象.
  • config:Web应用的配置对象.
  • page:JSP页面本身(相当于Java程序中的this).
  • exception:封装页面抛出异常的对象.

get和post请求的区别

  1. get请求用来从服务器上获得资源,而post是用来向服务器提交数据.
  2. get将表单中数据按照name=value的形式,添加到action所指向的URL后面.并且两者使用“?”连接,而各个变量之间使用“&”连接.post是将表单中的数据放在HTML头部(header),传递到action所指向URL.
  3. get传输的数据要受到URL长度限制(1024字节).而post可以传输大量的数据,上传文件只能使用post方式
  4. 使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get.对于敏感数据还是应用使用post.

JSP和Servlet的关系

Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容.
JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成.
Servlet和JSP最主要的不同点在于:

  • Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来.
  • JSP是将Java和HTML可以组合成jsp文件.
  • JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller).

JSP中的四种作用域

  1. page:代表与一个页面相关的对象和属性.
  2. request:代表与Web客户机发出的一个请求相关的对象和属性.一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域.
  3. session:代表与某个用户与服务器建立的一次会话相关的对象和属性.跟某个用户相关的数据应该放在用户自己的session中.
  4. application:代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面,请求和会话的一个全局作用域.

你可能感兴趣的:(java)