JavaWeb复习03、04

CH03-Web应用开发和jsp

Web应用的组件关联关系

Web组件之间一般有下面三种关联关系:

  • 请求转发:forward
  • 请求重定向:redierct
  • 页面包含:include

请求转发

是将客户端的请求转发给同一个应用程序中的其他web组件。

  • 请求转发表明该次请求并没有完成,只是转交给其他组件去完成,客户端并不清楚转发的过程,客户端地址栏不发生改变

  • 通过RequestDispatcher接口的forward()实现HTTP请求的转发,同时将请求和响应对象传递给目标组件

    1
    req.getRequestDispatcher("login").forward(req,resp);

请求重定向

是指将客户端的请求重定向到其他任意的URL上

  • 请求重定向表明该次请求响应流程已经完成,返回一个响应给客户端,客户端根据响应发起一次新的请求,不能使用之前的request对象

  • 通过ServletResponse的sendRedirect()来实现重定向

    1
    resp.sendRedirect("welcome");

会话跟踪

HTTP协议本质上是一个无状态协议,基于请求-响应的通信模式,所以服务端和客户端之间无法保持连接,保持会话状态

常用的会话跟踪方法有:

  • URL重写

    • 将token作为参数,以key=value形式添加到URL字符串中,但有长度限制,安全性低
  • 隐藏域

    • 将附加在URL中的信息改为放置在form表单的隐藏域中,没有字符限制,无需特殊编码
  • 客户端保存信息:Cookies

    • 是一个对象,包含以key-value形式保存的token信息,作为HTTP请求头的一部分。Cookies可以由服务端或浏览器端的Javascript构建,最终保存在浏览器中。缺点是用户可以在浏览器进行限制
  • 服务端保存信息:HttpSession

    • 最安全最常用的技术

    • 用户第一次请求服务器时,由服务器创建HttpSession对象,生成唯一的用户ID,其他会话token信息以key-value的形式保存在HttpSession对象中,将用户ID以Cookie或URL的方式告知客户端,整个过程由Web容器进行管理和控制。

    • getSession()

数据的作用域

四种作用域由小到大分别为:

  • 页面范围:一个Servlet类或一个jsp页面
  • 请求范围:一个请求过程的范围,请求被响应之间
  • 会话范围:会话范围,整个会话持续过程
  • 应用范围:服务器运行过程中

Web应用是通过将值或对象放入对应的作用域对象中,来实现数据作用域控制的,作用域对象均提供setAttribute和getAttribute方法

JSP

jsp是一种建立在Servlet规范提供的功能之上的动态网页技术,在用户第一次请求时,会被转译成Servlet,然后处理用户的请求,jsp可以看成是运行时的Servlet,本质上来说,jsp是一种为了方便程序员编写的Servlet表现形式

语法构成

  • 静态内容

    • HTML静态文本
  • 指令

    1
    <%@指令 %>
    • 主要用于提供整个jsp页面相关信息及属性,如编码方式、导入类等。
    • 三种类型:page、include、taglib
  • 表达式

    1
    <%=表达式>
  • 小脚本

    1
    <% java代码 %>
  • 声明

    1
    <%! 方法或变量 %>
  • 标准动作

    1
    <jsp: 动作名>
    • 8个标准动作,常用的有:
    1
    2
    3
    4
    5
    <jsp:include>;
    <jsp:forward>;
    <jsp:useBean>;
    <jsp:setProperty>;
    <jsp:getProperty>;
  • 注释

    1
    <%-- 注释内容 --%>

JSP隐式对象

指在jsp脚本中,不需要任何声明和定义就可以直接使用的对象

JDBC

  • insert操作
1
2
3
4
Connection connection=DriverManager.getConnection("","root","password");
Statement statement=connection.createStatement();
int result=statement.executeUjpdate("操作字符串");
if(result==1) sout("success");
  • select操作
1
2
3
4
Connection connection=DriverManager.getConnection("","root","password");
Statement statement=connection.createStatement();
ResultSet resultSet=statement.executeUjpdate("操作字符串");
if(resultSet.next()) sout("success");

优化JDBC代码

编写统一的工具类DBUtil.java

编写POJO传递数据

针对一个Bean写一个DAO类

CH04-开发模式和MVC

Model I

指基于JSP+JavaBean的开发模式:JSP负责Web相关的部分,包括数据展示、请求逻辑控制等;JavaBean负责业务逻辑的部分,包括数据的存取,业务的实现

JavaBean指一种用于封装数据和业务逻辑的实体类,为可复用组件:

  • 有一个public的无参构造方法
  • 一般对所有属性提供get、set方法
  • 实现序列化Serializable接口

jsp中提供标准动作:

1
2
<jsp:useBean id="" class="" scope=""/>
<jsp:setProperty name="lognUser" property="*"/>

model I 只适用于中小型Web应用的开发:

  • 用户的请求访问逻辑、数据内容与表示没有分离
  • JSP固有特征使其更适合作为数据展示和表达的技术规范

Model II

MVC模式可以分为三层:

  • 视图层View:用户界面
  • 数据层Model:程序的数据或信息
  • 控制层Controller:负责视图层和数据层的交互

三层紧密联系,但相互独立,每一层内部的变化不影响其他层

层与层之间通过接口交互,尽量做到面向接口编程

EL

提供了在JSP脚本元素范围外使用运行时表达式的功能,主要包括:

  • 基于命名空间与嵌套的属性访问
  • 对集合与操作符的访问
  • 一组隐式对象和映射到Java类中方法的可扩展函数

基本语法:${}

常用场景:表达式求值、访问作用域变量和JavaBean、访问数组与集合。

JSTL标准标签库

jsp standard tag library

jsp页面中使用jstl需要使用taglib指令:

1
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

**uri:**指定tld文件路径;**prefix:**指定标签前缀

常用标签:

1
2
3
4
5
6
7
8
9
10
<c:if+条件></c:if>

<c:foreach var="" items=""></c:foreach>

<c:choose>
<c:when test=表达式>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>