Tomcat+Servlet面试题

一、Tomcat的缺省端口怎么修改

找到Tomcat文件夹下面的server.xml文件
打开之后找到

  <Service name="Catalina">
  

    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

把8080改成你想要改成的端口号,一般情况下都是改为默认80端口,前提是你想要修改的端口号没有被占用

二、Tomcat有哪几种Connector允许模式(优化)?

  1. bio:传统的Java I/O操作,同步且阻塞IO
  2. nio:同步阻塞或者同步非阻塞IO
  3. aio:异步非阻塞IO
  4. apr:Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大的提高了Tomcat对静态文件的处理性能

三、Tomcat有几种部署方式

  1. 直接把web项目放在webapps下,Tomcat会自动将其部署
  2. 在server.xml文件上配置节点,设置相关属性即可
  3. 通过Catalina来进行配置:进入到confCatalinalocalhost文件下,创建一个xml文件,该文件的名字就是站点名字。

四、Servlet的生命周期

  1. 加载Servlet。当Tomcat第一次访问Servlet的时候,Tomcat会负责创建Servlet的实例
  2. 初始化。当Servlet被实例化后,Tomcat会调用init()方法初始化这个对象
  3. 处理服务。当浏览器访问Servlet的时候,Servlet会调用service()方法处理请求
  4. 销毁。当Tomcat关闭或者检测Servlet要从Tomcat删除的时候会自动调用destroy()方法,让该实例释放掉所占的资源
  5. 卸载。当Servlet调完destroy方法后,等待垃圾回收,如果有需要再次使用这个Servlet的时候,会重新用init方法初始化

五、get方式和post方式有何区别

在请求参数上:

  • Get方式:请求参数放在URL地址后面,以?的方式 进行拼接
  • POST方式:请求参数放在HTTP请求包中
    数据携带上
  • Get方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1k。
  • POST方式:可以在请求的实体内容中向服务器发送数据,传输的数据量无限制。
    用途上
  • GeT方式一般用来获取数据
  • POST方式一般用来提交数据
    原因:首先是因为GET方式携带的数据量比较小,无法发过去很大的数量。POST方式提交的参数后台更加容易解析。Get方式比POST方式要快。

六、doGet与doPOST方法的两个参数是什么

1.HTTPServletRequest:封装了与请求相关的信息
2.HTTPServletResponse:封装了与响应相关的信息

七、request.getAttribute()和request.getParameter()区别

用途上

  • 前者一般用于获取request域对象的数据,在跳转之前吧数据使用setAttribute来放到request对象上。
  • 后者一般用于获取客户度提交的参数。
    存储数据上
  • 前者可以获取Object对象
  • 后者只能获取字符串,这也是为什么它一般用于获取客户端提交的参数

八、forward和redirect的区别

  • 实际发生位置不同,地址栏不同
  • 转发发生在服务器,重定向发生在浏览器
  • 用法不同
    request.getRequestDispatcher("/资源名 URI").forward(request,response)

转发时"/"代表的是本应用程序的根目录
response.send("/web应用/资源名 URI");
重定向时"/"代表的是webapps目录

  • 能够去往的URL的范围不一样:
    1、转发是服务器跳转只能去往当前web应用的资源
    2、重定向是服务器跳转,可以去任何的资源
  • 传递数据的类型不同
    1、转发的request对象可以传递各种类型的数据,包括对象
    2、重定向只能传递字符串
  • 跳转的时间不同
    1、转发是执行到跳转语句是就会立刻跳转
    2、重定向是整个页面执行完之后才会执行跳转

九、Tomcat是如何创建Servlet类实例的?用到了什么原理?

1、当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过 反射的方式实例化。(有时候也是在第一次请求时实例化)
2、在servlet注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

十、Servlet安全性问题

由于Servlet是单例的,当多个用户访问Servlet的时候,服务器会为每个用户创建一个线程,当多个用户并发访问Servlet共享资源的时候就会出现线程安全问题。

原则:
1、如果一个变量需要多个用户共享,则应当在访问变量的时候,加同步机制。
2、如果一个变量不需要共享,则
直接在doGet()或者doPost()定义
这样不会存在线程安全问题

猜你喜欢

转载自blog.csdn.net/zls120377/article/details/83180622