编程语言
首页 > 编程语言> > Java 面试机经(初级篇-12期)

Java 面试机经(初级篇-12期)

作者:互联网

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

二、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;

 

 

标签:web,12,Java,请求,对象,Servlet,机经,JSP,servlet
来源: https://blog.51cto.com/u_14602625/2964469