javaweb (二)——jsp(下)

简介: javaweb (二)——jsp

2.3.6显示国际化信息


在 JSP 中,可以使用 ResourceBundle 类来显示国际化信息。ResourceBundle 是用于加载不同语言和区域的文本资源文件的类,它可以帮助我们实现国际化。


以下是一个示例代码:


1.创建资源文件

在项目中创建多个资源文件,例如:


MessageBundle.properties

greeting=Hello


MessageBundle_zh_CN.properties

greeting=你好


2.在 JSP 页面中使用 ResourceBundle 显示国际化信息

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    // 获取 request 对象
    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
    // 获取客户端的语言偏好设置
    String lang = request.getHeader("Accept-Language");
    // 根据客户端的语言偏好设置加载对应的资源文件
    ResourceBundle bundle = ResourceBundle.getBundle("MessageBundle", new Locale(lang));
    // 获取资源文件中的 greeting 属性值
    String greeting = bundle.getString("greeting");
    out.println(greeting);
%>


上述代码根据客户端的语言偏好设置加载对应的资源文件,并获取其中的 greeting 属性值进行输出。


在浏览器中访问该页面时,会根据浏览器的语言设置自动加载对应的资源文件,从而实现国际化。


请注意,在创建资源文件时需要按照规范进行命名,并使用 UTF-8 编码保存;在使用 ResourceBundle 类时需要注意参数的传递方式。


2.4 response对象


2.4.1重定向网页


在 JSP 中,可以通过 response 对象的 sendRedirect() 方法来重定向到另一个网页。该方法需要传入一个字符串参数,即重定向到的目标网页的 URL。


以下是一个示例:

<%
    String redirectUrl = "http://example.com/newpage.jsp";
    response.sendRedirect(redirectUrl);
%>


此代码将重定向到 http://example.com/newpage.jsp 网页。


2.4.2处理http文件头


在 JSP 中,可以使用 response 对象来处理 HTTP 文件头。HTTP 文件头包含一些元数据,如 MIME 类型、缓存控制等信息。


下面是一些处理 HTTP 文件头的示例:


1.设置 MIME 类型

<%
    String mimeType = "text/html";
    response.setContentType(mimeType);
%>


2禁用浏览器缓存

<%
    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 0);
%>


3设置文件下载时的文件名

<%
    String fileName = "example.pdf";
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
%>


这些示例演示了如何使用 response 对象处理 HTTP 文件头。请注意,在 JSP 中最好将这些代码放在最前面,以确保在向客户端发送任何输出之前处理文件头。


2.4.3设置输出缓冲


在 JSP 中,可以使用 response 对象设置输出缓冲。输出缓冲是一种将输出内容保存在内存中的机制,直到缓冲区满或响应完成时才将其发送到客户端。


以下是一个设置输出缓冲的示例:

<%
    response.setBufferSize(8192);
    out.println("Hello, world!");
%>


该例子中,setBufferSize() 方法设置了输出缓冲的大小为 8KB。此后,所有的输出语句都会被缓存,直到达到缓冲区大小或者 JSP 页面执行完毕,才会将缓冲区中的内容一次性地发送给客户端。


设置输出缓冲可以提高性能,因为减少了与客户端之间的通信次数。但是,如果缓冲区过大,会浪费内存;如果过小,可能会导致频繁的刷新,影响性能。


请根据具体情况权衡利弊,选择合适的输出缓冲大小。


2.5 session对象


2.5.1 创建及获取客户的会话


在 JSP 中,可以通过内置对象 session 来创建和获取客户的会话。


要创建一个新的会话,可以使用以下代码:

<%
  // 创建一个新的 Session 对象
  HttpSession session = request.getSession();
%>


如果客户端已经有一个会话存在,则可以通过以下方式获取该会话:

<%
  // 获取现有的 Session 对象
  HttpSession session = request.getSession(false);
  if (session != null) {
    // 会话存在,继续处理请求
  } else {
    // 会话不存在,需要提示用户登录或注册
  }
%>


在上面的代码中,getSession(false) 方法将返回当前请求的会话,如果没有会话存在则返回 null。可以通过检查返回的值来确定是否需要提示用户登录或注册。


一旦获取到了会话对象,就可以使用它来存储和检索用户特定的数据,例如:

<%
  // 存储和检索数据
  String username = (String)session.getAttribute("username");
  session.setAttribute("username", "JohnDoe");
%>


在上面的代码中,getAttribute 和 setAttribute 方法用于存储和检索与会话相关联的数据。这些数据将在整个会话期间保持不变,直到会话结束为止。


