02.JSP常见标签

JSP常见标签

JSP指令

指令格式

使用<%@ %>标记

常见指令

  • page指令用来定义JSP页面的相关属性。

    <%@ page
    language="java"
    contentType="text/html;
    charset=UTF-8"
    pageEncoding="UTF-8"
    extends="entendServletClassName"
    import="importList"
    session="true|false"
    autoFlush="true|false"
    isThreadSafe="true|false"
    errorPage="errorURI"
    isErrorPage="true|false"
    isELIgnored="true|false"
    trimDirectiveWhitespaces="true"
    %>
    • language:当前页面使用的脚本语言
    • import:导入包,可以导入多个包,包之间使用逗号分隔,最后一个包不要使用分号结束,尽量不要导入一个包下的所有类
    • session:当前页面是否支持回话,默认为true
    • autoFlush:是否自动刷新缓存
    • isThreadSafe:是否线程安全
    • erroePage:设置错误页面
    • isErrorPage:当前的页面是否可以作为错误页面
    • isELIgnore:当前页面是否忽略EL表达式
    • trimDirectiveWhitespaces:是否去除指令两端的空白格
  • include指令用于在JSP中静态包含一个文件(包含的内容和JSP页面翻译成一个Java文件)

    <%@ include file="includeURL" %>
  • taglib指令在JSP页面中使用标签时使用

    <%@ taglib prefix="prefix_name" uri="tag_uri" tagdir="tag_dir" %>

示例

