java web会话管理

在人机交互过程中,会话管理是指保持用户的整个会话活动的交互与计算机系统跟踪的过程。会话管理分为桌面会话管理、浏览器会话管理、Web会话管理。本书讨论的是Web会话管理(通常指的是session以及Cookie) , 也称为会话跟踪。

会话管理基本原理

使用隐藏域

隐藏域是指将表单中的内容在显示页面时隐藏, 即不显示数据。在JSP中将input标签的type 属性值设定为hidden, 即生成一个隐藏表单域。再将会话的唯一标识记录到隐藏域中的value属性中, 并设定name属性值。当表单提交时, 会话标识也被提交到服务端, 服务端根据它找到对应的会话对象。
使用隐藏域时,需要在每个页面中都包含会话标识表单,这样才能在许多页面跳转之间保存会话,并对它进行管理。此方法实现起来比较烦琐,安全性较差,不适合隐秘性的数据,在目前的开发中较少使用。

使用Cookie

利用Cookie实现会话管理是最容易的实现方式, 也是使用较多的方法。其原理是在服务端保存的会话对象中设定会话的唯一标识, 客户端将会话标识保存在Cookie中, 当浏览器发起请求时,从Cookie中取得会话标识并发送给服务端, 服务端在收到请求后, 根据发送过来的会话标识查找到对应的会话对象,这样服务端就清楚当前是哪个客户端在连接,并且可以从会话中获得信息。
利用Cookie实现会话管理是目前开发中采用的主流方法, 大多数的动态页面开发技术都实现了这一功能,并且其管理流程是自动完成的,在实现上并不需要多大的开发工作量。其实现会话管理的过程如图所示。
在这里插入图片描述

使用URL重写

顾名思义, URL重写是指在URL地址的末尾添加会话标识, 改写了原先的URL地址。其本质是用于唯一标识会话的信息, 以参数的形式添加到URL中, 服务端接收到请求时, 解析出会话标识, 然后利用会话标识查找出与当前请求对应的会话对象。该方法是用在浏览器中Cookie被禁用的情况下,利用该方法可以很好地实现会话跟踪而不会受到浏览器参数设定的影响。
利用URL重写的方法, 其特点是在URL后面添加会话标识, 因此整个Web应用中的超链接或者脚本中用到的URL都需要添加会话标识, Web应用中的每一个页面都需要动态生成, 页面中的每一个链接或者由客户端生成的跳转指令都必须加上会话标识,这样才能确保是当前会话。当客户端访问静态页面时,会话标识将会丢失,当重回动态页面时将不能继续此前的会话,以上是它的特点,也是它的缺陷。
利用该方法还有一个问题, 即当用户在浏览网页时, 可能会将URL复制下来分享给朋友, 因为URL中会包含会话标识, 那么其他人可能与当前浏览者使用同一会话对象, 这样当前浏览者的个人隐私就暴露了,信息不再安全。
无论采用哪种方式实现会话管理,在服务端都需要完成相关代码才能完整地实现会话管理的任务。这些任务主要是生成唯一的会话标识、存储会话对象、从Web容器中取得当前请求的会话、回收空闲会话。

HTTP协议是无意识、单向协议。服务端不能主动连接客户端,只能等待并答复客户端请求。客户端连接服务端, 发出一个HTTP请求, 服务端处理请求, 并返回一个HTTP响应给客户端, 至此, 本次会话结束, 从这一过程可以看出, HTTP协议本身并不支持服务端保存客户端的状态等信息。于是, Web服务器中引入了session的概念, 用来保存客户端的信息。

Session会话管理

使用HttpSession管理会话

在Java中, 使用javax.servlet.http.HttpSession类来实现session会话。每个请求者对应一个session 对象, 客户的所有状态信息都保存在该对象里。当用户第一次请求服务器时, 就创建了session对象。它以key-value 的形式进行保存,通过相对应的读写方法来保存客户的状态信息,例如getAttribute(String key) 用于获得参数、setAttribute(String key, Object value) 用于设定参数和参数值。在Servlet中可以通过request.get Session() 方法获取客户的session对象, 例如:

HttpSession session = request.getSession();
session.setAttribute("username","john");

在JSP中内置了Session对象, 可以直接使用, Servlet使用上述方法获取session对象。若JSP 页面中设定了<%@page session=“false”%>, 则该JSP页面的session对象是不可用的。下面通过例子说明如何利用session来保存登录信息。
login.jsp

