JavaEE基础必会关于Tomcat和Servlet的面试题

时间:2019-12-08 08:00:02 来源:中国农业机械网 当前位置:我以为终有一天 > 变废 > 手机阅读
JavaEE基础必会关于Tomcat和Servlet的面试题

什么是Tomcat?

Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器。

tomcat结构目录有哪些?

bin:启动和关闭tomcat的bat文件

conf:配置文件

server.xml该文件用于配置server相关的信息,比如tomcat启动的端口号,配置主机(Host)

web.xml文件配置与web应用(web应用相当于一个web站点)

tomcat-user.xml配置用户名密码和相关权限.

lib:该目录放置运行tomcat运行需要的jar包

logs:存放日志,当我们需要查看日志的时候,可以查询信息

webapps:放置我们的web应用

work工作目录:该目录用于存放jsp被访问后生成对应的server文件和.class文件

如何配置Tomcat虚拟目录?

1. 在server.xml中的节点下添加如下代码。path表示的是访问时输入的web项目名,docBase表示的是站点目录的绝对路径

2. 进入到confCatalinalocalhost文件下,创建一个xml文件,该文件的名字就是站点的名字。

Tomcat体系结构是怎样的?

浏览器 -> tomcat server-> service ->connector -> engine(引擎) -> host(主机) -> web应用

Web请求在Tomcat请求中的请求流程是怎么样的?

1.浏览器输入URL地址

2.查询本机hosts文件寻找IP

3.查询DNS服务器寻找IP

4.向该IP发送Http请求

5.Tomcat容器解析主机名

6.Tomcat容器解析Web应用

7.Tomcat容器解析资源名称

8.Tomcat容器获取资源

9.Tomcat响应浏览器

什么是Servlet?

Servlet其实就是一个遵循Servlet开发的java类。

Servlet是由服务器调用的,运行在服务器端。

HttpServlet类有哪些方法?

有init【初始化】,destroy【销毁】,service【服务】,ServletConfig【Servlet配置】,getServletInfo【Servlet信息】。

Servlet生命周期?

  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()只有第一次访问Servlet的时候才会被调用。destroy()只有在Tomcat关闭的时候才会被调用。

Servlet是单例的吗?

浏览器多次对Servlet的请求,一般情况下,服务器只创建一个Servlet对象,也就是说,Servlet对象一旦创建了,就会驻留在内存中,为后续的请求做服务,直到服务器关闭。

Servlet是如何实现请求和响应的?

对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

Servlet存在线程安全的问题吗?

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

如果一个变量需要多个用户共享,则应当在访问该变量的时候,加同步机制synchronized (对象){}

如果一个变量不需要共享,则直接在 doGet() 或者 doPost()定义.这样不会存在线程安全问题

Servlet的加载时机是在什么时候?

在servlet的配置当中,可以使用5标签进行配置

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

为什么我没有配置关于图片的Servlet我缺可以访问这个静态图片?

在web访问任何资源都是在访问Servlet,这是由缺省Servlet为你服务的!

什么叫做缺省Servlet?凡是在web.xml文件中找不到匹配的元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求

既然我说了在web访问任何资源都是在访问Servlet,那么我访问静态资源【本地图片,本地HTML文件】也是在访问这个缺省Servlet【DefaultServlet】

总结:无论在web中访问什么资源【包括JSP】,都是在访问Servlet。没有手工配置缺省Servlet的时候,你访问静态图片,静态网页,缺省Servlet会在你web站点中寻找该图片或网页,如果有就返回给浏览器,没有就报404错误

ServletConfig对象有什么用?

ServletConfig获取的是配置的是单个Servlet的参数信息,ServletContext可以获取的是配置整个web站点的参数信息

通过此对象可以读取web.xml中配置的初始化参数。

能够让你的程序更加灵活【更换需求,更改配置文件web.xml即可,程序代码不用改】

什么是ServletContext对象?

当Tomcat启动的时候,就会创建一个ServletContext对象。它代表着当前web站点

ServletContext既然代表着当前web站点,那么所有Servlet都共享着一个ServletContext对象,所以Servlet之间可以通过ServletContext实现通讯。

ServletConfig获取的是配置的是单个Servlet的参数信息,ServletContext可以获取的是配置整个web站点的参数信息

可以利用ServletContext读取web站点的资源文件实现Servlet的转发【用ServletContext转发不多,主要用request转发】

