Servlet 教程 之 Servlet Cookie 处理 5

简介: Servlet教程展示了如何处理Cookie。创建Cookie涉及构造函数(键值对),设置最大生存周期(如24小时)并将其添加到HTTP响应头。给定示例显示了一个Servlet,它从表单接收名字和URL,编码为Cookie,设置过期时间,然后在响应中发送。HTML表单用于触发Servlet。需在web.xml配置Servlet并用HTML页面调用。

Servlet 教程 之 Servlet Cookie 处理 5

Servlet Cookie 处理

通过 Servlet 设置 Cookie

通过 Servlet 设置 Cookie 包括三个步骤:

(1) 创建一个 Cookie 对象:您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数,cookie 名称和 cookie 值都是字符串。

Cookie cookie = new Cookie("key","value");
请记住,无论是名字还是值,都不应该包含空格或以下任何字符:

[ ] ( ) = , " / ? @ : ;
(2) 设置最大生存周期:您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为 24 小时的 cookie。

cookie.setMaxAge(606024);
(3) 发送 Cookie 到 HTTP 响应头:您可以使用 response.addCookie 来添加 HTTP 响应头中的 Cookie,如下所示:

response.addCookie(cookie);

实例
让我们修改我们的 表单数据实例,为名字和姓氏设置 Cookie。

package com.baidu.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

  • Servlet implementation class HelloServlet
    */
    @WebServlet("/HelloForm")
    public class HelloForm extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**

    • @see HttpServlet#HttpServlet()
      */
      public HelloForm() {
      super();
      // TODO Auto-generated constructor stub
      }

      /**

    • @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      */
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
      {
      // 为名字和姓氏创建 Cookie
      Cookie name = new Cookie("name",

           URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 中文转码
      

      Cookie url = new Cookie("url",

                 request.getParameter("url"));
      

      // 为两个 Cookie 设置过期日期为 24 小时后
      name.setMaxAge(606024);
      url.setMaxAge(606024);

      // 在响应头中添加两个 Cookie
      response.addCookie( name );
      response.addCookie( url );

      // 设置响应内容类型
      response.setContentType("text/html;charset=UTF-8");

      PrintWriter out = response.getWriter();
      String title = "设置 Cookie 实例";
      String docType = "<!DOCTYPE html>\n";
      out.println(docType +

           "<html>\n" +
           "<head><title>" + title + "</title></head>\n" +
           "<body bgcolor=\"#f0f0f0\">\n" +
           "<h1 align=\"center\">" + title + "</h1>\n" +
           "<ul>\n" +
           "  <li><b>站点名:</b>:"
           + request.getParameter("name") + "\n</li>" +
           "  <li><b>站点 URL:</b>:"
           + request.getParameter("url") + "\n</li>" +
           "</ul>\n" +
           "</body></html>");
      

      }

      /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      doGet(request, response);
      }

}
编译上面的 Servlet HelloForm,并在 web.xml 文件中创建适当的条目:

<?xml version="1.0" encoding="UTF-8"?>




HelloForm

com.baidu.test.HelloForm


HelloForm

/TomcatTest/HelloForm

最后尝试下面的 HTML 页面来调用 Servlet。
<!DOCTYPE html>



站点名 :


站点 URL:





保存上面的 HTML 内容到文件 /TomcatTest/test.html 中。
目录
相关文章
|
1天前
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 4
Servlet教程之国际化讲解了如何根据用户区域设置展示多语言内容。关键术语包括国际化(i18n)、本地化(l10n)和区域设置(locale)。Servlet通过`request.getLocale()`获取区域设置,并使用`NumberFormat`类格式化特定区域的货币。示例代码展示了如何根据客户端locale显示货币格式。
8 3
|
1天前
|
定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n)。通过request对象的getLocale()获取用户区域设置,利用DateFormat进行特定区域的日期格式化。示例代码显示了根据用户浏览器设置显示相应语言和文化的日期。
7 2
|
1天前
|
定位技术
Servlet 教程 之 Servlet 国际化 2
Servlet教程展示了如何实现网站的国际化(i18n)和本地化(l10n)。通过识别用户的区域设置(locale),Servlet可以提供不同语言版本的页面。`request.getLocale()`用于获取用户浏览器的locale。关键方法包括`getCountry()`、`getDisplayCountry()`、`getLanguage()`和`getDisplayLanguage()`,用于获取国家、语言名称及其显示形式。设置`Content-Language`头确保西欧语言的正确显示,例如在Servlet示例中,使用HTML实体显示西班牙语字符。
4 0
|
2天前
|
定位技术
Servlet 教程 之 Servlet 国际化 1
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),通过request对象的getLocale()获取用户区域设置。方法如:getCountry(), getDisplayCountry(), getLanguage(), 和 getDisplayLanguage()等用于检测语言和国家信息。实例中,Servlet展示请求的语言和国家,以响应不同区域设置的用户需求。
5 0
|
3天前
|
缓存 小程序 Java
Servlet 教程 之 Servlet 调试 6
Servlet调试涉及大量客户端/服务器交互,常带来困难。使用JDB调试器调试HttpServer来模拟HTTP请求,需设置正确类路径,包括servlet和相关类,以及servlet和支撑类的路径。通过在Servlet代码中设置断点,通过浏览器触发请求进行调试。注释法也可辅助调试,通过暂时移除部分代码观察bug变化。查看HTTP头信息对理解Servlet行为有帮助。关键技巧包括:注意classes目录不重载,强制浏览器刷新避免缓存,确保servlet的init()方法正确处理ServletConfig。
14 3
|
4天前
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
14 6
|
4天前
|
Java 应用服务中间件 API
Servlet 教程 之 Servlet 调试 2
Servlet调试常面临挑战,建议采用日志记录,推荐使用log4J。Servlet API的`log()`方法也能辅助调试,如示例代码所示,通过`ServletContext`记录消息。当参数缺失时,它能生成带有异常的日志。Tomcat容器会将这些日志保存在安装目录的logs文件夹下,有助于识别和追踪错误。在不常见异常的catch块中使用`log()`函数是良好实践。
19 8
|
4天前
|
Java
Servlet 教程 之 Servlet 调试 1
Servlet调试常面临挑战,尤其是复杂的客户端/服务器交互导致的错误。`System.out.println()`是常用的调试工具,用于验证代码执行和显示变量值,尤其在无需额外类的环境中,如Servlet、JSP等。它不会中断程序执行,适合时序关键的场景。调试信息会出现在Web服务器日志中,例如:`System.out.println(&quot;Debugging message&quot;)`。
13 2
|
5天前
|
Unix 应用服务中间件 Linux
Servlet 教程 之 Servlet 包 1
Servlet教程介绍了Servlet应用程序的打包部署。默认存放于&lt;Tomcat-installation-directory&gt;/webapps/ROOT,类文件在WEB-INF/classes。例如,Servlet类com.myorg.MyServlet应置于WEB-INF/classes/com/myorg/MyServlet.class。
12 0
|
5天前
|
Java 编译器 API
Servlet 教程 之 Servlet 发送电子邮件 7
在Servlet中发送邮件需要JavaMail API和JAF。将java文件放在类路径下,如`com.myorg`,然后在`&lt;Tomcat-installation-directory&gt;/webapps/ROOT/WEB-INF/classes`目录下,使用`javac`编译`MyServlet.java`。如果依赖其他库,如servlet-api.jar,需将其加入CLASSPATH。确保JDK在PATH环境变量中,以便使用`javac`。
10 0