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

149 阅读11分钟

11、提交表单请求时,post和get有哪些区别?

当通过Web表单提交数据时,GETPOST这两种HTTP方法之间有几个重要区别:

  1. 数据可见性和安全性

    • GET请求将数据附加到URL中,作为参数对所有人都是可见的。这使得GET不适合传输敏感或私密数据,因为它会暴露在URL上,容易受到拦截。
    • POST请求中的数据则包含在请求体内,不会显示在URL上,从而提供了更高的隐私保护。但这并不意味着POST是绝对安全的,而是相对于GET来说更难以被第三方直接获取。
  2. 数据大小限制

    • GET请求通常受URL长度的限制,不同的浏览器和Web服务器都有各自的限制,限制可能从几千字符到几万字符不等。
    • POST请求的数据尺寸通常被Web服务器限制,但这种限制远大于GET,因此POST更适合大量数据传输。
  3. 缓存和历史记录

    • GET请求可以被缓存,并保存在浏览器历史中,用户也可以将包含查询参数的完整URL保存为书签。
    • POST请求不会被浏览器缓存,也不会出现在浏览器的历史记录中,不能保存为书签。
  4. 用途

    • GET通常用于请求数据,并且不会导致服务器上数据的改变。它用于搜索、查询、读取操作,因此设计为幂等的,多次执行相同的GET请求应该获得相同的结果。
    • POST通常用于数据提交、文件上传等操作,会导致服务器状态变化或引发服务器上进一步的处理。
  5. 编码类型

    • GET请求只能进行URL编码。
    • POST请求支持多种编码类型,可以处理非字符型的数据,如二进制数据。
  6. 幂等性

    • GET是幂等的,意味着多次发起同样的请求,其效果是一样的。
    • POST不是幂等的,因为每次请求都可能在服务器上引起不同的行为,如创建或修改数据。

选择哪种方法取决于实际的应用需求,例如如果需要用户提交敏感数据(如密码或其他个人信息),则应使用POST方法。如果只是在不更改任何服务器状态的情况下检索数据,GET可能是更好的选择。在设计RESTful API时,这两种方法具有特定的语义,需要考虑到API的合理使用。

12、B/S和C/S的区别。

在计算机网络体系中,有两种常见的架构模式,分别是客户端/服务器(Client/Server,简称C/S)架构和浏览器/服务器(Browser/Server,简称B/S)架构。它们各自的特点和区别如下:

C/S架构(客户端/服务器架构):

  1. 客户端应用程序:在C/S架构中,客户端是安装在用户设备上的专门软件,需要独立开发和安装。这种客户端通常提供丰富的用户界面和功能。
  2. 数据处理:客户端软件能够处理部分业务逻辑和数据存储工作,降低服务器压力。
  3. 网络依赖:比B/S架构下降,因为部分数据和业务逻辑可以在本地处理,减少了对服务器的请求次数。
  4. 维护更新:更新需要在每个客户端单独执行,维护成本高于B/S架构。
  5. 安全性:一般比B/S架构更安全,因为客户端可以实现更复杂的安全策略和数据加密。
  6. 多样性:可以针对不同操作系统开发对应的客户端软件。

B/S架构(浏览器/服务器架构):

  1. 无需专门的客户端软件:用户通过Web浏览器作为客户端访问服务器上的应用程序,忽略了操作系统和设备类型的差异。
  2. 纯服务器端数据处理:所有的业务逻辑和数据处理都在服务器端完成,客户端主要负责显示和输入。
  3. 高度依赖网络:所有的操作都需要通过网络传输,因此对网络的依赖度高。
  4. 更新容易:只需要在服务器端进行更新,所有用户都能使用最新的版本,容易维护。
  5. 安全性:较C/S架构为弱,因为所有的交互都通过HTTP/HTTPS协议,在网络传输过程中可能会被截获和篡改。
  6. 通用性:基于Web的界面可以运行在任何支持Web标准的浏览器上,具有良好的跨平台性。

区别总结:

  • 应用部署:C/S需要在客户端安装专门的应用程序,B/S只需要浏览器。
  • 软件更新:C/S更新较为麻烦,需要用户手动更新;B/S更新容易,服务器端一旦更新,用户即可访问到新版本。
  • 用户访问方式:C/S通常通过专有协议访问服务器,B/S通过HTTP/HTTPS访问。
  • 跨平台性:B/S强于C/S,用户只需使用浏览器即可使用服务,而C/S可能需要为不同平台开发不同的客户端。
  • 用户体验:C/S通常提供更丰富和响应更快的用户界面,B/S在用户体验方面可能受限于Web技术的限制。

随着Web技术的发展,B/S架构越来越被广泛采用,尤其是随着AJAX、HTML5、CSS3、WebSocket等技术的兴起,B/S架构能提供和C/S架构相媲美的用户体验,同时在维护和跨平台上有着无可比拟的优势。

13、使用forward和sendRedirect进行重定向有什么区别?

forward(转发)和sendRedirect(重定向)是在Java Servlet中用来控制页面跳转的两种不同机制,各有特点和适用场景。

使用forward(转发)时:

  • 处理者:由服务器内部完成,对客户端来说是透明的。
  • URL地址:客户端浏览器的地址栏不会变化,仍显示原始请求的URL。
  • 性能:转发发生在服务器内部,不需要额外的网络往返,所以性能比重定向要稍好一些。
  • 请求和响应对象:对同一个请求内部转发,在转发过程中,请求(request)和响应(response)对象不变,转发的目标页面可以使用原始的请求中的数据。
  • 使用:通常用于web应用内部页面的跳转,因为它不能重定向到其他网站的URL。

在Java Servlet代码中,转发通常如下所实现:

