Java Web 2023 题型和复习提纲(一)

255 阅读9分钟

1、JSP的内置对象有哪些?

JSP内置对象被称为隐式对象,因为这些对象由JSP容器提供,无需明确声明就可直接使用。以下是JSP提供的9个内置对象及其作用:

  1. request:代表客户端的请求,此对象是 javax.servlet.http.HttpServletRequest 类的实例。可用于获取客户端发出的请求信息,如参数、头信息等。
  2. response:代表对客户端的响应,此对象是 javax.servlet.http.HttpServletResponse 类的实例。可用于控制发送给客户端的响应,如设置内容类型、字符编码等。
  3. pageContext:封装了与JSP页面相关的所有对象,此对象是 javax.servlet.jsp.PageContext 类的实例。提供对JSP页面范围内所有对象和命名空间的访问,也提供了一些辅助功能。
  4. session:代表用户的会话,此对象是 javax.servlet.http.HttpSession 类的实例。常用于存取跨多个页面或多个请求的用户特定信息。
  5. application:代表整个Web应用程序的上下文环境,此对象是 javax.servlet.ServletContext 类的实例。可用于在应用程序范围内存取数据。
  6. out:提供了向客户端输出响应内容的一种方法,此对象是 javax.servlet.jsp.JspWriter 类的实例。常用于将内容输出到客户端的Web浏览器。
  7. config:此对象是 javax.servlet.ServletConfig 类的实例,提供了关于Servlet配置的信息,如初始化参数。
  8. page:此对象是对JSP页面自身的引用,它是 java.lang.Object 类的实例(实际上是当前Servlet类的实例)。
  9. exception:仅在出现错误时,错误页面可以访问此对象。此对象是 java.lang.Throwable 类的实例。若页面指令属性 isErrorPage 设为 true,则此对象可用。

每个内置对象都有它特定的范围和用途,在编写JSP时,可以灵活使用这些对象来完成对请求的处理和响应的生成。

2、jsp页面之间对象传递的方法。

在JSP页面之间传递对象或数据,可以通过以下几种不同的方法:

  1. 使用请求参数 (Request Parameters)

    • 通过URL或表单提交的请求参数可以在JSP页面之间传递数据。
    • 示例:<a href="nextPage.jsp?param=value">Link</a>
  2. 使用请求属性 (Request Attributes)

    • 在一个请求的范围内,可以设置属性来传递对象。
    • 示例:请求转发之前,request.setAttribute("attributeName", object); 然后在另一个JSP页面中,使用 request.getAttribute("attributeName"); 来获取对象。
  3. 使用会话对象 (Session Object)

    • 你可以将对象存储在用户的session中,以便跨多个页面和请求使用。
    • 示例:session.setAttribute("attributeName", object);
  4. 使用应用上下文 (Application Context)

    • 应用上下文中的属性可以被同一Web应用程序中的所有用户和请求访问。
    • 示例:application.setAttribute("attributeName", object);
  5. 使用Cookie

    • 可以创建Cookie来存储数据,并将其发送到客户端浏览器中。这适用于需要跨会话持久存储的小量数据。
    • 示例:创建一个新的Cookie对象并将其添加到response中,Cookie cookie = new Cookie("cookieName", "cookieValue"); response.addCookie(cookie);
  6. 使用 HttpServletResponse 对象

    • 可以在响应中包含某些数据,将其发送回客户端,并在另一个请求中再次取回数据。
    • 这可以结合使用隐藏表单字段、URL重写等技术。
  7. 使用重定向 (Redirection)

    • 当使用HTTP重定向时,可以在URL中加入查询字符串来传递简单的数据。
    • 注意,使用重定向时创建的是新的请求,所以不能用请求属性来传递对象,因为新的请求不会保持原来的请求属性。

具体使用哪种方法,取决于你的具体需求,比如传递的数据大小、是否跨会话传递数据,以及你关于性能和安全的考虑。通常,Servlet/JSP容器会处理这些对象的序列化和反序列化,从而方便开发者存取数据。

3、jsp有哪些动作?作用分别是什么?

JSP动作用于控制Servlet的行为、实现页面之间的通讯以及使用JavaBean等。以下是一些常见的JSP动作及其作用:

  1. <jsp:include>:包含其他资源,如JSP、HTML页面或Servlet等。在当前JSP执行时,即时包含其他资源的内容到该JSP页面。可以实现页面模块化。
  2. <jsp:forward>:将请求转发到另一个资源(如另一个JSP页面、Servlet或HTML文件)。该动作执行后,当前页面不再执行,控制权交给新资源。
  3. <jsp:useBean>:查找或实例化一个JavaBean组件(如果指定的bean不存在,则实例化)。通常与 <jsp:setProperty><jsp:getProperty> 配合使用来设置和获取bean属性的值。
  4. <jsp:setProperty>:设置存在于当前页面的JavaBean的属性值。如果属性与请求参数同名,还可以自动从请求参数中设置属性值。
  5. <jsp:getProperty>:从JavaBean中获取属性的值并自动插入到输出流中,用于展示在页面上。
  6. <jsp:param>:与 <jsp:include>, <jsp:forward> 以及 <jsp:plugin> 等动作联合使用,用于传递参数。
  7. <jsp:plugin>:为客户端浏览器生成适当的HTML代码,以便下载并运行指定的Applet或JavaBean组件。
  8. <jsp:element>:动态定义XML元素。此动作能够在运行时生成元素的名字和内容。
  9. <jsp:attribute>:用于为动态创建的XML元素定义属性。
  10. <jsp:body>:用于指定 <jsp:element>,或者其它体标签的体内容。

