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. c# winform 隐藏tabcontrol标签

    Apperarance 属性:Faltbuttons SizeMode属性:Fixed 各个TabPage的Text :空 ItemSize : Width=0;Height=1;

  2. 又一家自适应学习平台上线,大讲台主攻IT在线教育

    自适应学习技术自2015年以内,越来越受到在线教育公司的关注和重视,极客学院创始人靳岩7月初在接受媒体采访时曾提到,百万用户只是极客学院的第一步,下一步的目标是自适应学习.靳岩认为,自适应学习代表未来 ...

  3. STM32固件库

    一.STM32固件库开发和传统寄存器开发方式的区别 二.CMSIS标准 CMSIS标准--Cortex Microcontroller Software Interface Standard,是ARM ...

  4. AppDelegate解析

    当我们创建一个iOS项目,默认会有main.m类,这是一个程序的主入口.main.m方法体如下: #import <UIKit/UIKit.h> #import "AppDele ...

  5. iOS Copy 和 MutableCopy的区别 深浅拷贝的区别-供参考

    概述 对于系统的非容器类对象,对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝).如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的. 对于 ...

  6. bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link

    2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 255  Solved: 77[Submit][Status] ...

  7. Codeforces Round #197 (Div. 2) : A

    水题一个: 直接贴代码: #include<cstdio> #include<algorithm> #include<cstring> using namespac ...

  8. 最简单的CRC32源码---逐BIT法

    CRC其实也就那么回事,却在网上被传得神乎其神.单纯从使用角度来说,只需要搞明白模二除法,再理解一些偷懒优化的技巧,就能写出自己的CRC校验程序. 下面的代码完全是模拟手算过程的,效率是最低的,发出来 ...

  9. Jquery 获取表单值如input,select等方法

    1 if($("input[name=item][value='val']").attr('checked')==true) //判断是否已经打勾 name即控件name属性,va ...

  10. 总结@ 在C# 中的用法

    一 字符串中的用法 1.地球人都知道 C# 中 字符串常量可以以 @ 开头声名,这样的优点是转义序列“不”被处理,按“原样”输出,即我们不需要对转义字符加上 \ (反斜扛),就可以轻松coding.如 ...