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. ySQL for mac使用记录

    一.登录 打开终端,输入/usr/local/mysql/bin/mysql -u root -p 初次进入mysql,密码为空.当出现mysql>提示符时,表示你已经进入mysql中.键入ex ...

  2. xcode升级后, 插件失效修复

    1. 首先查看 Xcode 的 UUID,在终端执行 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilit ...

  3. [置顶] Android Journal

    ==================================================================================================== ...

  4. 第 5 章 工厂方法模式【Factory Method Pattern】

    以下内容出自:<<24种设计模式介绍与6大设计原则>> 女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了.这个故事是说 ...

  5. python之--输入输出

    python之输出 用print加上字符串,就可以向屏幕上输出指定的文字.用代码实现如下: >>> print "i love baby!" i love bab ...

  6. BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排

    Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...

  7. 配置Tomcat JNDI数据源

    原文地址:http://my.oschina.net/xiaomaoandhong/blog/74584 先记录在此,按照博文未配置成功

  8. Android调用MediaScanner进行新产生的媒体文件扫描

    有时候,我们拍了一张图片或录制了一段视频,图库应用默认没有将这些新产生的文件识别出来所以打开图库或视频播放器发现没有找到这些文件,需要调用MediaScanner扫描一下才会出来.从FFMPEG中找了 ...

  9. 【HDOJ】2955 Robberies

    01背包.将最大金额作为容量v.概率做乘法. #include <stdio.h> #include <string.h> #define mymax(a, b) (a> ...

  10. WCF - net.pipe vs. net.tcp vs. http Bindings

    WCF - net.pipe vs. net.tcp vs. http Bindings 问题: I'm new to WCF and would like to know the differenc ...