<%@ page import="java.util.*" contentType="text/html;charset=UTF-8" language="java" %>
<%
    String userName = (String) session.getAttribute("username");
    String basePath = request.getContextPath();
    if (userName != null && userName != "") {
        response.sendRedirect(basePath + "/index.jsp");
        return;
    }
%>
<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h1>用户登录</h1>
<form action="<%=basePath%>/login" method="post">
    <p>
        <label>输入用户名:</label>
        <input type="text" name="name">
    </p>
    <p>
        <label>输入密码:</label>
        <input type="password" name="pwd">
    </p>
    <p>
        <input type="submit" value="提交">
    </p>
</form>
</body>
</html>

loginServlet.java

package com.wujialiang;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "login",urlPatterns = {
        "/login"
})
public class loginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userName = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        String basePath = getServletContext().getContextPath();
        if(userName.equals("admin")&&pwd.equals("123456")){
            HttpSession session = req.getSession();
            session.setAttribute("username",userName);
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("/index.jsp");
            requestDispatcher.forward(req,resp);
        }else{
            //错误跳转登录页面
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("/login.jsp");
            requestDispatcher.forward(req,resp);
        }
    }
}

index.jsp

<%@ page import="java.util.*" contentType="text/html;charset=UTF-8" language="java" %>
<%
    String userName = (String) session.getAttribute("username");
    String basePath = request.getContextPath();
    if (userName == null || userName == "") {
        response.sendRedirect(basePath + "/login.jsp");
        return;
    }
%>
<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h1>欢迎你:<%=userName%>
</h1>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HttpSession管理会话的原理

HttpSession 会话管理是利用服务器来管理会话的机制,当程序为某个客户端的请求创建了一个session的时候, 服务器会检查客户端的请求是否已经包含了一个session标识, 如果已经有了session标识, 服务器就把该session检索出来使用; 如果请求不包含session标识, 就为客户端创建一个该请求的唯一session标识。其会话管理流程如图所示。
在这里插入图片描述

HttpSession与URL重写

提到URL重写是用在客户端不支持Cookie的情况下。它的实现方式是将Session的标识id添加到URL中。服务器通过解析重写后的URL获取Session的标识id。这样即使客户端不支持Cookie, 也可以用Session来记录状态信息。重写的方法如下:

response.encodeURL("login.jsp");
//或者
response.sendRedirect(response.encodeURL("login.jsp"));

这两种方法的效果是一样的, 如果客户端支持Cookie, 那么生成的URL不变; 如果不支持,生成的URL中就会带有jsessionid字符串的地址, 超链接如图所示。

在这里插入图片描述
从图中可以看出, 在URL的文件名后面, 参数的前面添加了字符串“; jsessionid=标识id”o 用户单击这个链接时, 客户端会把session的id值通过URL提交到服务器上, 服务器通过解析URL 地址获得session的id值。

HttpSession中禁用Cookie

可以通过配置的方式在Web项目中禁用Cookie, 禁用方法如下:
在webapp目录下新建META-INF文件夹,打开或者新建context.xml

<?xml version="1.0" encoding="UTF-8" ?>
<Context cookies="false">
</Context>

如果想全局配置需要修改tomcat下的context.xml
上述两种方法都是在Context元素中添加属性cookies=“false”, 二者的区别在于前者是对单个项目的Cookie禁止, 后者是禁止部署在Tomcat服务器里的Web项目使用Cookie。

HttpSession的生命周期

Servlet有它的生命周期, 同样, HttpSession也有其生命周期:创建→使用→消亡。

HttpSession对象的创建

当客户端第一次访问服务器时, 服务器为每个浏览器创建不同Session的ID值。在服务器端使用request.getSession() 或者request.get Session(true) 方法来获得HttpSession对象。

HttpSession对象的使用

创建HttpSession对象后, 使用Session对象进行数据的存取和传输。具体的过程如下:

  • 将产生的sessionID存入Cookie中。
  • 当客户端再次发送请求时, 会将sessionID与request一起传送给服务器端。
  • 服务器根据请求过来的sessionID与保存在服务器端的session对应起来,判断是否为同session。

HttpSession对象的消亡

