JSP指令

-------------------------------------JSP指令-------------------------------------

JSP指令

1 什么是JSP指令

JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的。

JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令了。

指令在“真身”中不存在,生成“真身”时需要使用指令!

Tomcat编译系统会根据JSP的指令信息来编译JSP,生成Java文件。

在生成的Java文件中,不存在指令信息!

2 page指令的pageEncoding和contentType (*****)

pageEncoding指定的是当前JSP页面的编码!Tomcat编译系统会使用这个编码把JSP编译成Java文件。所以这个编译只需要与真实的页面编译一致即可!

contentType指定的是响应给我客户端时使用的编码,即对应response.setConteType()方法的参数值! Tomcat都会把响应正文转换成UTF-8编译,然后发送给我客户端,并且会在响应头中设置Content-Type头信息为text/html;charset=utf-8,这样浏览器就知道使用服务器发送过来的正文使用了什么编码。

无论是page指令的pageEncoding还是contentType,它们的默认值都是ISO-8859-1,我们知道ISO-8859-1是无法显示中文的,所以JSP页面中存在中文的话,一定要设置这两个属性。

其实pageEncoding和contentType这两个属性的关系很暧昧:

  1. 当设置了pageEncoding,而没设置contentType时:表示contentType的取值为pageEncoding的值;
  2. 当设置了contentType,而没设置pageEncoding时:表示pageEncoding的取值与contentType的值;

 

也就是说,当pageEncoding和contentType只出现一个时,那么另一个的值与出现的值相同。如果两个都不出现,那么两个属性的值都是ISO-8859-1。

<%@ 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>

 

</body>

</html>

 

处理乱码的方案:

  1. 把JSP页面的编码设置为UTF-8;
  2. 把contentType和pageEncoding都设置为UTF-8。

Eclipse中设置jsp的默认编码:

3 page指令的import属性

import是page指令中一个很特别的属性!

import属性值对应“真身”中的import语句。

import属性值可以使逗号:<%@page import=”java.net.*,java.util.*,java.sql.*”%>

import属性是唯一可以重复出现的属性:

 

但是,我们一般会使用多个page指令来导入多个包:

<%@ page import=”java.util.*”%>

<%@ page import=”java.net.*”%>

<%@ page import=”java.text.*”%>

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

    pageEncoding="UTF-8"%>

<%--单个引入 <%@page import="java.util.*, com.rl.model.*" %> --%>

<%@page import="java.util.*" %>

<%@page import="com.rl.model.*" %>

<!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>

       <%

              List<Person> listPerson = new ArrayList<Person>();

                     for(int i = 0; i < 10; i++ ){

                     Person p = new Person();

                     p.setName("李昆鹏");

                     p.setAge(20);

                     listPerson.add(p);

              }

        %>

        

        <table border="1xp";>

             <tr>

                    <th>姓名</th>

                    <th>年龄</th>

             </tr>

             <% for(Person person : listPerson){ %>

             <tr>

                    <td><%=person.getName() %></td>

                    <td><%=person.getAge() %></td>

             </tr>

             <% } %>

        </table>

</body>

</html>

 

4 page指令的errorPage和isErrorPage,以及JavaWeb异常处理

我们知道,在一个JSP页面出错后,Tomcat会响应给我用户错误信息!如果你不希望Tomcat给用户输出错误信息,那么可以使用page指令的errorPage来指定错误页!例如:

<%@page errorPage=”xxx.jsp”%>

这时,在当前JSP页面出现错误时,会转发到xxx.jsp页面。

       pageError的路径,由于是服务器端的跳转,所以绝对路径不需要加项目名,直接指定项目名称后面的路径即可

a.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ page  errorPage="b.jsp" %>

    <%

    if(true)

        throw new Exception("哈哈~");

    %>

 

b.jsp

<%@ page pageEncoding="UTF-8"%>

<html>

  <body>

   <h1>出错啦!</h1>

  </body>

</html>

 

  如果希望在b.jsp页面中获得异常对象,那么就需要把b.jsp标记为错误页!这需要设置page指令的isErrorPage属性为true。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ page  isErrorPage="true" %>

