servlet面试题及答案~01(自己从整理的加上一些自己的看法,恩都挺简单的更多的是基础的考察)

0828

servlet简介

1)什么是Servlet?

可以从两个方面去看Servlet:

a、API:有一个接口servlet,它是servlet规范中定义的用来处理客户端请求的程序需要实现的顶级接口。

b、组件:服务器端用来处理客户端请求的组件,需要在web.xml文件中进行置。

注:以上是从servlet的api角度和组件看待servlet的,我倒是感觉还如从定义上说,可能更容易理解. 1)servlet是运行在服务端的小程程序,是sun公司提供的一套规范的接口. 2)用来处理客户端请求,响应给游览器的动态资源. 这两种说法都可以,其实都是一样的.

2)Servlet何时创建? Servlet何时销毁? 每次访问必然执行的方法

默认第一次访问servlet时创建该对象

服务器关闭servlet就销毁了

service(ServletRequest req, ServletResponse res)方法

注:这是一道有关servlet的声明周期的题,务必要清楚servlet的创建销毁时机.

3)对XXXServlet进行了10次访问,init(),destory(),service(),doGet(),doPost() 一共执行力多少次?request对象创建几个?response创建几个?

init(),1次

destory(),服务器没有关闭, 不执行

service(),10次

request对象创建10个

response创建10个

注:每次访问service方法都必执行,其中service方法有两个参数

ServletRequest :代表请求 认为ServletRequest 内部封装的是http请求的信息

ServletResponse :代表响应 认为要封装的是响应的信息

4)Servlet的生命周期,并说出Servlet和CGI的区别?

servlet声明周期分5个步骤

1.加载servlet.当tomcat第一次访问servlet的时候,tomcat就会负责servlet的实例化.

2.初始化,当servlet被实例化执行,tomcat会被调用init()方法初始化这个对象

3.处理服务.当游览器访问servlet的时候,servlet会调用service方法处理请求

4.销毁.当tomcat关闭时或者检测到servlet要从tomcat删除的时候,自动调用destroy方法,让该实例释放掉所占的资源,一个servlet如果长时间不被使用的话,也会被tomcat自动销毁

5.卸载.当servlet调用完destroy方法后,等待垃圾回收,如果需要再次使用这个servlet会重新调用init方法进行初始化操作.

注:只要访问servlet,service就会被调用,init只有第一次访问到的时候才会被调用.destroy只有在tomcat被关闭时才会被调用.

区别:

Servlet处于服务器进程中,它通过多线程运行service()方法,一个实例可以服务于多个请求,并且实例一般不会被销毁;而CGI对每个请求都产生一个新的进程,服务完成后就销毁,所有效率低于Servlet

注:我们都知道web服务器所处理的内容都是静态的,要想处理动态内容,需要依赖于web应用程序,如php、jsp、python、perl等。但是web server如何将动态的请求传递给这些应用程序?它所依赖的就是cgi协议.简单的说就是通过cgi协议,再结合已搭建好的web应用程序,就可以让web server也能"处理"动态请求

博客园骏马金龙https://www.cnblogs.com/f-ck-need-u/p/7627035.html建立读一下即可,其中cgi协议重点理解一下,其他可以不读或者略读.

5)Servlet接口中有哪些方法?

  1. void init(ServletConfig config)//初始化
  2. void service(ServletRequest req, ServletResponse resp) //服务
  3. void destory()//销毁
  4. String getServletInfo()//servlet信息
  5. ServletConfig getServletConfig()//servlet配置

6)get和post请求的区别?

  1. get是用来从服务器上获取数据,而post是用来向服务器传递数据;

  2. get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?“连接,变量之间用”&"连接;而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。

  3. get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。

  4. get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。

  5. get限制form表单的数据集必须为ASCII字符;而post支持整个

  6. get包含请求体,post不包含请求体.

    :从数据长度、安全性、传递方式、是否包含请求体、数据流向、字符集谈即可

7)什么情况下调用doGet()和doPost()?

默认情况是调用doGet()方法,JSP页面中的Form表单的method属性设置为post的时候,调用的为doPost()方法;为get的时候,调用deGet()方法。

6)转发(Forward)和重定向(Redirect)的区别?

转发(Forword)
通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest 的getRequestDispatcher()方法获得。例如下面的代码就是跳转到login_success.jsp页面。

request.getRequestDispatcher("login_success.jsp").forward(request, response);

重定向(Redirect) 是利用服务器返回的状态吗来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletRequestResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。

  1. 从地址栏显示来说

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。
    redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。

  2. 从数据共享来说

    forward:转发页面和转发到的页面可以共享request里面的数据.
    redirect:不能共享数据.

  3. 从运用地方来说

    forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
    redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

  4. 从效率来说

    forward:高.
    redirect:低.

:转发是服务器行为,重定向是客户端行为。

8)什么自动刷新(Refresh)?

自动刷新不仅可以实现一段时间之后自动跳转到另一个页面,还可以实现一段时间之后自动刷新本页面。Servlet中通过HttpServletResponse对象设置Header属性实现自动刷新例如:

Response.setHeader("Refresh","1000;URL=http://localhost:8080/servlet/example.htm");

其中1000为时间,单位为毫秒。URL指定就是要跳转的页面(如果设置自己的路径,就会实现每过一秒自动刷新本页面一次)

你可能感兴趣的:(javaweb,servlet01)