2.5.2从会话中移除绑定的对象


在JSP中,可以使用session.removeAttribute(String name)方法从会话中移除绑定的对象,其中参数name表示要移除的对象的名称。如果该名称对应的对象不存在,该方法不会抛出异常,因为它是一个无操作方法。


例如,以下代码将从会话中删除名为"username"的属性:

<%
session.removeAttribute("username");
%>

需要注意的是,使用removeAttribute()方法只会从会话中移除指定名称的绑定对象,而并不会销毁整个会话。如果需要销毁整个会话,可以使用session.invalidate()方法。


2.5.3销毁session


在JSP中,可以使用session.invalidate()方法来销毁当前会话和其中所有的绑定对象。当您调用这个方法时,服务器会立即使当前用户的会话无效,并且不能再使用该会话。此外,服务器也会删除与该会话相关联的任何临时文件或其他资源。


下面是一个简单的示例,演示如何使用session.invalidate()方法来销毁当前会话:

<%
// 获取当前用户的会话
HttpSession session = request.getSession(false);
if (session != null) {
    // 将会话标记为无效
    session.invalidate();
}
%>


需要注意的是,调用session.invalidate()方法将导致整个会话被销毁,因此在执行此操作之前,应该确保不再需要任何绑定到该会话的对象。否则,可能会丢失重要数据。


另外,还要注意的是,如果在会话无效之后尝试访问会话相关的任何属性或方法,都将抛出IllegalStateException异常。通常情况下,建议在调用session.invalidate()方法之后立即重定向到另一个页面,以避免此类问题的发生。


2.5.4会话超时的管理


在JSP中,可以通过配置web.xml文件来管理会话超时。会话超时指的是当用户在一段时间内没有活动时,服务器将自动终止会话并从内存中删除相关的Session对象。


默认情况下,会话超时时间为30分钟,但您可以根据需要修改该值。在web.xml文件中,有一个名为session-config的元素,它用于定义与会话相关的配置信息。其中,session-timeout子元素用于设置会话超时时间(以分钟为单位)。


例如,以下是一个web.xml文件示例,其中会话超时时间被设置为60分钟:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
    <!-- 其他配置信息 -->
</web-app>

在上面的示例中,session-timeout子元素的值为60,表示会话超时时间为60分钟。

还要注意的是,如果您在JSP页面中使用了<%@ page session="false" %>指令,则意味着当前页面不需要会话支持,因此对于该页面,会话超时配置将不起作用。


2.5.5 session对象的应用


在JSP中,session对象是一个非常有用的工具,它允许您在多个请求之间共享数据。使用session对象,您可以将数据存储在会话期间,在后续请求中检索并使用这些数据。


以下是一些session对象的应用:


  1. 用户认证和授权:使用session对象来存储用户的身份验证信息和授权信息。通过在登录时创建一个session对象,并在每个请求中使用该对象进行身份验证,可以确保只有经过身份验证的用户才能访问受保护的页面。
  2. 购物车功能:使用session对象来存储用户购物车中的商品信息。当用户添加新的商品时,将其添加到session对象中。在购物车结算页面中,可以从session对象中检索商品信息以获取总价和其他详细信息。
  3. 多步表单处理:使用session对象来存储多步表单处理的数据。例如,当用户填写长表单时,其可能需要在多个步骤中分别提交表单数据。使用session对象,可以轻松地在每个步骤之间传递表单数据,而不必担心数据丢失或混乱。
  4. 分布式应用程序:如果您正在构建分布式应用程序,则可以使用session对象来存储与当前用户相关的数据。通过将session对象存储在远程服务器上,可以确保即使在多个服务器上运行的应用程序也可以共享数据。


总之,session对象是一种强大的工具,可用于从一个请求到另一个请求传递数据,并且能够极大地简化应用程序的设计和实现。


2.6 application对象


2.6.1访问应用程序初始化参数在JSP中


可以使用application对象访问应用程序初始化参数。应用程序初始化参数是在web.xml文件中定义的键值对,它们可以被整个应用程序访问和共享。

以下代码片段演示如何使用application对象来访问应用程序初始化参数:

<%// 获取应用程序初始化参数String dbUrl = application.getInitParameter("dbUrl");String dbUsername = application.getInitParameter("dbUsername");String dbPassword = application.getInitParameter("dbPassword");// 使用初始化参数连接数据库Connection conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);%>