注释示例(index.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
  import="java.util.Date"   %>
<%--导入标签库,需要先下载两个JAR包 --%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP简介</title>
</head>
<body>

    <!-- HTML注释 -->
    <%--JSP注释 --%>

    <%
        int age=8;
    %>
    年龄:<%=age%><br/>

    <%--EL表达式输出,既可以使用单引号也可以使用双引号 --%>
    ${"Hello EL"}<br/>

    <%--页面包含,既可以是HTML也可以是JSP页面--%>
    <jsp:include page="include.jsp"></jsp:include>

    <!-- 也可以先导入java.util.*包 ,从而直接使用Date类-->
    <f:formatDate value="<%=new java.util.Date() %>" pattern="yyyy-MM-dd HH:mm:ss" /><br/>

    <!-- 包含指令 -->
    <%@ include file="include.jsp" %>
</body>
</html>

被包含的文件(include.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <strong>这是一个被包含的页面</strong><br/>
</body>
</html>

出错时出现的页面(error.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isErrorPage="true"
    trimDirectiveWhitespaces="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>错误页面</title>
</head>
<body>
    <h3>这是一个 错误页面,仅当出现错误时出现</h3>
</body>
</html>

出错测试(errorPageTest.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="java.util.Date, java.util.ArrayList, java.util.List"
    errorPage="error.jsp"
    trimDirectiveWhitespaces="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%=new Date() %>
    <% 
    String line=null;
    %>
    <br/>
    <!-- 空指针异常错误 -->
    <%=line.toString() %>
</body>
</html>

JSP脚本

脚本(Scripting ELements)

  • 声明(类似在Java类中定义字段,可以定义方法)(注意感叹号和分号)

    <%!int age=22;%>
  • 小脚本(可以定义变量,但是不能定义方法)

    <%for (int i=0; i<age; i++)%>
        <li><%=i+1%></li>
    <%}%>
  • 表达式

    <%=age%>

代码示例

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

<%!
    int count=5;
    int add(int a, int b){
        return a+b;     
    }
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP脚本</title>
</head>
<body>

    <%
        int result=add(2, 8);
    %>
    count: <%=count%>
    <br/>
    result: <%=result %>

    循环:
    <%for (int i=0; i<count; i++){%>
            <br/>i: <%=i%>
    <%}%>

</body>
</html>

JSP隐式对象

隐式对象

  • 在JSP翻译成Servlet时,在_JSPServlet方法中有几个对象即为隐式对象。

  • 隐式对象不能在声明中使用。

名称类型
outjavax.servlet.jsp.JspWriter
configjavax.servlet.ServletConfig
exceptionjava.lang.Throwable
responsejavax.servlet.http.HttpServletResponse
pagejava.lang.Object
pageContextjavax.servlet.jsp.PageContext
requestjavax.servlet.http.HttpServletRequest
sessionjavax.servlet.http.session
applicationjavax.servlet.ServletContext

隐式对象的说明

  • out

    • 继承至 java.io.Writer,可以通过page指令制定其缓冲区的大小
    • 方法:clear, clearBuffer, close, flush, getBufferSize, getRemaining, isAutoFlush
  • config

    • 获取JSP初始化数据(在web.xml使用Serlvet标签对JSP页面进行配置)
  • exception

    • 对JSP页面产生的异常进行处理(只有在错误页面中才能使用——isErrorPage=”true”)
  • response(和Servlet中使用方法一样)

  • page

    • 当前JSP运行后的实例,很少直接使用

隐式对象的说明(作用域对象)

  • pageContext

    • 提供获取其他隐式对象的方法(getRequest,getOut等)
    • 作用域设置为page时,数据保存在pageContext中(SetAttribute),此时设置的数据只能在本页面获取,也也随着本页面而生,随着本页面而逝
  • request

    • 使用同Servlet
    • 作用域设为request时,数据保存在request中
  • session

    • 使用同Servlet
    • 作用域设为session时,数据保存在session中
  • application(本质就是ServletContext)

    • 作用域设为application时,数据保存在application中(整个运用共享)

示例

配置文件(web.xml)

  <servlet>
    <servlet-name>ImplicitObjects</servlet-name>
    <jsp-file>/ImplicitTest/implicitObjects.jsp</jsp-file>
    <init-param>
        <param-name>test</param-name>
        <param-value>JSP Config</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>ImplicitObjects</servlet-name>
    <url-pattern>/implicitObjects</url-pattern>
  </servlet-mapping>

设置数据(implicitObjects.jsp)

<title>JSP隐式对象</title>
</head>
<body>
    <!-- 获取web.xml配置的初始化的值 -->
    web.xml配置数据:<%= config.getInitParameter("test")%>
    <%
        String cfg=config.getInitParameter("test");
        pageContext.setAttribute("test", cfg);
        application.setAttribute("test", cfg);
    %>
</body>

获取数据(getInfo.jsp)

<title>获取在前一个文件夹下的配置数据</title>
</head>
<body>

    <!-- pageContext获取值为null -->
    pageContext: <%=pageContext.getAttribute("test") %>
    <br/>
    application: <%=application.getAttribute("test") %>

</body>
</html>

JSP动作

格式:

<jsp:action_name [attr="value"]>...</jsp:action_name>

JSP常用动作

  • include

    • 格式
    <jsp:include page="urlSpec" flush="true|false">
        [<jsp:param name="param_name" value="param_value"/>]*
    </jsp:include>
    • include指令与动作比较
    语法相对路径发生时间
    <%@ include file="url"%>当前文件翻译(转换)
    <jsp:include page="url">当前页面请求处理

    实际上,使用包含指令,就相当于把两个文件合成一个文件,只会生成一个java源文件,并且在包含源文件声明的变量,在被包含文件中也可以访问,而指令动作则不能。

  • forward

    • 格式
    <jsp:forward page="urlSpec" flush="true|false">
        [<jsp:param name="param_name" value="param_value"/>]*
    </jsp:forward>

include是将包含的页面包含到当前页面里来,是由当前包含的页面进行相应的;而forward则是由forward指定的页面进行相应的。例如,在forward之后写的代码并不会响应到页面上。

  • param

    • 格式
    <jsp:param name="name" value="value" />
  • useBean动作

    • javaBean

      • 是一个public的Java类
      • 必须包含一个默认无参的构造方法
      • 属性名称第二个字母不能大写(要有getter方法、setter方法)
    • useBean

    创建一个由id代表的class指定的类的示例并保存至scope指定的作用域(page, request, response, application)

    <jsp:useBean class="com.li.bean.User" id="user" scope="page" />
    • setProperty

    配合useBean使用request对象获取的用户数据为属性赋值(name为useBean的id,设置已经实例化的Bean对象的属性)

    <jsp:setProperty name="user" property="*" />
    <jsp:setProperty name="user" param="name" property="pname" />

    param 是可选的。它指定用哪个请求参数(例如表单的元素)作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。当然,如果表单的元素的名称(这里通过param来指定)和Bean的属性名称是一样的,将会直接填充,星号就是这个意思。

    • getProperty

    jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。语法格式如下:

    <jsp:getProperty name="user" property="pname" />
JavaBean使用示例

一个简单的JavaBean(User.java)

package com.li.entity;

public class User {
    private String name;
    private String password;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }


}

一个用户用户登录的表单(login.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</title>
</head>
<body>

    <form action="doLogin.jsp" method="post">
        <fieldset>
            <legend>用户登录</legend>
            <p>用户名:<input name="name" /></p>
            <p>密 码:<input type="password" name="pwd" /></p>
            <p>
            <input type="submit" value="登录">
            <input type="reset" value="重置">
            </p>
        </fieldset>
    </form>

</body>
</html>

一个用于获取表单元素并封装成JavaBean的JSP页面(doLogin.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="com.li.entity.User"%>

<%--主要用来获取表单信息,并封装成一个java示例,不需要HTML页面框架 --%>

<%--使用一般的方式 --%>
<% 
/*
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("name");
String password=request.getParameter("pwd");
User user=new User();
user.setName(name);
user.setPassword(password);
request.setAttribute("user", user);
*/
%>

<%-- 使用userBean,并指定作用域范围为requset,以便通过request来获取 --%>
<jsp:useBean id="user" class="com.li.entity.User" scope="request">
    <jsp:setProperty name="user" property="*" />
    <jsp:setProperty name="user" param="pwd" property="password" />
</jsp:useBean>

<%--由welcome.jsp页面来响应 --%>
<jsp:forward page="welcome.jsp"></jsp:forward>

显示页面(welcome.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="com.li.entity.User"
%>

<%
//需要进行强制转换
User user=(User)request.getAttribute("user");
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎<%=user.getName() %></title>
</head>
<body>
    <strong>欢迎<%=user.getName() %></strong>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值