<html>

  <body>

   <h1>出错啦!</h1>

    <%=exception.getMessage() %>

  </body>

</html>

 

IE会在状态码为500时,并且响应正文的长度小于等于512B时不给予显示!而是显示“网站无法显示该页面”字样。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ page  isErrorPage="true" %>

<%

    for (int i = 0; i < 506; i++) {

       out.print("a");

    }

%>

 

 

还可以在web.xml文件中配置错误页面,在出现某种错误时跳转到对应的页面处理。

  <error-page>

    <error-code>404</error-code>

    <location>/error404.jsp</location>

  </error-page>

  <error-page>

    <error-code>500</error-code>

    <location>/error500.jsp</location>

  </error-page>

 

 

 

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

    pageEncoding="UTF-8"%>

<%@page errorPage="error.jsp" %>

<!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>

       <%--如果web.xml中和头信息中都配置了错误页面,会优先走头信息的错误页面 <%=1/0 %> --%>

       <a href="/jsp_demo2/xx.jsp">点击跳转</a>

</body>

</html>

 

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

    pageEncoding="UTF-8"%>

<%-- isErrorPage默认是false代表不是错误页面 --%>

<%@page isErrorPage="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>

       <h1>报错了</h1>

       <%-- 只有错误页面才能捕捉到异常信息,isErrorPage="true" --%>

       <h1><%=exception.getMessage() %></h1>

</body>

</html>

 

<%@ 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>

       <h1>页面找不到</h1>

</body>

</html>

 

当出现404时,会跳转到error404.jsp页面;

当出现500时,会跳转到error500.jsp页面。

还可以配置更多,更细致的异常类型。

 

5 page指令的isELIgnored

后面我们会讲解EL表达式语言,page指令的isElIgnored属性表示当前JSP页面是否忽略EL表达式,默认值为false,表示不忽略(即支持)。

EL-ignored全称expression languger-ignored

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

    pageEncoding="UTF-8"%>

<%-- isELIgnored代表是否被忽略,false代表可以使用EL表达式,如果是true EL表达式就失效,默认是false --%>

<%@page isELIgnored="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>

       <% request.setAttribute("name", "李昆鹏"); %>

       <%-- 使用EL表达式取出name的值,如果无法解析,一般是isELIgnored值设为true,我们将它改成false就可以了 --%>

       <h1>${name}</h1>

</body>

</html>

 

4 include指令(*****)

a.jsp,通常这个扩展名表示被包含的页面的扩展名!

include指令表示静态包含!

include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。

静态包含:当hel.jsp页面包含了lo.jsp页面后,在编译hel.jsp页面时,需要把hel.jsp和lo.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)。

在上面代码中,lo.jsp中没有定义username变量,所以lo.jsp不能处理请求,只有hel.jsp才能处理请求!当访问hel.jsp时,hel.jsp会包含lo.jsp,所以两个会合并成一个文件后再编译成Java文件。在合并之后,因为在hel.jsp中定义了username变量,所以lo.jsp中也就不会出现错误了。

Hel.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>

<script type="text/javascript" src="js/jquery.js"></script>

</head>

<body>

       <%

          String name = "李昆鹏";

          //获得项目名路径

          String apath = request.getContextPath();

       %>

</body>

</html>

 

Lo.jsp

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

    pageEncoding="UTF-8"%>

<%-- 使用include指令来使用hel.jsp --%>

<%@ include file="/hel.jsp" %>

<!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>

       <%-- 输出hel.jsp中的name --%>

       <%=name %>

       <%=apath %>

</body>

</html>

 

6 taglib指令

在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如:

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

其中prefix表示标签的前缀,这个名称可以随便起。uri是由第三方标签库定义的,所以你需要知道第三方定义的uri。

在下面我们讲解JSTL标签库时会说明taglib指令的使用方式。

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

    pageEncoding="UTF-8"%>

<%-- 引入标签 --%>>

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

<!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>

<script type="text/javascript" src="js/jquery.js"></script>

</head>

<body>

       <c:out value="李昆鹏"></c:out>

</body>

</html>

 

  • 17
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值