Fork me on GitHub

Java Servlet入门[2]

参考文献:http://www.runoob.com/servlet
接上篇文章:https://www.jianshu.com/p/ccfa783aa90b

eclipse创建Servlet实例

cookie实列

①通过 Servlet 创建Cookie

  • 在自动创建的HelloServlet.javadoGet()函数中添加

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Cookie name = new Cookie("name",URLEncoder.encode(request.getParameter("name"), "UTF-8")); // 中文转码
    Cookie url = new Cookie("url",request.getParameter("url"));
    name.setMaxAge(60*60*24); // 为两个 Cookie 设置过期日期为 24 小时后
    url.setMaxAge(60*60*24);
    response.addCookie( name ); // 在响应头中添加两个 Cookie
    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>");
    }
  • web.xml内容同上一篇不变

  • 通过上篇中的post.html发送数据
  • 访问http://localhost:8080/test/post.html,添加数据并提交可以得到站点名::sheng 站点 URL::www.baidu.com

👂通过 Servlet 读取 Cookie
读取 Cookie,通过调用HttpServletRequestgetCookies( )方法创建一个 javax.servlet.http.Cookie对象的数组。然后循环遍历数组,并使用getName()getValue()方法来访问每个 cookie 和关联的值

  • 创建ReadCookies.javadoGet()方法中添加

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Cookie cookie = null;
    Cookie[] cookies = null;
    cookies = request.getCookies(); // 获取与该域相关的 Cookie 的数组
    response.setContentType("text/html;charset=UTF-8"); // 设置响应内容类型
    PrintWriter out = response.getWriter();
    String title = "Delete Cookie Example";
    String docType = "<!DOCTYPE html>\n";
    out.println(docType +"<html>\n" +
    "<head><title>" + title + "</title></head>\n" +
    "<body bgcolor=\"#f0f0f0\">\n" );
    if( cookies != null ){
    out.println("<h2>Cookie 名称和值</h2>");
    for (int i = 0; i < cookies.length; i++){
    cookie = cookies[i];
    if((cookie.getName( )).compareTo("name") == 0 ){
    cookie.setMaxAge(0);
    response.addCookie(cookie);
    out.print("已删除的 cookie:" + cookie.getName( ) + "<br/>");
    }
    out.print("名称:" + cookie.getName( ) + ",");
    out.print("值:" + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br/>");
    }
    }else{
    out.println( "<h2 class=\"tutheader\">No Cookie founds</h2>");
    }
    out.println("</body>");
    out.println("</html>");
    }
  • web.xml中添加合适的路径

  • 通过第一步的创建之后,直接访问http://localhost:8080/test/ReadCookies,可以看到创建的cookie值

🌂删除cookie实例
还是第二步的代码,再刷新一下就可以了

Serlet Session实例

①创建session实例

  • ReadCookies.javadoGet()方法中添加

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    HttpSession session = request.getSession(true);    // 如果不存在 session 会话,则创建一个 session 对象
    Date createTime = new Date(session.getCreationTime()); // 获取 session 创建时间
    Date lastAccessTime = new Date(session.getLastAccessedTime()); // 获取该网页的最后一次访问时间
    SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //设置日期输出的格式
    String title = "Servlet Session 实例";
    Integer visitCount = new Integer(0);
    String visitCountKey = new String("visitCount");
    String userIDKey = new String("userID");
    String userID = new String("sheng");
    if(session.getAttribute(visitCountKey) == null) {
    session.setAttribute(visitCountKey, new Integer(0));
    }
    if (session.isNew()){ // 检查网页上是否有新的访问者
    title = "Servlet Session 实例";
    session.setAttribute(userIDKey, userID);
    } else {
    visitCount = (Integer)session.getAttribute(visitCountKey);
    visitCount = visitCount + 1;
    userID = (String)session.getAttribute(userIDKey);
    }
    session.setAttribute(visitCountKey, visitCount);
    response.setContentType("text/html;charset=UTF-8"); // 设置响应内容类型
    PrintWriter out = response.getWriter();
    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" +
    "<h2 align=\"center\">Session 信息</h2>\n" +
    "<table border=\"1\" align=\"center\">\n" +
    "<tr bgcolor=\"#949494\">\n" +
    " <th>Session 信息</th><th>值</th></tr>\n" +
    "<tr>\n" +
    " <td>id</td>\n" +
    " <td>" + session.getId() + "</td></tr>\n" +
    "<tr>\n" +
    " <td>创建时间</td>\n" +
    " <td>" + df.format(createTime) +
    " </td></tr>\n" +
    "<tr>\n" +
    " <td>最后访问时间</td>\n" +
    " <td>" + df.format(lastAccessTime) +
    " </td></tr>\n" +
    "<tr>\n" +
    " <td>用户 ID</td>\n" +
    " <td>" + userID +
    " </td></tr>\n" +
    "<tr>\n" +
    " <td>访问统计:</td>\n" +
    " <td>" + visitCount + "</td></tr>\n" +
    "</table>\n" +
    "</body></html>");
  • web.xml内容同上一篇不变

  • 访问http://localhost:8080/test/ReadCookies可看到session数据

👂删除session实例

  • 移除一个特定的属性:调用public void removeAttribute(String name)方法来删除与特定的键相关联的值。
  • 删除整个 session 会话:调用public void invalidate()方法来丢弃整个 session 会话。
  • 设置 session 会话过期时间:调用public void setMaxInactiveInterval(int interval)方法来单独设置 session 会话超时。
  • 注销用户:如果使用的是支持 servlet 2.4 的服务器,调用 logout 来注销 Web 服务器的客户端,并把属于所有用户的所有 session 会话设置为无效。
  • web.xml 配置:如果使用的是 Tomcat,还可以在web.xml文件中配置 session 会话超时,如下所示:
    1
    2
    3
    <session-config>
    <session-timeout>15</session-timeout>
    </session-config>
网页重定向
  • HelloServlet.javadoGet()方法中添加

    1
    2
    3
    4
    response.setContentType("text/html;charset=UTF-8");  	  // 设置响应内容类型
    String site = new String("http://www.baidu.com"); // 要重定向的新位置
    response.setStatus(response.SC_MOVED_TEMPORARILY);
    response.setHeader("Location", site);
  • 访问http://localhost:8080/test/HellloServlet跳转到百度界面

数据库的实例这里就不在写了,以前整理过mybatis数据库的增删改查,有兴趣的可以看一下

-------------本文结束感谢您的阅读-------------