Jsp的三大指令

(1)、include

  作用:相当于把当前页面去包含页面

  语法:

<%@include file="/common/test.jsp" %>

  实例如下:创建一个主页

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'demo1.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<%@include file="/common/header.jsp" %>
This is my JSP page.网页的身体部分 <br>
</body>
</html>

 被包含的页面如下

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>
<head>
<title>JSP 'header.jsp' starting page</title>
</head> <body>
This is header JSP page. <br>
<h1>网页的头部</h1>
</body>
</html>

 这个时候浏览器会如下显示

这个时候我们去浏览其对应的demo1_jsp.java文件,发现只有demo_1.jsp页面被翻译和编译了,我们打开其文件,

 out.write("\r\n");
out.write("\r\n");
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
out.write("<html>\r\n");
out.write(" <head>\r\n");
out.write(" <base href=\"");
out.print(basePath);
out.write("\">\r\n");
out.write(" \r\n");
out.write(" <title>My JSP 'demo1.jsp' starting page</title>\r\n");
out.write(" \r\n");
out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n");
out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n");
out.write("\t<meta http-equiv=\"expires\" content=\"0\"> \r\n");
out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n");
out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n");
out.write("\t<!--\r\n");
out.write("\t<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">\r\n");
out.write("\t-->\r\n");
out.write("\r\n");
out.write(" </head>\r\n");
out.write(" \r\n");
out.write(" <body>\r\n");
out.write(" \t");
out.write("\r\n");
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
out.write("<!-- \r\n");
out.write("<html>\r\n");
out.write(" <head>\r\n");
out.write(" <title>JSP 'header.jsp' starting page</title>\r\n");
out.write(" </head>\r\n");
out.write(" \r\n");
out.write(" <body>\r\n");
out.write(" This is header JSP page. <br>\r\n");
out.write(" <h1>网页的头部</h1>\r\n");
out.write(" </body>\r\n");
out.write("</html>\r\n");
out.write(" -->\r\n");
out.write(" <h1>网页的头部</h1>");
out.write("\r\n");
out.write(" This is my JSP page.网页的身体部分 <br>\r\n");
out.write(" </body>\r\n");
out.write("</html>\r\n");

 发现被包含的页面直接翻译到了包含页面(demo1.jsp)中去了,合并成一个jsp文件一同去翻译和运行,这种包含也叫“静态包含”。

另外我们同时发现,既然合并在一起了,那么被包含页面的全局html,诸如html、body都可以直接去掉了。那么现在被包含的页面就可以写成如下的形式

<%@ page pageEncoding="UTF-8"%>
<h2>我是网页的头部,我只有一句话</h2>

 浏览器的显示如图:

(2)、page指令

作用:告诉tomcat服务器如何翻译jsp文件

常用的page指令如下:

  1.   language="java"          --告诉服务器使用什么动态语言来翻译jsp文件
  2.   import="java.util.*"     --告诉服务器java文件使用什么包, 导入包,多个包之间用逗号分割。
  3.    pageEncoding="utf-8"      --告诉服务器使用什么编码翻译jsp文件(成java文件)
  4.   contentType="text/html; charset=utf-8" 服务器发送浏览器的数据类型和内容编码

  (注意:在开发工具中,以后只需要设置pageEncoding即可解决中文乱码问题,但这只是在eclipse中起到作用,如果换成了记事本去写代码,记事本的默认代码的保存方式是GBK)

假设我们用记事本去开发jsp直接保存在tomcat的项目jsp文件下,结果和代码如下图所示

这个时候我们改改记事本的编码方式,另存为utf-8,同时访问,则结果如图(注意这个时候浏览器端的编码方式也是utf-8,浏览器自身调节的)

        

我们继续做实验,将保存的方式改为gbk(ansi),同时设置pageEncoding="gbk"

继续去访问,发现没有问题了。。(这个时候浏览器端的编码方式也是gbk,浏览器自身调节的)

经过以上的实验,就可以得出结论一下的结论,当我们在记事本中以字符的形式输入后要保存,但在硬板中都是以八个0或1的字节形式存储,这个时候我们就需要对其进行编码,(刚才的另存为),当我们保存后在tomcat去访问的时候,首先服务器就会去读取文件,这个时候我们知道打开java文件都是可以有中文的,即字符文件,从硬盘的字节到java源文件,中间经过过了一个pageEncoding设置的编码方式去翻译,然后编译过程与前面的pageEncoding方式相同去编译成字节码文件(字节),然后服务器又以contentType="text/html; charset=utf-8"的编码方式发送给浏览器,最后浏览器根据读取contentType来识别去读取响应的内容

如果去掉contentType的设置,那么contentType会参考pageEncoding的编码值,所以一般情况下只需设置pageEncoding来完成就行,如图:

5、errorPage="common/error.jsp"  指定处理错误页面的位置

示例如下:

<%@ page language="java" import="java.util.*"
pageEncoding="UTF-8" errorPage="common/error.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<% int i=100/0; %>
</body>
</html>

处理错误的页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
亲,系统发生错误,管理员正在抢救中。<br>
</body>
</html>

结果:

6、isErrorPage="false"  指定当前页面是不是错误处理页面,false,不是错误处理页面,则不能使用exception内置对象;true,是错误处理页面,可以使用exception内置对象。

示例代码:

<%@ page language="java" import="java.util.*"
pageEncoding="UTF-8" errorPage="common/errorpage.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<% int i=100/0; %>
</body>
</html>

 处理错误代码的页面

<%@ page language="java"
import="java.util.*"
pageEncoding="UTF-8"
isErrorPage="true" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
亲,系统发生错误,管理员正在抢救中。<br>
错误原因:<%=exception.getMessage() %>
</body>
</html>

  结果如图:

配置全局的错误处理页面:(一旦项目下有错误,就把所有错误页面抛到这里)但是errorpage(errorPage="common/errorpage.jsp")是比全局设置优先的。

 <!-- 全局错误配置 -->
<error-page>
<error-code>500</error-code>
<location>/common/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/common/404.html</location>
</error-page>

 就可以得到如图的效果了

6、session:  是否开启session功能。false,不能用session内置对象;true,可以使用session内置对象。

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

7、buffer:  jsp页面的缓存区大小。

  在jsp页面中的内置对象out是jspWriter的对象,该对象不像PrintWrite一样直接将数据发给客户端,而是在其中间步骤加入了一个jspWrite的缓冲区,当缓冲区满了之后才会将数据发送客户端,该缓冲区的大小就是由这个buffer指定,默认大小是8kb。

8、 isELIgnore: 是否忽略EL表达式。

Jsp学习(2)的更多相关文章

  1. JSP学习网站

    JSP学习网站 http://www.yiibai.com/jstl/ http://www.w3cschool.cc/jsp/jsp-jstl.html

  2. JSP学习笔记

    JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...

  3. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  4. JSP 学习二

    在基于昨天对JSP学习的基础上,今天我们来学习JSP的指令和JSP 对中文的处理. 一.JSP指令简介 JSP 指令是为JSP引擎而设计,它并不直接产生任何可见的输出,而只是告诉引擎如何处理JSP页面 ...

  5. java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象

     JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...

  6. (转) jsp学习笔记

    fromhttp://www.cnblogs.com/tao975/p/4445070.html 什么是JSP JSP的优势 JSP的劣势 JSP与PHP的比较 JSP工作原理 JSP的九大内置对象 ...

  7. jsp学习:jsp学习阶段性总结2019.9.21

    Jsp学习 jsp语法格式: 脚本程序:<% 代码片段 %> jsp声明:<%! declaration; [ declaration; ]+ ... %> 表达式:<% ...

  8. JSP学习(1)

    JSP学习(1) 什么是Web应用程序 可以Web访问呢的应用程序,用户只需要浏览器即可访问 静态网页与动态网页 静态网页:网页中内容固定 动态网页:内容通过程序动态显示,自动更新 Java Web应 ...

  9. JSP学习(4)

    JSP学习(4) JavaBean简介 符合某种规范的Java类.使用JavaBean的好处是解决了代码重复编写,减少代码冗余,功能区分明确,提高代码的可维护性 JavaBean设计原则 JSP动作元 ...

  10. JSP学习(5)

    JSP学习(5) 保存用户状态的两大机制 session对象 Cookie Cookie简介 是Web服务器保存在客户端的一系列文本信息 典型应用 判断注册用户是否已经登录 购物车处理 作用 对特定对 ...

随机推荐

  1. Python学习笔记——几种数据类型

    1. 列表list: Python内置的一种数据类型是列表:list,用中括号[]表示.list是一种有序的集合,可以随时添加和删除其中的元素,而且元素的类型不必相同.list可以通过下标来访问,范围 ...

  2. Django web 开发指南 no such table:

    在学习django web开发指南时,发布新博客点击save后会有error提示:no such table balabalabala... 百度了一下说重新运行manage.py syncdb 就可 ...

  3. Boost1.62+win7+VC2015编译

    下载 通过boost官方网站, 或直接在source forge下载boost_1_62_0. 可选包 Zlib library, 环境变量: ZLIB_SOURCE bzip2, 环境变量: BZI ...

  4. Educational Codeforces Round 6 C. Pearls in a Row

    Educational Codeforces Round 6 C. Pearls in a Row 题意:一个3e5范围的序列:要你分成最多数量的子序列,其中子序列必须是只有两个数相同, 其余的数只能 ...

  5. 实际中理解div布局和浮动

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. Z-Stack 软件架构分析

    转自Z-Stack 软件架构分析 Z-Stack的main函数在Zmain.c中,总体上来说,它一共做了两件工作,一个是系统初始化,即有启动代码来初始化硬件系统和软件架构需要的各个模块,另一个作用就是 ...

  7. [Mac]使用xcode命令行编译protobuf

    因为不想每次测试与画面显示无关的小功能时把cocos2dx包含进去,所以改用xcode的command line tool直接建立c++项目. 方法: 1.点击file-new-project,选择o ...

  8. ubuntu下eclipse突然崩溃,解决办法

    rm YOUR_WORKSPACE/.metadata/.plugins/org.eclipse.core.resources/.snap 抛出的一场如下: !SESSION 2013-09-30 1 ...

  9. svn 规范apk的生成命名

    第一步:新建SVNVersion.gradle  放置于build.gradle统计目录下面 /*task svnversion { description 'Get SVN revision num ...

  10. android Permission 访问权限许可

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES允 ...