Jsp学习(2)
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指令如下:
- language="java" --告诉服务器使用什么动态语言来翻译jsp文件
- import="java.util.*" --告诉服务器java文件使用什么包, 导入包,多个包之间用逗号分割。
- pageEncoding="utf-8" --告诉服务器使用什么编码翻译jsp文件(成java文件)
- 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)的更多相关文章
- JSP学习网站
JSP学习网站 http://www.yiibai.com/jstl/ http://www.w3cschool.cc/jsp/jsp-jstl.html
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- JSP 学习二
在基于昨天对JSP学习的基础上,今天我们来学习JSP的指令和JSP 对中文的处理. 一.JSP指令简介 JSP 指令是为JSP引擎而设计,它并不直接产生任何可见的输出,而只是告诉引擎如何处理JSP页面 ...
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
- (转) jsp学习笔记
fromhttp://www.cnblogs.com/tao975/p/4445070.html 什么是JSP JSP的优势 JSP的劣势 JSP与PHP的比较 JSP工作原理 JSP的九大内置对象 ...
- jsp学习:jsp学习阶段性总结2019.9.21
Jsp学习 jsp语法格式: 脚本程序:<% 代码片段 %> jsp声明:<%! declaration; [ declaration; ]+ ... %> 表达式:<% ...
- JSP学习(1)
JSP学习(1) 什么是Web应用程序 可以Web访问呢的应用程序,用户只需要浏览器即可访问 静态网页与动态网页 静态网页:网页中内容固定 动态网页:内容通过程序动态显示,自动更新 Java Web应 ...
- JSP学习(4)
JSP学习(4) JavaBean简介 符合某种规范的Java类.使用JavaBean的好处是解决了代码重复编写,减少代码冗余,功能区分明确,提高代码的可维护性 JavaBean设计原则 JSP动作元 ...
- JSP学习(5)
JSP学习(5) 保存用户状态的两大机制 session对象 Cookie Cookie简介 是Web服务器保存在客户端的一系列文本信息 典型应用 判断注册用户是否已经登录 购物车处理 作用 对特定对 ...
随机推荐
- SpringMVC Maven创建项目
一.配置Maven环境: 1.去官网下载好Maven,并解压: 2.添加环境变量: ①添加环境变量,如下: ②把maven的bin目录添加到环境变量path下面,如下(我系统是win10,win7编辑 ...
- Sprint5
进展:今天开始进行了登录界面的编写及实现. 燃尽图: 工作照:
- Python isinstance判断对象类型
在Python中只需要使用内置的函数isinstance,使用起来非常简单,比如下面的例子: class objA: pass A = objA() B = 'a','v' C = 'a string ...
- python多重继承:
除了从一个父类继承外,Python允许从多个父类继承,称为多重继承. 多重继承的继承链就不是一棵树了,它像这样: class A(object): def __init__(self, a): pri ...
- 搭建Eclipse C/C++开发环境
搭建eclipse C/C++开发环境: 1.下载并安装Eclipse for C++:http://www.eclipse.org.最新版是基于Eclipse 3.5 galileo,文件名 ...
- INFORMATION_SCHEMA.INNODB_LOCKS
INNODB_LOCKS Table: INNODB_LOCKS 表 包含信息关于每个锁 一个InnoDB 事务已经请求 但是没有获得锁, 每个lock 一个事务持有是堵塞另外一个事务 centos6 ...
- mybatis源码分析(2)——事务概述
这篇文章主要对mybatis中的事务做一简单的分析,帮助读者理清一些概念. 先来看看在JAVA事务的相关技术,在JAVA中有两类事务,JDBC事务和JTA事务,如果是JDBC类型的事务,则是由Conn ...
- 读完了简明Python教程(a bite of Python)
因为学过C/C++,简明教程里很多共通的地方一看就明白. 明天做书最后的练习. <--! 代码占位 -->
- asp.net Post Get提交数据转Model实例
转自:http://blog.csdn.net/daodaowolf/article/details/8990694 此功能是将客户端HTTP协议POST GET方式提交的数据转换为某个Model实例 ...
- Xamarin.Android 4.10.01068 & Xamarin.iOS 1.8.361
Xamarin.Android 4.10.01068 & Xamarin.iOS 1.8.361 NEW support for Visual Studio 2013 & Portab ...