有如下3种方式可以结束session对象:

  • 将浏览器关闭。
  • 调用HttpSession的invalidate() 方法。
  • session超时。
    关闭浏览器, 这样会使浏览器端的session失效, 服务器端session并不会失效。如果服务器进程终止了, 那么session会被结束。
    在session结束时, 服务器会清空当前浏览器的相关数据信息。
    以上就是HttpSession的生命周期过程, 在请求处理时不断循环第2步, 直到session对象消亡。session是保存在服务器内存中的, 每个用户都有一个独立的session。session中的内容应该尽量少,这样当有大量客户访问服务器时才不会导致内存溢出。

只有访问JSP、Servlet时才会创建session, 访问静态页面时是不会创建session对象的。

HttpSession的有效期

通常情况下, 都给session设定一个有效期, 当某用户访问的session超过这个有效期时, 即不是活跃的session, 那么session就失效了, 服务器会将它从内存中清除。设定session的有效期有以下三种方法:

  • 在对应的Web服务器配置中设置所有session的有效期。
  • 调用session的setMaxInactiveInterval(long interval) 进行设定。
  • 在web.xml中修改, 例如:
<session-config>
 <!--会话超时时长30分钟-->
 <session-timeout>30</session-timeout>
</session-config>

调用session的invalidate() 可以销毁session.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
全书一共被压缩为5个rar,这是第四个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.   本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很多例子都是目前web开发中经常使用的功能,具有相当的实用价值。本书不仅可以作为java web开发的学习用书,还可以作为从事java web开发的程序员的参考用书和必备手册。此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 1.6.8 语言标识 16 1.7 格式良好的xml 17 .1.8 dtd 18 1.8.1 在xml文档中引入dtd 18 1.8.2 dtd的结构 21 1.9 有效的xml 35 1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中的运用 42 2.3 名称空间和dtd 43 2.4 小结 45 第3章 对xml文档进行分析 46 3.1 dom、sax和jaxp 46 3.2 使用dom解析xml文档 47 3.2.1 dom结构模型 47 3.2.2 dom解析器工厂 50 3.2.3 jaxp的错误类和异常类 52 3.2.4 用dom解析xml文档实例 53 3.3 使用sax解析xml文档 65 3.3.1 sax的处理机制 66 3.3.2 配置sax解析器 69 3.3.3 sax解析器工厂 70 3.3.4 sax的异常类 71 3.3.5 errorhandler接口 73 3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 3.6 解析名称空间 96 3.6.1 dom和名称空间 96 3.6.2 sax和名称空间 97 3.6.3 jdom和名称空间 98 3.6.4 dom4j和名称空间 98 3.7 小结 99 第4章 xsl转换 101 4.1 xslt概述 101 4.2 xalan处理器 105 4.3 模板规则 106 4.4 [xsl:apply-templates]元素 107 4.5 [xsl:value-of]元素 108 4.6 [xsl:for-each]元素 110 4.7 匹配节点的模式 111 4.8 mode属性 113 4.9 内置的模板规则 114 4.10 对空白的处理 115 4.11 xpath语言 116 4.11.1 xpath上下文 116 4.11.2 位置路径 117 4.11.3 表达式 121 4.11.4 核心函数库 123 4.12 创建结果树 126 4.12.1 创建元素和属性 127 4.12.2 创建文本 131 4.12.3 创建处理指令 133 4.12.4 创建注释 133 4.12.5 复制节点 134 4.12.6 输出格式化的数字 135 4.13 条件处理 144 4.13.1 [xsl:if] 144 4.13.2 [xsl:choose] 145 4.14 排序 146 4.15 变量和参数 150 4.15.1 变量 150 4.15.2 参数 152 4.16 命名模板 153 4.17 合并样式表 154 4.17.1 导入样式表 154 4.17.2 包含样式表 155 4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出cdata段 160 4.19.5 指定文档缩进 161 4.19.6 指定媒体类型 161 4.20 xslt中的函数 162 4.21 数字格式化 162 4.22 查询和分组 164 4.23 处理多个输入文档 172 4.24 jaxp中的xslt api 175 4.24.1 转换器工厂 175 4.24.2 transformer和templates 176 4.24.3 一个例子 178 4.25 小结 179 第2部分 servlet篇 第5章 servlet与tomcat 182 5.1 servletservlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web应用程序 194 5.7 小结 195 第6章 servlet技术 196 6.1 servlet api 196 6.1.1 servlet接口 196 6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 6.3.1 servletexception类 224 6.3.2 unavailableexception类 224 6.4 servlet生命周期 224 6.5 servlet上下文 226 6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素 249 7.5 一个实例 250 7.6 小结 253 第8章 数据库访问 254 8.1 驱动程序的类型 254 8.1.1 jdbc-odbc桥 254 8.1.2 部分本地api java驱动程序 255 8.1.3 jdbc网络纯java驱动程序 255 8.1.4 本地协议的纯java驱动程序 256 8.2 安装数据库 256 8.3 jdbc api 260 8.3.1 加载并注册数据库驱动 261 8.3.2 建立到数据库的连接 263 8.3.3 访问数据库 264 8.3.4 事务处理 289 8.3.5 可滚动和可更新的结果集 296 8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 9.2.5 在线人数统计程序 329 9.3 小结 335 第10章 servlet的异常处理机制 337 10.1 声明式异常处理 338 10.1.1 http错误代码的处理 338 10.1.2 java异常的处理 341 10.2 程序式异常处理 343 10.2.1 在try-catch语句中处理异常 343 10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 360 11.3 singlethreadmodel接口 362 11.4 小结 363 11.5 思考题 363 第3部分 jsp篇 第12章 jsp技术 366 12.1 jsp简介 366 12.2 jsp的运行机制 366 12.3 jsp的语法 371 12.3.1 指令元素(directive elements) 371 12.3.2 脚本元素(scripting elements) 374 12.3.3 动作元素(action elements) 376 12.3.4 注释 383 12.4 jsp的隐含对象 383 12.4.1 pagecontext 384 12.4.2 out 385 12.4.3 page 385 12.4.4 exception 386 12.5 对象和范围 387 12.6 留言板程序 389 12.7 留言板管理程序 397 12.8 jsp文档 402 12.8.1 jsp文档的标识 404 12.8.2 jsp文档中的元素语法 404 12.9 小结 407 第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 14.1 模型1 441 14.2 模型2 445 14.3 小结 449 第15章 标签库(tag library) 450 15.1 标签库api 450 15.1.1 标签的形式 451 15.1.2 tag接口 451 15.1.3 iterationtag接口 453 15.1.4 bodytag接口 454 15.2 标签库描述符 455 15.2.1 [taglib]元素 456 15.2.2 [validator]元素 457 15.2.3 [listener]元素 457 15.2.4 [tag]元素 458 15.2.5 [tag-file]元素 460 15.2.6 [function]元素 461 15.3 传统标签的开发 462 15.3.1 实例一:[hello]标签 462 15.3.2 实例二:[max]标签 465 15.3.3 实例三:[greet]标签 467 15.3.4 实例四:[switch]标签 469 15.3.5 实例五:[iterate]标签 473 15.4 简单标签的开发 479 15.4.1 simpletag接口 479 15.4.2 实例一:[welcome]标签 480 15.4.3 实例二:[max_ex]标签 481 15.5 小结 483 第16章 表达式语言(el) 484 16.1 语法 484 16.1.1 “[ ]”和“.”操作符 484 16.1.2 算术操作符 484 16.1.3 关系操作符 485 16.1.4 逻辑操作符 485 16.1.5 empty操作符 485 16.1.6 条件操作符 485 16.1.7 圆括号 486 16.1.8 操作符的优先级 486 16.2 隐含对象 486 16.3 命名变量 487 16.4 保留的关键字 488 16.5 函数 488 16.6 小结 489 第17章 jsp标准标签库(jstl) 490 17.1 jstl简介 490 17.2 配置jstl 491 17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n标签库 506 17.4.1 国际化标签 506 17.4.2 格式化标签 511 17.5 sql标签库 520 17.5.1 [sql:setdatasource] 520 17.5.2 [sql:query] 521 17.5.3 [sql:param] 524 17.5.4 [sql:dateparam] 525 17.5.5 [sql:update] 526 17.5.6 [sql:transaction] 527 17.6 xml标签库 529 17.6.1 核心操作 529 17.6.2 流程控制 532 17.6.3 转换操作 536 17.7 functions标签库 539 17.7.1 fn:contains 539 17.7.2 fn:containsignorecase 539 17.7.3 fn:startswith 540 17.7.4 fn:endswith 541 17.7.5 fn:indexof 541 17.7.6 fn:replace 542 17.7.7 fn:substring 543 17.7.8 fn:substringbefore 544 17.7.9 fn:substringafter 544 17.7.10 fn:split 545 17.7.11 fn:join 546 17.7.12 fn:tolowercase 547 17.7.13 fn:touppercase 547 17.7.14 fn:trim 548 17.7.15 fn:escapexml 548 17.7.16 fn:length 549 17.8 小结 549 第18章 标签文件(tag files) 551 18.1 标签文件的语法 551 18.2 一个简单的标签文件 551 18.3 标签文件的隐含对象 554 18.4 标签文件的指令 555 18.4.1 tag指令 555 18.4.2 attribute指令 556 18.4.3 variable指令 557 18.5 标签文件实例讲解 558 18.5.1 实例一:[welcome]标签 558 18.5.2 实例二:[tohtml]标签 559 18.6 [jsp:invoke]动作元素 561 18.7 [jsp:dobody]动作元素 562 18.8 小结 562 第4部分 应用篇 第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 587 第20章 filter在web开发中的应用 588 20.1 过滤器概述 588 20.2 filter api 589 20.2.1 filter接口 589 20.2.2 filterconfig接口 590 20.2.3 filterchain接口 590 20.3 过滤器的部署 591 20.4 过滤器的开发 592 20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 21.5.3 编写国际化的web应用程序 625 21.6 小结 629 第22章 使用jbuilder2005开发web 第22章 应用程序 630 22.1 jbuilder2005简介 630 22.2 集成开发环境介绍 631 22.2.1 菜单栏 631 22.2.2 主工具栏 632 22.2.3 工程工具栏和工程窗口 632 22.2.4 结构窗口 633 22.2.5 文件标签和内容窗口 634 22.2.6 文件视图标签 634 22.2.7 消息窗口 637 22.3 jbuilder2005的基本配置 638 22.3.1 配置jdk 638 22.3.2 配置web服务器 640 22.4 文件的上传和下载 642 22.4.1 基于表单的文件上传 642 22.4.2 文件上传格式分析 643 22.4.3 commons-fileupload组件 644 22.4.4 文件上传实例 646 22.4.5 文件下载实例 656 22.5 给图片添加水印和文字 664 22.6 小结 667 第23章 开发安全的web应用程序 668 23.1 概述 668 23.2 理解验证机制 669 23.2.1 http basic authentication 669 23.2.2 http digest authentication 670 23.2.3 https client authentication 670 23.2.4 form based authentication 671 23.3 声明式安全 671 23.3.1 [security-constraint]元素 671 23.3.2 [login-config]元素 673 23.3.3 基本验证的实现 674 23.3.4 基于表单验证的实现 676 23.3.5 使用数据库保存用户名和密码 678 23.4 程序式安全 682 23.5 sql注入攻击的防范 685 23.6 小结 687 第24章 web应用程序开发实例 688 24.1 图像的缩放 688 24.2 如何动态生成验证码 692 24.3 如何避免表单的重复提交 696 24.3.1 在客户端避免表单的重复提交 697 24.3.2 在服务器端避免表单的重复 24.3.2 提交 700 24.4 小结 706 第25章 使用ant辅助web应用程序 第25章 开发 707 25.1 ant介绍 707 25.2 安装并配置ant 708 25.2.1 下载并安装ant 708 25.2.2 设置ant的运行环境 708 25.3 编写ant的构建文件 709 25.3.1 准备工作 709 25.3.2 工程([project]) 712 25.3.3 目标([target]) 713 25.3.4 任务 714 25.3.5 path-like structures 728 25.3.6 引用(references) 729 25.4 部署到tomcat 730 25.5 运行ant 732 25.6 小结 732 第26章 xml和xslt在web开发中的 第26章 应用 733 26.1 功能概述 733 26.2 程序设计 733 26.2.1 软件架构 733 26.2.2 页面设计 735 26.2.3 数据库设计 747 26.3 程序实现 749 26.3.1 org.sunxin.guestbook 749 26.3.2 org.sunxin.guestbook.beans 750 26.3.3 org.sunxin.guestbook.util 758 26.3.4 org.sunxin.guestbook.parser 762 26.3.5 org.sunxin.guestbook.controller 765 26.3.6 org.sunxin.guestbook.view 787 26.3.7 page.xsl 791 26.3.8 web.xml 797 26.3.9 context.xml 798 26.4 小结 798 附录a 快速掌握html 799 附录b 解析http 820 附录c server.xml文件 833 附录d web.xml文件 840 索引 852...
全书一共被压缩为5个rar,这是第二个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.   本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很多例子都是目前web开发中经常使用的功能,具有相当的实用价值。本书不仅可以作为java web开发的学习用书,还可以作为从事java web开发的程序员的参考用书和必备手册。此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 1.6.8 语言标识 16 1.7 格式良好的xml 17 .1.8 dtd 18 1.8.1 在xml文档中引入dtd 18 1.8.2 dtd的结构 21 1.9 有效的xml 35 1.10 xml处理器/解析器 35 1.11 小结 36 第2章 xml名称空间 38 2.1 声明名称空间 38 2.2 名称空间在元素和属性中的运用 39 2.2.1 名称空间在元素中的运用 39 2.2.2 默认名称空间 41 2.2.3 名称空间在属性中的运用 42 2.3 名称空间和dtd 43 2.4 小结 45 第3章 对xml文档进行分析 46 3.1 dom、sax和jaxp 46 3.2 使用dom解析xml文档 47 3.2.1 dom结构模型 47 3.2.2 dom解析器工厂 50 3.2.3 jaxp的错误类和异常类 52 3.2.4 用dom解析xml文档实例 53 3.3 使用sax解析xml文档 65 3.3.1 sax的处理机制 66 3.3.2 配置sax解析器 69 3.3.3 sax解析器工厂 70 3.3.4 sax的异常类 71 3.3.5 errorhandler接口 73 3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom4j 88 3.5.2 dom4j api介绍 88 3.5.3 第一个实例 92 3.5.4 第二个实例 94 3.6 解析名称空间 96 3.6.1 dom和名称空间 96 3.6.2 sax和名称空间 97 3.6.3 jdom和名称空间 98 3.6.4 dom4j和名称空间 98 3.7 小结 99 第4章 xsl转换 101 4.1 xslt概述 101 4.2 xalan处理器 105 4.3 模板规则 106 4.4 [xsl:apply-templates]元素 107 4.5 [xsl:value-of]元素 108 4.6 [xsl:for-each]元素 110 4.7 匹配节点的模式 111 4.8 mode属性 113 4.9 内置的模板规则 114 4.10 对空白的处理 115 4.11 xpath语言 116 4.11.1 xpath上下文 116 4.11.2 位置路径 117 4.11.3 表达式 121 4.11.4 核心函数库 123 4.12 创建结果树 126 4.12.1 创建元素和属性 127 4.12.2 创建文本 131 4.12.3 创建处理指令 133 4.12.4 创建注释 133 4.12.5 复制节点 134 4.12.6 输出格式化的数字 135 4.13 条件处理 144 4.13.1 [xsl:if] 144 4.13.2 [xsl:choose] 145 4.14 排序 146 4.15 变量和参数 150 4.15.1 变量 150 4.15.2 参数 152 4.16 命名模板 153 4.17 合并样式表 154 4.17.1 导入样式表 154 4.17.2 包含样式表 155 4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出cdata段 160 4.19.5 指定文档缩进 161 4.19.6 指定媒体类型 161 4.20 xslt中的函数 162 4.21 数字格式化 162 4.22 查询和分组 164 4.23 处理多个输入文档 172 4.24 jaxp中的xslt api 175 4.24.1 转换器工厂 175 4.24.2 transformer和templates 176 4.24.3 一个例子 178 4.25 小结 179 第2部分 servlet篇 第5章 servlet与tomcat 182 5.1 servletservlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web应用程序 194 5.7 小结 195 第6章 servlet技术 196 6.1 servlet api 196 6.1.1 servlet接口 196 6.1.2 servlet相关接口与实现类 197 6.2 几个实例 205 6.2.1 实例一:simplehello 205 6.2.2 实例二:welcomeyou 210 6.2.3 实例三:outputinfo 216 6.2.4 实例四:loginservlet 220 6.3 servlet异常 223 6.3.1 servletexception类 224 6.3.2 unavailableexception类 224 6.4 servlet生命周期 224 6.5 servlet上下文 226 6.5.1 servletcontext接口 226 6.5.2 页面访问量统计实例 228 6.6 请求转发 231 6.6.1 requestdispatcher接口 232 6.6.2 得到requestdispatcher对象 232 6.6.3 请求转发的实例 233 6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素 249 7.5 一个实例 250 7.6 小结 253 第8章 数据库访问 254 8.1 驱动程序的类型 254 8.1.1 jdbc-odbc桥 254 8.1.2 部分本地api java驱动程序 255 8.1.3 jdbc网络纯java驱动程序 255 8.1.4 本地协议的纯java驱动程序 256 8.2 安装数据库 256 8.3 jdbc api 260 8.3.1 加载并注册数据库驱动 261 8.3.2 建立到数据库的连接 263 8.3.3 访问数据库 264 8.3.4 事务处理 289 8.3.5 可滚动和可更新的结果集 296 8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话跟踪 306 9.2.1 httpsession接口 306 9.2.2 session的生命周期 307 9.2.3 cookie的应用 319 9.2.4 httpsessionbindinglistener接口 328 9.2.5 在线人数统计程序 329 9.3 小结 335 第10章 servlet的异常处理机制 337 10.1 声明式异常处理 338 10.1.1 http错误代码的处理 338 10.1.2 java异常的处理 341 10.2 程序式异常处理 343 10.2.1 在try-catch语句中处理异常 343 10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 360 11.3 singlethreadmodel接口 362 11.4 小结 363 11.5 思考题 363 第3部分 jsp篇 第12章 jsp技术 366 12.1 jsp简介 366 12.2 jsp的运行机制 366 12.3 jsp的语法 371 12.3.1 指令元素(directive elements) 371 12.3.2 脚本元素(scripting elements) 374 12.3.3 动作元素(action elements) 376 12.3.4 注释 383 12.4 jsp的隐含对象 383 12.4.1 pagecontext 384 12.4.2 out 385 12.4.3 page 385 12.4.4 exception 386 12.5 对象和范围 387 12.6 留言板程序 389 12.7 留言板管理程序 397 12.8 jsp文档 402 12.8.1 jsp文档的标识 404 12.8.2 jsp文档中的元素语法 404 12.9 小结 407 第13章 jsp与javabean 409 13.1 javabean简介 409 13.1.1 属性的命名 409 13.1.2 属性的类型 411 13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 14.1 模型1 441 14.2 模型2 445 14.3 小结 449 第15章 标签库(tag library) 450 15.1 标签库api 450 15.1.1 标签的形式 451 15.1.2 tag接口 451 15.1.3 iterationtag接口 453 15.1.4 bodytag接口 454 15.2 标签库描述符 455 15.2.1 [taglib]元素 456 15.2.2 [validator]元素 457 15.2.3 [listener]元素 457 15.2.4 [tag]元素 458 15.2.5 [tag-file]元素 460 15.2.6 [function]元素 461 15.3 传统标签的开发 462 15.3.1 实例一:[hello]标签 462 15.3.2 实例二:[max]标签 465 15.3.3 实例三:[greet]标签 467 15.3.4 实例四:[switch]标签 469 15.3.5 实例五:[iterate]标签 473 15.4 简单标签的开发 479 15.4.1 simpletag接口 479 15.4.2 实例一:[welcome]标签 480 15.4.3 实例二:[max_ex]标签 481 15.5 小结 483 第16章 表达式语言(el) 484 16.1 语法 484 16.1.1 “[ ]”和“.”操作符 484 16.1.2 算术操作符 484 16.1.3 关系操作符 485 16.1.4 逻辑操作符 485 16.1.5 empty操作符 485 16.1.6 条件操作符 485 16.1.7 圆括号 486 16.1.8 操作符的优先级 486 16.2 隐含对象 486 16.3 命名变量 487 16.4 保留的关键字 488 16.5 函数 488 16.6 小结 489 第17章 jsp标准标签库(jstl) 490 17.1 jstl简介 490 17.2 配置jstl 491 17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n标签库 506 17.4.1 国际化标签 506 17.4.2 格式化标签 511 17.5 sql标签库 520 17.5.1 [sql:setdatasource] 520 17.5.2 [sql:query] 521 17.5.3 [sql:param] 524 17.5.4 [sql:dateparam] 525 17.5.5 [sql:update] 526 17.5.6 [sql:transaction] 527 17.6 xml标签库 529 17.6.1 核心操作 529 17.6.2 流程控制 532 17.6.3 转换操作 536 17.7 functions标签库 539 17.7.1 fn:contains 539 17.7.2 fn:containsignorecase 539 17.7.3 fn:startswith 540 17.7.4 fn:endswith 541 17.7.5 fn:indexof 541 17.7.6 fn:replace 542 17.7.7 fn:substring 543 17.7.8 fn:substringbefore 544 17.7.9 fn:substringafter 544 17.7.10 fn:split 545 17.7.11 fn:join 546 17.7.12 fn:tolowercase 547 17.7.13 fn:touppercase 547 17.7.14 fn:trim 548 17.7.15 fn:escapexml 548 17.7.16 fn:length 549 17.8 小结 549 第18章 标签文件(tag files) 551 18.1 标签文件的语法 551 18.2 一个简单的标签文件 551 18.3 标签文件的隐含对象 554 18.4 标签文件的指令 555 18.4.1 tag指令 555 18.4.2 attribute指令 556 18.4.3 variable指令 557 18.5 标签文件实例讲解 558 18.5.1 实例一:[welcome]标签 558 18.5.2 实例二:[tohtml]标签 559 18.6 [jsp:invoke]动作元素 561 18.7 [jsp:dobody]动作元素 562 18.8 小结 562 第4部分 应用篇 第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 587 第20章 filter在web开发中的应用 588 20.1 过滤器概述 588 20.2 filter api 589 20.2.1 filter接口 589 20.2.2 filterconfig接口 590 20.2.3 filterchain接口 590 20.3 过滤器的部署 591 20.4 过滤器的开发 592 20.5 对用户进行统一验证的过滤器 594 20.6 对请求和响应数据进行替换的 20.6 过滤器 600 20.7 小结 609 第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 21.5.3 编写国际化的web应用程序 625 21.6 小结 629 第22章 使用jbuilder2005开发web 第22章 应用程序 630 22.1 jbuilder2005简介 630 22.2 集成开发环境介绍 631 22.2.1 菜单栏 631 22.2.2 主工具栏 632 22.2.3 工程工具栏和工程窗口 632 22.2.4 结构窗口 633 22.2.5 文件标签和内容窗口 634 22.2.6 文件视图标签 634 22.2.7 消息窗口 637 22.3 jbuilder2005的基本配置 638 22.3.1 配置jdk 638 22.3.2 配置web服务器 640 22.4 文件的上传和下载 642 22.4.1 基于表单的文件上传 642 22.4.2 文件上传格式分析 643 22.4.3 commons-fileupload组件 644 22.4.4 文件上传实例 646 22.4.5 文件下载实例 656 22.5 给图片添加水印和文字 664 22.6 小结 667 第23章 开发安全的web应用程序 668 23.1 概述 668 23.2 理解验证机制 669 23.2.1 http basic authentication 669 23.2.2 http digest authentication 670 23.2.3 https client authentication 670 23.2.4 form based authentication 671 23.3 声明式安全 671 23.3.1 [security-constraint]元素 671 23.3.2 [login-config]元素 673 23.3.3 基本验证的实现 674 23.3.4 基于表单验证的实现 676 23.3.5 使用数据库保存用户名和密码 678 23.4 程序式安全 682 23.5 sql注入攻击的防范 685 23.6 小结 687 第24章 web应用程序开发实例 688 24.1 图像的缩放 688 24.2 如何动态生成验证码 692 24.3 如何避免表单的重复提交 696 24.3.1 在客户端避免表单的重复提交 697 24.3.2 在服务器端避免表单的重复 24.3.2 提交 700 24.4 小结 706 第25章 使用ant辅助web应用程序 第25章 开发 707 25.1 ant介绍 707 25.2 安装并配置ant 708 25.2.1 下载并安装ant 708 25.2.2 设置ant的运行环境 708 25.3 编写ant的构建文件 709 25.3.1 准备工作 709 25.3.2 工程([project]) 712 25.3.3 目标([target]) 713 25.3.4 任务 714 25.3.5 path-like structures 728 25.3.6 引用(references) 729 25.4 部署到tomcat 730 25.5 运行ant 732 25.6 小结 732 第26章 xml和xslt在web开发中的 第26章 应用 733 26.1 功能概述 733 26.2 程序设计 733 26.2.1 软件架构 733 26.2.2 页面设计 735 26.2.3 数据库设计 747 26.3 程序实现 749 26.3.1 org.sunxin.guestbook 749 26.3.2 org.sunxin.guestbook.beans 750 26.3.3 org.sunxin.guestbook.util 758 26.3.4 org.sunxin.guestbook.parser 762 26.3.5 org.sunxin.guestbook.controller 765 26.3.6 org.sunxin.guestbook.view 787 26.3.7 page.xsl 791 26.3.8 web.xml 797 26.3.9 context.xml 798 26.4 小结 798 附录a 快速掌握html 799 附录b 解析http 820 附录c server.xml文件 833 附录d web.xml文件 840 索引 852...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假装我不帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值