`
sakakokiya
  • 浏览: 515980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java Web开发面试题一套(4)

阅读更多
二.简述题(总分 40):
1.简述Servlet的生命周期(5分)
Web容器加载servlet,生命收起开始,通过调用servlet
的的init()方法进行servlet的初始化,通过调用service()方法实现,根据请求的不同调用不同的do***()方法,结束服务,web容器调用servlet的destroy()方法
一个servlet的生命周期由部署servlet的容器控制,当一个请求映射到一个servlet是,
容器执行下步骤:
1.加载servlet类
2.创建一个servlet类的实例
3.调用init初始化servlet实例,
2.调用service方法,传递一个请求和响应对象
容器要移除一个servlet,调用servlet的destroy方法结束该servlet
2.简述<jsp:forward>动作和response.sendRedirect()的异同(5分)
重定向分为两类。一类是客户端重定向,一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头,或者写javaScirpt脚本实现。
服务器端的重定向方式
服务器的重定向有两种方式,一种是HttpServletResponse的sendRedirect()方法,一个是使用RequestDispatcher的forward()方法。
HttpServletResponse.sendRedirect()方法
HttpServletResponse接口定义了可用于转向的sendRedirect方法,这个方法将响应定向到指定的,新的URL,location可以是一个绝对的URL,如response.sendRedirect(“http://java.sun.com”)也可以使用相对的URL location可以是一个绝对的URL,如response.sendRedirect(”http://java.sun.com”)也可以使用相对的URL。如果location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现。
RequestDispatcher.forward()方法
RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法,参见如下代码:
public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
void include(ServletRequest request, ServletResponse response);
}
forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。
注意,只有在尚未向客户端输出响应时才可以调用forward()方法,如果页面缓存不为空,在重定向前将自动清除缓存。否则将抛出一个IllegalStateException异常。
如何得到RequestDispatcher
有三种方法可以得到Request Dispatcher对象。
1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法,其中path可以是相对路径,但不能越出当前Servlet上下文。如果path以“/”开头,则解析为相对于当前上下文的根。
2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法,其中path必须以“/”开头,路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文,并可以转向到外部上下文的一个服务器资源链接。
3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源,包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。
这三种方法的使用有细微的差别。比如,下面是一个应用的配置文件web.xml:
<?xml version=”1.0″ ?>
<!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN”
“http://java.sun.com/j2ee/dtds/web-app_2_2.dtd”>
<web-app>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org. javaresearch.redirecttest.ServletOne</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.javaresearch. redirecttest.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/firstservlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet/secondservlet/</url-pattern>
</servlet-mapping>
</web-app>
其中定义了两个Servlet,名字分别为FirstServlet和SecondServlet,对应的类分别为org.javaresearch. redirecttest.ServletOne和org. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问:
http://localhost:8080/servlet/firstservlet/
使用1中方法,例如在firstservlet可以写入下面的代码:
RequestDispatcher rd = request.getRequestDispatcher(”secondservlet”);
rd.forward(request, response);
此时控制权将转向到第二个Servlet了。
使用2中的方法,可以从Servlet Context中得到RequestDispatcher代码如下:
RequestDispatcher rd = getServletContext().getRequest
Dispatcher(”/servlet/secondservlet”);
rd.forward(request, response);
使用3中的方法,从上面的web. xml配置文件可以看到定义了两个Servlet,名字分别为FirstServlet和SecondServlet,所以可以得到命名的Dispatcher:
RequestDispatcher rd = getServletContext().getNamedDispatcher(”SecondServlet”);
rd.forward(request, response);
这样也可以重定向到SecondServlet了。
JSP页面中的重定向
JSP在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代码,并且,JSP还提供了更便利的操作,如下:
<jsp:forward page= “nextpage.jsp”/>
JSP页面执行到这儿,将终止当前的处理,将控制权交由nextpage.jsp。
如何选择
RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。
分享到:
评论

相关推荐

    java开发校招面试题库(附答案与解析)java篇.pdf

    Java开发校招面试题库是互联网学习求职神器牛客网针对广大求职者整理的一套面试资源,它包含的不仅是题目和答案,还有详细的解析,帮助求职者全面理解和掌握知识点,为应聘Java开发岗位的校招面试做好充分准备。...

    互联网校招题库资料笔试面试真题具体面试问题回答技巧腾讯阿里培训资料.zip

    出现几率最高和覆盖范围最广的一套经典Java面试题.docx 最新Java编程面试题全集(共50道题+答案).docx 遇到的一些Java面试题回顾.docx 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++...

    Java面试要点及答案(Java-web)

    这是一套Java-web面试题及答案的书籍,它包含了Java-web面试的要点和答案,可以帮助你更好地准备Java面试。你可以在知乎专栏上找到最全的Java面试题及答案整理,这里有很多经典的Java程序员面试题以及答案,包含Java...

    一套英文Java笔试题面试题.doc

    1. JVM(Java Virtual Machine)是Java运行时环境的核心组件,它负责解析并执行字节码,提供了...以上内容涵盖了Java基础、JVM、Web应用开发、EJB、UML关系、设计模式、框架以及SQL等多个Java笔试和面试的常见知识点。

    【电子版】Java校招面试题库(附答案与解析)java篇.zip

    本资料“【电子版】Java校招面试题库(附答案与解析)java篇.zip”提供了一套完整的Java面试题集,帮助应聘者更好地准备面试。 1. **Java基础知识** - 类与对象:理解面向对象编程的基本概念,如封装、继承、多态...

    疯狂Java EE面试题

    《疯狂Java EE面试题》是针对Java企业级应用开发领域的一本面试指南,它涵盖了大量经典面试题,旨在帮助求职者全面了解并掌握Java EE的相关技术。Java EE,即Java Platform, Enterprise Edition,是Java平台在企业级...

    2010华为java面试题华为java面试题华为java面试题华为java面试题华为java面试题

    4. **数据库连接API**:Java提供了一套用于数据库连接的标准API——`java.sql`包,包括`Connection`、`Statement`、`ResultSet`等类,用于实现Java应用程序与数据库的交互。 5. **运算符与表达式**:Java支持多种...

    java程序员面试题集

    4. **Web面试题二答案.pdf**:与第一部分相似,这部分可能更专注于Web开发的进阶话题,如JavaScript、AJAX、JSON、CSS、HTML5以及与服务器端交互的技术,如RESTful API设计。 5. **面试题集.pdf**:这个综合性的...

    120个Java经典面试题和答案

    ### Java经典面试题知识点概述 #### 一、面向对象编程基础 **面向对象分析(OOA)** 面向对象分析(OOA)是系统开发过程中的一个重要阶段,它在系统业务调查之后进行,目的是按照面向对象的思想来分析问题。与传统的...

    java面试题,jsp面试题集,软件工程师面试题集

    ### Java面试题概览 #### 1. Java类基础 - **`java.lang.Thread`:** 此类为线程提供了基本的功能支持。在Java中创建线程时可以直接继承此类或者实现`Runnable`接口。 - **`java.lang.Number`:** `Number`类是一个...

    JAVA程序员面试题5

    ### JAVA程序员面试题5知识点详解 #### 一、JSP和Servlet的相同点与不同点及其联系 **相同点:** - **都是基于Java的技术**:JSP和Servlet都使用Java语言编写,运行在Java虚拟机(JVM)上。 - **处理HTTP请求**:...

    java与jsp面试试题

    这份"java与jsp面试试题"集合提供了一套全面的面试问题,帮助求职者和开发者准备相关职位的面试。以下是对这些知识点的详细说明: 1. **Java基础** - 类与对象:理解面向对象编程的基本概念,包括类的定义、对象的...

    JAVA面试题整理.pdf

    ### JAVA面试题整理知识点 #### 一、Java基础知识 1. **Java基本数据类型** - Java的基本数据类型包括:byte、short、int、long、float、double、char、boolean。 - `String` 不是基本数据类型,它是引用类型。...

    Java面试题(SSH框架)

    ### Java面试题(SSH框架) #### 一、Hibernate工作原理及为什么使用? **原理:** 1. **读取并解析配置文件:** Hibernate首先会读取`hibernate.cfg.xml`配置文件,此文件中包含了数据库连接信息以及其它运行时...

    Java 基础知识面试题

    ### Java基础知识面试题知识点解析 #### 一、Java概述与编程定义 - **何为编程**:编程是指通过使用特定的编程语言来指导计算机完成指定任务的过程。这涉及到将解决问题的逻辑步骤转换成计算机可执行的指令集。 - ...

    Java软件开发工程师面试题宝典

    Java软件开发工程师面试题宝典是一本针对Java程序员面试准备的重要参考资料,涵盖了广泛的知识点,适合于Java爱好者和有志于从事Java开发的人员。以下将详细解释其中的关键概念和知识点: 1. **J2EE规范**:Java...

    JAVA J2EE基础 面试题汇总

    JAVA J2EE基础面试题汇总提供了对JAVA编程语言及其企业级应用框架的深入理解,以下是对给定文件中提到的知识点的详细解析: ### Java的历史背景 Java最初由Sun Microsystems在1995年推出,源于一个名为Green的项目...

    2024年java面试题-SpringCloud面试题

    ### 2024年Java面试题之Spring Cloud面试题详解 #### 一、什么是微服务架构? 微服务架构是一种设计方法论,旨在将大型单体应用分解为一系列小型、可独立部署的服务单元(即微服务)。每个微服务专注于执行单一...

    最全Java面试题汇总(一)

    ### 最全Java面试题汇总(一):详细解析与知识点扩展 #### 1. Java面试题概述 本文将对一份“最全Java面试题汇总”中的部分题目进行详细解析,并结合实际应用场景,深入探讨相关知识点。 #### 2. 题目101:变量...

Global site tag (gtag.js) - Google Analytics