java
复制代码
request.getRequestDispatcher("page.jsp").forward(request, response);

使用sendRedirect(重定向)时:

  • 处理者:响应会先发送到客户端(浏览器),然后由客户端再向新的URL发送请求。
  • URL地址:客户端浏览器的地址栏会更新到新的URL。
  • 性能:需要进行额外的网络请求,因为客户端必须重新向新的地址发起请求,这会降低性能。
  • 请求和响应对象:重定向会创建一个全新的请求,前一个请求的所有对象都不再可用。
  • 使用:适用于重定向到当前网站上的另一个页面或者是完全不同的网站。

在Java Servlet代码中,重定向通常如此实现:

java
复制代码
response.sendRedirect("page.jsp");

区别总结:

  • 实现方式forward是服务器端的转发(不可见),sendRedirect是客户端的重定向(可见)。
  • URL变化forward不改变浏览器URL,sendRedirect导致浏览器URL变化。
  • forward保持请求范围内的数据,sendRedirect不保持这些数据。
  • 网络请求次数forward只有一次请求,sendRedirect至少需要两次请求。

选择哪一个通常取决于是否需要保留请求数据以及是否需要从客户端浏览器到新的URL。如果需要将控制权交给另一个web资源,并且期望保留请求信息,那么应该使用forward。如果需要重定向到不同的域,或者需要一个全新的请求,那么应该使用sendRedirect

14、jsp的工作原理是什么?

JSP(Java Server Pages)是一种Java servlet技术,用于创建动态web内容。JSP可以包含HTML代码、JavaScript、JSP标签和Java代码片段,这些都被嵌入到文本文档(通常是带有.jsp扩展名的文件)中。下面是JSP的工作原理:

  1. 编写JSP文件:开发者编写包含HTML标记和Java代码的JSP文件。
  2. 部署在服务器:JSP文件部署在支持Java的Web服务器或应用服务器上,例如Apache Tomcat。
  3. 客户端请求:用户通过浏览器发起请求,该请求的URL指向JSP文件。
  4. Web服务器接收请求:Web服务器接收到对JSP文件的请求后,将其传递给JSP引擎。在首次请求时,如果尚未编译该JSP文件,JSP引擎将执行下一个步骤;否则直接执行步骤7。
  5. JSP转换为Servlet:JSP引擎将JSP文件转换为等效的Java Servlet源代码。这是通过解析JSP文件中的HTML代码、JSP标签和Java代码片段来实现的。
  6. 编译Servlet:生成的Java Servlet源码被编译成可执行的.class文件,即编译后的Servlet。
  7. 执行Servlet:编译后的Servlet由JSP引擎加载,并执行Servlet的service方法来处理请求。在这个过程中,Servlet可以执行嵌入其中的Java代码,进行数据库访问、调用业务逻辑以及创建响应内容等操作。
  8. 生成响应:Servlet执行完成后,它会生成一个HTTP响应,这通常包括动态生成的HTML内容。
  9. 发送响应到客户端:生成的响应通过Web服务器发送回客户端的浏览器。
  10. 客户端呈现:浏览器接收到HTTP响应,并像处理普通HTML页面一样解析和显示它。

在整个JSP生命周期中,需要注意的是,JSP文件在首次请求时被转换为Servlet并编译。之后的请求通常直接使用已编译的Servlet,从而提高了效率。如果JSP文件被修改,服务器会重新编译JSP以生成更新后的Servlet。

简而言之,JSP的工作原理涉及将JSP页面转换为Servlet,然后由Java容器编译和执行这个Servlet,输出结果发送到客户端。这个过程将动态内容和静态模板(如HTML)结合到一起,为用户提供丰富的、动态更新的web页面。

15、JSP中动态INCLUDE与静态INCLUDE的区别?

JSP中可以使用两种方法来包含其他文件的内容:静态包含(Static Include)和动态包含(Dynamic Include),两者有明显的区别:

静态包含(Static Include)

使用JSP的指令进行静态包含:

jsp
复制代码
<%@ include file="header.jsp" %>
  • 处理时机:在JSP页面被转换成Servlet的时候处理,即编译时包含。
  • 效果include指令字面上将指定页面的内容复制到当前页面中。这就好像是在JSP文件还是文本形式的时候,就将包含的内容拷贝进来。
  • 性能:因为包含是在编译时处理的,所以不会在运行时增加额外开销。
  • 适用场景:适合用来包含静态内容,如页面布局、版权声明、导航栏等。

动态包含(Dynamic Include)

使用JSP的<jsp:include>动作进行动态包含:

jsp
复制代码
<jsp:include page="header.jsp" flush="true" />
  • 处理时机:在请求被处理时(运行时)处理。
  • 效果<jsp:include>动作执行时,会将指定页面作为独立的Servlet执行,然后将执行结果包含到当前页面中。因此,被包含的页面可以是动态内容。
  • 性能:每次请求都会执行包含的页面,所以与静态包含相比,动态包含具有更多的运行时开销。
  • 适用场景:适合动态内容的插入,例如根据不同用户的权限显示不同的菜单项、或者显示基于用户动态生成的数据报告。

区别总结:

  • 转换时间:静态包含在编译时完成,动态包含在运行时完成。
  • 更新反映:静态包含的内容改变后,包含此内容的JSP页面也需重新编译才能反映更新。而动态包含的内容改变后,无需重新编译调用它的JSP页面。
  • 性能开销:相比静态包含,动态包含在运行时会有额外的处理开销。
  • 灵活性:动态包含提供了比静态包含更高的灵活性,可以包含动态生成的内容。

开发者通常需要根据实际需求来选择合适的包含方式,以获得最佳性能和适当的灵活性。