通过Servlet读取一个文件有哪些方式?

  • 文件在class路径下(使用绝对路径)
ServletContext servletContext = this.getServletContext();
InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/classes/test/web/1.png")
  • 文件在class路径下(使用类加载器)
ClassLoader classLoader = Servlet111.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("3.png");
  • 文件在Web路径下(相对路径名)
ServletContext servletContext = this.getServletContext();
InputStream inputStream = servletContext.getResourceAsStream("2.png");

什么是HttpServletRequest和HttpServletResponse对象?

Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象、和代表响应的response对象。

HttpServletRequest和HttpServletResponse就是针对请求和响应进行封装的对象。

HttpServletResponse向页面输出内容的方式有哪些?

  • 调用getOutputStream()方法向浏览器输出数据
response.getOutputStream().write("aaa".getBytes());
  • 调用getWriter()方法向浏览器输出数据
PrintWriter printWriter = response.getWriter(); printWriter.write("哈哈!");
  • 解决输出中文乱码
response.setContentType("text/html;charset=UTF-8");

Tomcat的缺省端口是多少,怎么修改

8080

  1. 找到Tomcat目录下的conf文件夹
  2. 进入conf文件夹里面找到server.xml文件
  3. 打开server.xml文件
  4. 在server.xml文件里面找到下列信息
 
connectionTimeout="20000"
redirectPort="8443" />

Tomcat 有哪几种Connector 运行模式(优化)?

  1. bio(blocking I/O)
  2. nio(non-blocking I/O)
  3. apr(Apache Portable Runtime/Apache可移植运行库)

bio: 传统的Java I/O操作,同步且阻塞IO。

nio: JDK1.4开始支持,同步阻塞或同步非阻塞IO

aio(nio.2): JDK7开始支持,异步非阻塞IO

Tomcat有几种部署方式?

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

get方式和post方式有何区别

  • 数据携带上

GET方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。

POST方式:可以在请求的实体内容中向服务器发送数据,传送的数据量无限制。

  • 请求参数的位置上

GET方式:请求参数放在URL地址后面,以?的方式来进行拼接

POST方式:请求参数放在HTTP请求包中

  • 用途上

GET方式一般用来获取数据

POST方式一般用来提交数据

HttpServlet的 doGet与doPost方法的两个参数是什么

HttpServletRequest:封装了与请求相关的信息

HttpServletResponse:封装了与响应相关的信息

Servlet获取页面的元素的值有几种方式,分别说一下

request.getParameter() 返回客户端的请求参数的值

request.getParameterNames() 返回所有可用属性名的枚举

request.getParameterValues() 返回包含参数的所有值的数组

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

  • 用途上

request.getAttribute(), 一般用于获取request域对象的数据(在跳转之前把数据使用setAttribute来放到request对象上)。

request.getParameter(), 一般用于获取客户端提交的参数。

  • 存储数据上

request.getAttribute()可以获取Objcet对象

request.getParameter()只能获取字符串(这也是为什么它一般用于获取客户端提交的参数)

forward和redirect的区别?

  • 发生位置不同

转发是发生在服务器的,重定向是发生在浏览器的(二次请求,丢失第一次请求的数据)。

  • 传递数据的类型不同

转发的request对象可以传递各种类型的数据,包括对象,重定向只能传递字符串。

  • 跳转的时间不同

转发时:执行到跳转语句时就会立刻跳转。

重定向:整个页面执行完之后才执行跳转。

  • 能够去往的URL的范围不一样:

转发是服务器跳转只能去往当前web应用的资源。

重定向是服务器跳转,可以去往任何的资源。

  • 典型的应用场景:

转发: 访问 Servlet 处理业务逻辑,然后 forward 到 jsp 显示处理结果,浏览器里 URL 不变

重定向: 提交表单,处理成功后 redirect 到另一个 jsp,防止表单重复提交,浏览器里 URL 变了

tomcat容器是如何创建servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过 反射的方式实例化。(有时候也是在第一次请求时实例化)。

在servlet注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。


你觉得帮助到你了吗? (多选)
0
0%
我很需要这些内容,请及时更新
0
0%
我会在有需要的时候关注这些动内容
0
0%
不太关注,我不需要

上一篇健康和喝酒:健康地喝酒

下一篇Boulevard | Goop健康论坛带来了什么?

变废本月排行

变废精选