4-2 JSP

1 JSP指令

JSP指令标签

指令

属性

说明

<%@ page... %>

定义页面的依赖属性,比如脚本语言、error页面、缓存需求等

language

指定当前JSP页面使用的脚本语言,默认Java

contentType

指定当前JSP页面的MIME类型(文件类型)和字符编码

pageEncoding

指定当前JSP页面的编码格式

errorPage

指定当前JSP页面发生异常时需要转向的错误处理页面

session

指定JSP页面是否使用session缓存

import

引入要使用的java类库

<%@ include... %>

引入其他文件,包括JSP文件、html文件或文本文件;

包含的文件属于JSP页面的一部分,会被同时编译执行;

file

文件相对路径

<%@ taglib... %>

引入标签库的定义,可以是自定义标签

2 JSP内置对象

JSP内置对象是由JSP页面的容器(tomcat)加载,不需要显式的声明就可以直接在JSP页面中使用的对象。

JSP一共有9个内置对象:

对象

描述

request

HttpServletRequest类的实例对象,用于接收服务端发送的请求数据,并修改或添加参数,返回给服务端

response

HttpServletResponse类的实例对象,返回给客户端的响应

out

PrintWriter类的实例对象,用于把数据输出到网页上

session

HttpSession类的实例对象,也叫会话对象,存储用户的会话状态(临时信息)

application

ServletContext类的实例对象,应用上下文对象,作用于整个应用程序

config

ServletConfig类的实例对象,JSP页面的配置信息对象

pageContext

PageContext类的实例对象,提供对当前JSP页面所有对象以及命名空间的访问

page

表示JSP页面的当前实例,类似于java中的this关键字

excepiton

Exception类的实例对象,异常对象,用于处理JSP页面中的异常

2.1 request

接收服务端发送的请求数据,同时也可以添加或修改request中的参数,并回传给服务端

示例:

<% UserInfo user = (UserInfo)request.getAttribute("user"); %>

2.1 out

输出到页面

示例:

<% String b = "abc";%> 

<% out.println(b); %>

等价于

<%=b %>

2.3 session会话

一个session就是客户端和服务器间的一系列通讯。服务器有能力分辨出不同的客户端。一个session的建立是从一个客户端向服务器发第一个请求开始,以用户显式结束(如关闭浏览器)或session超时为结束。

优点:

  1. 缓存会话信息,减轻数据库的压力;
  2. session中的数据存放在服务器内存中,相比于数据库具有更快的查询速率;

缺点:

不是线程安全的,应该避免多个线程共享同一个Session实例;

示例:

服务端Servlet

//创建session会话

HttpSession session = req.getSession();

session.setMaxInactiveInterval(5);//设置session失效时间,单位秒s

//向session中添加信息

session.setAttribute("user_name", "张三");

session.setAttribute("addr", "中国,山东,青岛");

req.getRequestDispatcher("/WEB-INF/page/session.jsp").forward(req, res);

客户端JSP

<% 

//获取session信息

String userName = (String)session.getAttribute("user_name");

String addr = (String)session.getAttribute("addr");

%>

3 JavaBean组件

3.1 组件定义

组件就是一个可以重复使用的软件模块。

JavaBean就是一种组件技术,简单来说,创建一个JavaBean组件就是创建一个Java类

JavaBean需要满足以下三个要求:

  1. 是一个公有类,且含有公有的无参构造方法;
  2. 属性私有;
  3. 属性具有公有的set和get方法;

3.2 JavaBean示例

