Java 面试机经(初级篇-12期)
2021/7/1 17:38:57
本文主要是介绍Java 面试机经(初级篇-12期),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
二、Web 基础
109. Servlet 接口中有哪些方法?
答案:
Servlet 接口定义了 5 个方法,其中前三个方法与 Servlet 生命周期相关:
- void init(ServletConfig config) throws ServletException - void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException - void destory() - java.lang.String getServletInfo() - ServletConfig getServletConfig()
110. Servlet 的生命周期?
答案:
Servlet 的生命周期,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由 javax.servlet.Servlet 接口的 init(),service()和destroy 方法表达。 Servlet 被服务器实例化后,容器运行其init 方法,请求到达时运行其service 方法,service 方法自动派遣运行与请求对应的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy 方法。 web 容器加载servlet,生命周期开始。通过调用 servlet 的 init()方法进行 servlet 的初始 化。通过调用 service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web 容器调用 servlet 的 destroy()方法。
演示代码:
@WebServlet(description = "Demo Servlet 1", urlPatterns = {"/Servlet1"}, initParams = {@WebInitParam(name = "param1", value = "value1")}) public class Servlet1 extends HttpServlet { private static final long serialVersionUID = 1L; private transient ServletConfig config; public Servlet1() { super(); } public void init(ServletConfig config) throws ServletException { System.out.println("servlet init ..." + this); this.config = config; System.out.println("Context Path ..." + this.getServletContext().getContextPath()); } public void destroy() { System.out.println("destroy servlet ..." + this); } public ServletConfig getServletConfig() { System.out.println("getServletConfig ..." + this.config); return this.config; } public String getServletInfo() { System.out.println("getServletInfo ... version 1"); return "version 1"; } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("servlet service ..."); getServletInfo(); } }
111. 监听器有哪些作用和用法?
答案:
Java Web 开发中的监听器(listener)就是 application、session、request 三个对象创建、销 毁或者往其中添加修改删除属性时自动执行代码的功能组件:
(1)ServletContextListener:对Servlet 上下文的创建和销毁进行监听。(2)ServletContextAttributeListener:监听Servlet 上下文属性的添加、删除和替换。(3)HttpSessionListener:对 Session 的创建和销毁进行监听。
(4)HttpSessionAttributeListener:对 Session 对象中属性的添加、删除和替换进行监听。
(5)ServletRequestListener:对请求对象的初始化和销毁进行监听。
(6)ServletRequestAttributeListener:对请求对象属性的添加、删除和替换进行监听。
112. web.xml 文件中可以配置哪些内容?
答案:
web.xml 用于配置 Web 应用的相关信息,如:监听器(listener)、过滤器(filter)、 Servlet、 相关参数、会话超时时间、安全验证方式、错误页面等。
示例:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.JPG</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.properties</url-pattern> </servlet-mapping> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>requestFilter</filter-name> <filter-class>com.demo.base.RequestFilter</filter-class> <init-param> <param-name>enabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>excludingPattern</param-name> <param-value>/login; /codecheck; /logout; /files/; \.jpg$; \.gif$; \.properties$;\.png$; \.ico$; \.js$; \.gzjs$; \.css$; \.gzcss$; \.html$; \.cab$; \.swf$ </param-value> </init-param> </filter> <filter-mapping> <filter-name>requestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>com.demo.base.SessionListener</listener-class> </listener> <session-config> <session-timeout>1</session-timeout> </session-config> </web-app>
113. 转发(forward)和重定向(redirect)的区别?
答案:
forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的 URL,把 那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect 就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显redirect 无法访问到服务器保护起来资源,但是可以从一个网站 redirect 到其他网站。forward 更加高效,所以在满足需要时尽量使用forward(通过调用 RequestDispatcher 对象的forward() 方法 ,该对象可以通过ServletRequest 对象的 getRequestDispatcher()方法获得),并且这样也有助于隐藏实际的链接;在有些情况下,比 如需要访问一个其它服务器上的资源,则必须使用重定向(通过 HttpServletResponse 对象调 用其 sendRedirect()方法实现)。
114. AJAX 有哪些有点和缺点?
答案:
优点:
1、最大的一点是页面无刷新,用户的体验非常好。
2、使用异步方式与服务器通信,具有更加迅速的响应能力。
缺点:
不容易调试。
115. Ajax 的实现流程是怎样的?
答案:
(1)创建 XMLHttpRequest 对象,也就是创建一个异步调用对象.
(2)创建一个新的 HTTP 请求,并指定该 HTTP 请求的方法、URL 及验证信息.
(3)设置响应 HTTP 请求状态变化的函数.
(4)发送 HTTP 请求.
(5)获取异步调用返回的数据.
(6)使用 JavaScript 和 DOM 实现局部刷新.
举例 jQuery:
$.ajax({ type:"get", url:"", data:{}, dataType:"json", success:function(data){ } })
116. jsp 和 servlet 的区别、共同点、各自应用的范围?
答案:
JSP 是Servlet 技术的扩展,本质上就是Servlet 的简易方式。JSP 编译后是“类 servlet”。 Servlet 和 JSP 最主要的不同点在于:Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为.jsp 的文件。
JSP 侧重于视图,Servlet 主要用于控制逻辑。
117. tomcat 容器是如何创建 servlet 类实例?
答案:
当容器启动时,会读取在 webapps 目录下所有的 web 应用中的 web.xml 文件,然后对 xml 文件进行解析,并读取 servlet 注册信息。然后,将每个应用中注册的 servlet 类都进行 加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)
在 servlet 注册时加上<load-on-startup>1</load-on-startup>如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。
118. JSP 有哪些内置对象?作用分别是什么?
答案:
JSP 有 9 个内置对象:
- request:封装客户端的请求,其中包含来自 GET 或 POST 请求的参数;
- response:封装服务器对客户端的响应;
- pageContext:通过该对象可以获取其他对象;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输出服务器响应的输出流对象;
- config:Web 应用的配置对象;
- page:JSP 页面本身(相当于 Java 程序中的 this);
- exception:封装页面抛出异常的对象。
119. request.getAttribute()和 request.getParameter()有何区别?
答案:
request.getParameter()取得是通过容器的实现来取得post,get 等方式传入的数据。 getAttribute 表示从 request 范围取得设置的属性,必须要先 setAttribute 设置属性,才能通 过 getAttribute 来取得,设置与取得的为 Object 对象类型
120. get 和 post 请求的区别?
答案:
1. get 将表单中数据按照 name=value 的形式,添加到action 所指向的 URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接;post 是将表单中的数据放在 HTTP 协议的请求头或消息体中,传递到 action 所指向 URL;
2. get 传输的数据要受到 URL 长度限制(1024 字节);而 post 可以传输大量的数据,上传文件通常要使用 post 方式;3. 使用 get 时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用 get;对 于敏感数据还是应用使用 post;
这篇关于Java 面试机经(初级篇-12期)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南