这些动作提供了一个标准的方式来控制Servlet的行为,而无需在JSP页面中编写Java代码。它们的主要目的是为了简化在JSP页面中执行常见任务的复杂性,使JSP代码更加简明和维护更易。通过这些动作,我们可以有效地利用JSP与JavaBeans的交互、进行页面间的转发和包含来创建动态响应的web页面。

4、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP (Java Server Pages) 和 Servlet 都是 Java EE 规范的一部分,它们用于在Web应用程序中生成动态内容。虽然它们目的相同,但是在使用和执行机制上有所不同。

相同点

  1. 平台无关性:JSP和Servlet都是用Java编写的,因此它们都能够在任何支持Java的Web服务器上运行。
  2. 生成动态内容:两者都可以生成动态的Web页面。
  3. 可以访问相同的对象:JSP和Servlet都可以访问相同的请求和响应对象,并且可以共享数据通过使用相同的上下文(如session和application scope)。
  4. Web服务器支持:都需要一个支持Java的Web服务器(如 Apache Tomcat)来运行。

不同点

  1. 设计目的

    • Servlet是用Java编写的服务器端程序,它主要用于处理业务逻辑。
    • JSP是以HTML为主的文本文档,它主要用于展现数据,即提供网页的视图部分。
  2. 编写方式

    • Servlet完全由Java代码组成。
    • JSP是HTML中嵌入Java代码,或使用特定的JSP标记和表达式。
  3. 转换和编译

    • Servlet代码直接被编译成.class文件。
    • JSP页面在第一次请求时,被编译成一个Servlet(.java文件),然后编译成.class文件。实际上,JSP就是Servlet的简化形式。
  4. 易用性与易读性

    • JSP更容易编写,特别是对于页面设计人员和前端开发者来说,因为它更像是编写HTML文档。
    • Servlet则适合那些熟悉Java语言的开发者,适合处理更复杂的业务逻辑。
  5. 修改后更新

    • 对JSP页面的修改可以立即反映出来,只需简单刷新页面,无需重新编译(只要服务器配置了自动编译)。
    • 修改Servlet通常需要重新编译Java代码并重启服务器。

他们之间的联系

  • 互操作性:在JSP页面中可以使用JavaBean处理业务逻辑,然后通过JSP输出结果;同时,也可以在Servlet中生成业务逻辑,并通过RequestDispatcher将结果转发到JSP页面进行展示。
  • 底层实现:实际上,每个JSP页面都会被转换成一个实现了javax.servlet.jsp.JspPage接口的Java Servlet。
  • 功能替代:某些情况下,可以互相替代。即你可以选择仅使用Servlet或JSP来生成整个Web应用程序的响应,虽然这样做并不是最佳实践。

在实际的Web应用开发中,最佳实践是将两者结合使用,利用JSP来负责页面展示,利用Servlet来处理更为复杂的业务逻辑,这样可以将视图层和业务逻辑层分离,使得Web应用程序更容易维护和管理。

5、serverlet的生命周期及各阶段的作用。

Servlet 的生命周期由 Web 容器(如 Tomcat)控制,它通过调用 Servlet 类的特定方法来进行。Servlet 的生命周期主要包括以下三个阶段及其作用:

  1. 初始化阶段(Initialization)

    • 作用:创建 Servlet 实例并为其初始化资源。
    • 方法init(ServletConfig config) 方法在 Servlet 被创建后调用,只执行一次。它接受一个 ServletConfig 对象,包含 Servlet 的初始化参数。在此方法中,可以执行如打开数据库连接等资源初始化的操作。
  2. 处理请求阶段(Service/Request Handling)

    • 作用:响应客户端请求。
    • 方法service(ServletRequest req, ServletResponse res) 方法是主要的执行点,用于处理来自客户端(通常是浏览器)的请求。每当客户端请求该 Servlet 时,该方法就会被调用一次。它会根据请求的类型(比如 GET 或 POST)进一步调用 doGetdoPostdoPutdoDelete 等方法。在这些方法中实现了具体的业务逻辑和数据处理。
  3. 销毁阶段(Destruction)

    • 作用:释放 Servlet 占用的资源并进行清理操作。
    • 方法destroy() 方法在 Servlet 生命周期即将结束之前调用,也只调用一次。在这个方法中,可以释放 Servlet 开辟的资源,如关闭数据库连接、清理缓存等。

在 Servlet 的整个生命周期中,init() 方法和 destroy() 方法只会被调用一次,分别标志着 Servlet 对象的创建和销毁。而 service() 方法则会被调用多次,每次处理客户端的请求。Servlet 由容器控制,当需要 Servlet 服务时容器会创建 Servlet 实例,并在不再需要时销毁它。如果 Servlet 已经存在于内存中,容器将重用现有的 Servlet 来处理进来的请求。

Servlet 的这种生命周期设计能够使得资源使用更加高效,因为你不必为每个请求都创建一个新的 Servlet 实例,同时也保证了在销毁前可以清理资源。