public class UserInfo {

//私有化属性

private String userName;

private int age;

//公有的无参构造方法

public UserInfo() {

}

//公有的set和get方法

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

4 JSP标准动作标签

JSP标准动作,在JSP中可以使用类似XML的语法格式的一些特殊标记,用来控制行为。

JSP规范定义了一系列标准动作,常用的包括:

<jsp:useBean />

查找或实例化一个JavaBean

<jsp:setProperty />

设置JavaBean的属性

<jsp:getProperty />

输出JavaBean的属性值

<jsp:include />

用于在页面加载时引入其他文件(jsp页面)

<jsp:forward />

请求转发,从一个JSP页面向另一个页面传递一个包含用户请求的request对象

4.1 <jsp:include />

该动作标签用于把指定文件引入到正在生成的页面中

属性:

page

被引入的页面文件的相对URL地址

flush

定义在包含引入文件前是否刷新缓存区,布尔值

示例:

<jsp:include page="../page/kid.jsp" flush="true" />

被引入页面kid.jsp文件内容如下:

<%@ page language="java" contentType="text/html; charset=utf-8" 

pageEncoding="utf-8" %> 

<html>

<body>

<p>日期:<%=(new java.util.Date()).toLocaleString() %></p>

</body>

</html>

4.2 <jsp:useBean />

用于加载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它可以发挥Java组件复用的优势。

属性:

id

javaBean对象的唯一标识

class

javaBean所在的包路径

scope

指定javaBean的作用范围(四大作用域),可以使用四个值:

page:此javaBean只能应用于当前页

request:此javaBean只能应用于当前的请求

session:此javaBean在本次session内有效

application:此javaBean能应用于整个应用程序内

type

指定javaBean对象的类型:

1 如果作用域(scope)内确定存在id相同的javaBean对象,则不产生新的对象,此时class属性可以省略;

2 如果作用域(scope)内不存在id相同的javaBean对象,则根据class属性指定的路径创建新的对象;

示例1:

<jsp:useBean id="user" class="beans.UserInfo" scope="page"/>

示例2:

a.jsp

<!-- 查找或创建一个javaBean对象 -->

<jsp:useBean id="user" class="beans.UserInfo" scope="session"/>

<jsp:setProperty name="user" property="userName" value="李春"/>

<jsp:getProperty name="user" property="userName" />

b.jsp

<!--

查找或创建一个javaBean对象

通过是否能取到值,判断是已有对象还是新建对象

-->

<jsp:useBean id="user" type="beans.UserInfo" class="beans.UserInfo" scope="session"/>

<jsp:getProperty name="user" property="userName" />

4.3 <jsp:setProperty />

用于设置已经实例化的Bean对象的属性。

属性:

name

指定JavaBean的对象名,与<jsp:useBean>动作标签中的id属性对应

property

指定JavaBean中需要赋值的属性名

value

指定属性值

param

指定request请求对象中的参数名,并将改参数的值赋值给对应的property;

注意:param不能与value属性共存

<jsp:setProperty>有两种使用方式:

方式1:

<jsp:useBean id="user" class="beans.UserInfo" />

<jsp:setProperty name="user" property="userName" value="jack"/>

<jsp:setProperty name="user" property="age" value="12"/>

这种方式,不管jsp:userBean是找到了一个现有的Bean对象,还是新创建了一个Bean对象,jsp:setProperty都会执行。

方式2:

<jsp:useBean id="user" class="beans.UserInfo" >

<jsp:setProperty name="user" property="userName" value="jack"/>

<jsp:setProperty name="user" property="age" value="12"/>

</jsp:useBean>

这种方式,jsp:setProperty只有在新建Bean对象时才会执行,如果是使用现有实例则不执行jsp:setProperty,即不执行赋值操作。

4.4 <jsp:getProperty />

获取指定Bean对象的属性的值,转换成字符串并输出。

属性:

name

指定JavaBean的对象名,与<jsp:useBean>动作标签中的id属性对应

property

指定JavaBean中的属性名

示例:

<jsp:useBean id="user" class="beans.UserInfo" />

<jsp:getProperty name="user" property="userName" />

4.3 <jsp:forward />

将请求转发到另一个页面,该动作标签只有一个属性page,用于指定转发目的页面的相对路径。

示例:

<jsp:forward page="../page/show.jsp" />

5 JSTL标签库

5.1 引入标签库

JSTL标签库需要导入两个支持jar包jstl.jarstandard.jar

<!-- JSTL标签库是一个JSP标签的集合,封装了许多jsp应用程序通用的核心功能-->

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

<!-- JSTL格式化标签 -->

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>

5.2 常用标签

<c:out value="输出标签,类似out内置对象" />

<!--

c:set 声明变量标签

var 变量名

value 变量值

scope 作用域page request session application

-->

<c:set var="money" value="200" scope="request" />

<c:if test="${money > 200}">

<p>满足了</p>

</c:if>

<!-- 类似于java中的switch -->

<c:choose>

    <c:when test="${money > 200}">

        <p>满足了</p>

    </c:when>

    <c:when test="${money < 200}">

        <p style="color:red;">还不够!!!</p>

    </c:when>

    <c:otherwise>

     <p>还行吧!!!</p>

    </c:otherwise>

</c:choose>

<!--

items 被遍历的数据集

var 对应每一条被遍历的数据

类似于java的for(var : items){}

 -->

<c:forEach items="${list}" var="str">

<p>${str}</p>

</c:forEach>

<!-- 格式化数字标签 -->

<f:formatNumber value="12.123" maxFractionDigits="2"></f:formatNumber>

<f:formatNumber value="${5 / 3}" maxFractionDigits="2"></f:formatNumber>

<c:set var="now" value="<%=new java.util.Date()%>" />

<!-- 格式化日期标签 -->

<f:formatDate value="${now}"  pattern="yyyy-MM-dd HH:mm:ss:SSS"/>

5.2 EL表达式

<c:set var="money" value="200" scope="request" />

<!-- EL表达式:可以访问JavaBeans和jsp内置对象 -->

金额:${money}

//访问request中的list集合

集合:${list[0] }

//访问request对象中的user对象

用户:${user.userName }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值