在上面的代码中,首先通过调用application.getInitParameter()方法获取了定义在web.xml文件中的三个应用程序初始化参数:dbUrl、dbUsername和dbPassword。然后使用这些参数建立一个数据库连接。需要注意的是,application.getInitParameter()方法只能用于访问应用程序初始化参数。如果想要存储或访问其他类型的数据,需要使用ServletContext对象的其他方法,比如setAttribute()和getAttribute()等。


2.6.2管理应用程序环境属性


在JSP中,可以使用application对象来管理应用程序环境属性。应用程序环境属性是应用程序范围内的变量,可以被整个应用程序访问和共享。

以下代码片段演示如何使用application对象来管理应用程序环境属性:<%// 设置应用程序环境属性application.setAttribute("username", "admin");application.setAttribute("email", "admin@example.com");// 获取应用程序环境属性String username = (String) application.getAttribute("username");String email = (String) application.getAttribute("email");%>在上面的代码中,首先通过调用application.setAttribute()方法设置了两个应用程序环境属性:username和email。然后通过调用application.getAttribute()方法获取了这些属性的值,并将它们存储在本地变量username和email中。需要注意的是,application.setAttribute()方法只能用于设置应用程序环境属性。如果想要访问其他类型的数据,需要使用ServletContext对象的其他方法,比如getInitParameter()和getSession()等。另外,为了防止并发问题,需要遵循线程安全的编程实践来处理应用程序环境属性。


2.7 out对象


2.7.1向客户端输出数据


在JSP中,可以使用out对象向客户端输出数据。out对象是一个隐含的JSP对象,它表示JSP页面生成的响应流。

以下代码片段演示如何使用out对象向客户端输出数据:

<%// 向客户端输出文本out.print("Hello, World!");// 向客户端输出HTMLout.println("<h1>Welcome to my website!</h1>");// 向客户端输出变量的值String name = "Alice";out.printf("Hello, %s!", name);%>

在上面的代码中,通过调用out.print()方法向客户端输出了一段文本,调用out.println()方法向客户端输出了一段HTML代码,调用out.printf()方法向客户端输出了一个格式化字符串。需要注意的是,out对象只能用于向客户端输出数据。如果想要存储数据或访问其他类型的数据,需要使用其他对象,比如application对象、session对象或request对象等。另外,为了防止安全漏洞,需要遵循安全的编程实践来处理向客户端输出的数据。


2.7.2管理响应缓存


在JSP中,可以使用out对象来管理响应缓存。响应缓存是将JSP页面生成的响应存储在服务器或客户端上,以便于之后的快速访问和重用。

以下代码片段演示如何使用out对象来设置响应缓存:<%// 设置响应头response.setHeader("Cache-Control", "max-age=3600");// 启用响应缓存response.setDateHeader("Expires", System.currentTimeMillis() + 3600000L);// 向客户端输出文本out.print("Hello, World!");%>在上面的代码中,通过调用response.setHeader()方法设置了一个名为“Cache-Control”的响应头,并将其值设置为“max-age=3600”,表示响应最长可以缓存1小时。然后通过调用response.setDateHeader()方法设置了一个名为“Expires”的响应头,并将其值设置为当前时间加上1小时,表示响应过期时间为1小时后。这两个操作共同启用了响应缓存。最后通过调用out.print()方法向客户端输出了一段文本。需要注意的是,缓存策略应该根据具体的业务逻辑进行设置,以确保安全性和可靠性。另外,如果响应缓存不当,可能会导致安全漏洞或数据更新不及时等问题。因此,在使用响应缓存时需要遵循安全的编程实践和最佳实践。


2.8 其他内置对象


2.8.1 获取页面上下文的pagecontext对象


在JSP中,可以通过以下方式获取页面上下文的PageContext对象:

java<% PageContext pageContext = (PageContext) request.getAttribute("javax.servlet.jsp.jspPageContext");%>或者使用JSP内置对象pageContext直接获取:java<% PageContext pageContext = pageContext;%>请注意,第二种方法可能会导致变量名冲突,并且不同的JSP容器实现的JSP内置对象可能会略有不同。因此,建议使用第一种方式获取PageContext对象。


2.8.2读取web.xml配置信息的config对象


在 JSP 中,可以通过 getServletContext() 方法获取 ServletContext 对象,然后从中读取 web.xml 配置信息。


要读取 web.xml 中的初始化参数,可以使用 ServletContext 的 getInitParameter(String name) 方法。例如:

String myParam = getServletContext().getInitParameter("myParamName");

要读取 servlet 或 filter 的配置信息,可以使用 ServletContext 的 getServletRegistration(String servletName) 或 getFilterRegistration(String filterName) 方法获取对应的 ServletRegistration 或 FilterRegistration 对象,然后从中读取配置信息。例如:

ServletRegistration registration = getServletContext().getServletRegistration("myServlet");
String initParam = registration.getInitParameter("myInitParam");
FilterRegistration registration = getServletContext().getFilterRegistration("myFilter");
EnumSet<DispatcherType> dispatcherTypes = registration.getDispatcherTypes();


注意,在 JSP 中读取配置信息可能会让代码变得难以维护和测试。建议将配置信息封装到一个 Java 类中,然后在 JSP 中调用该类的方法来获取配置信息。


2.8.3 page对象


在 JSP 中,page 对象是一个隐含对象,可以直接在 JSP 页面中使用。它表示当前 JSP 页面的 Servlet 实例,即被翻译成 Servlet 后的类实例。

page 对象提供了许多有用的方法,比如:- String getPageName(): 获取当前 JSP 页面的文件名。- javax.servlet.jsp.JspWriter getOut(): 获取当前页面响应输出流。- javax.servlet.ServletConfig getServletConfig(): 获取当前 Servlet 的配置信息。- javax.servlet.jsp.PageContext getPageContext(): 获取当前页面上下文对象,可用于获取其他隐含对象。- void include(String relativeUrlPath): 请求包含指定 URL 的资源,就像在页面中包含一段 JSP 或 HTML 代码。- void forward(String relativeUrlPath): 请求转发到指定 URL 的资源,将控制权交给另一个 Servlet 或 JSP 页面。除了这些方法之外,page 对象还有许多其他的方法和属性,用于访问 JSP 页面的各种信息。但是,建议尽量避免在 JSP 中使用 page 对象,以保持代码的简洁和易读性,同时也能更好地分离业务逻辑和视图层。


2.8.4获取异常信息的exception对象


在 JSP 中,可以通过以下方式获取异常信息的 exception 对象:

<%!
Exception exception;
%>
<%
try {
    // some code that may throw an exception
} catch (Exception e) {
    exception = e;
}
%>
<%
if (exception != null) {
    // handle the exception here
}
%>


在上面的代码中,我们声明了一个名为 exception 的变量,然后在 try-catch 块中捕获可能抛出的异常,并将其赋值给该变量。最后,在 JSP 页面的其他部分中,我们可以检查该变量是否为空来确定是否有异常发生并对其进行相应处理。


需要注意的是,在实际开发中,JSP 不推荐使用 Java 代码来完成业务逻辑,而应将其放在 servlet 或其他 Java 类中。在这种情况下,可以使用request.setAttribute() 方法将异常对象存储在请求属性中,然后在 JSP 中使用 EL 表达式 ${requestScope.exception} 获取该属性。

相关文章
|
2月前
|
存储 前端开发 Java
JavaWeb基础6——Request,Response,JSP&MVC
Request继承体系、获取请求头行体的方法、IDEA使用模板创建Servlet、请求参数中文乱码解决、请求转发、Respones重定向、Response响应字节字符数据、JSP、EL 表达式、JSTL标签、MVC模式和三层架构
JavaWeb基础6——Request,Response,JSP&MVC
|
5月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
34 0
|
5月前
|
SQL 数据可视化 数据库
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
23 0
|
6月前
|
前端开发 JavaScript Java
Jsp在Javaweb中扮演什么角色?
Jsp在Javaweb中扮演什么角色?
54 1
|
6月前
|
SQL 缓存 Oracle
JavaWeb之JSP(下)
这篇文档是关于Java Web中JSP(Java Server Pages)技术的主要内容包括:JSP的常用命令使用,EL表达式的概念,和使用,JSTL表达式的概念和使用方式的总结.
|
6月前
|
开发框架 前端开发 Java
JavaWeb之JSP(上)
这篇文档是关于Java Web中JSP(Java Server Pages)技术的介绍。作者首先说明了内容来源于个人在CSDN的原创文章,并遵循CC 4.0 BY-SA版权协议。文档主要内容包括:JSP的基本概念,它是一种动态网页技术,用于将页面逻辑与设计分离,便于开发快速、跨平台的Web应用。接着,讨论了JSP出现的原因,即为了改进servlet展示信息的不便。文档还详细介绍了如何在JSP中嵌入Java代码,包括声明、表达式和程序代码标签的使用,以及page指令的示例。
|
6月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
172 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
6月前
|
XML 安全 Java
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
|
6月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
94 0
|
6月前
|
测试技术 数据库 数据安全/隐私保护
JavaWeb+JSP+SQL server学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)
JavaWeb+JSP+SQL server学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)
210 0