JavaJsp(一)

JSP语法的学习


要学习JSP,就必须要学习它的语法,JSP的语法分为以下几部份:
1. JSP模版元素
2. JSP脚本表达式
3. JSP脚本片断
4. JSP声明
5. JSP注释
6. JSP指令
7. JSP标签
8. JSP内置对象
最后,我们还要学习如何在JSP页面查找错误。


------------------------------------------------


第一、JSP模版元素
JSP页面中的HTML内容称之为JSP模版元素。
JSP模版元素定义了网页的基本架构,即定义了页面的结构和外观。




------------------------------------------------


第二、JSP脚本表达式
JSP表达式(expression)用于将程序数据输出客户端。
语法:<%= 变量或表达式 %>
举例:当前时间:<%= new java.util.Date() %>


------------------------------------------------


第三、JSP脚本片断
JSP脚本片断(scriptlet)用于在JSP页面中编写多行java代码。
语法:
<% 多行java代码 %>
例如:
<%
  java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  out.write(format.format(new java.util.Date()));
%>
JSP脚本片断中只能出现java代码,不能出现其它模版元素,JSP引擎在翻译JSP页面中,会将JSP脚本片断中的java代码原封不动的放到Servlet的_jspService方法中。
JSP脚本片断中的java代码必须严格遵守java语法。


在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。
例如:
<%

int x = 10;

out.println(x);


%><p>这是JSP页面文本</p>


<%

int y = 20;

out.println(y);

%>
多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。如:out.println(x);


单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句。
例如:
<%

for (int i=1; i<5; i++) 

{


%>



<H1>www.itcast.cn</H1>




<%

}


%> 
演示之后看jsp源码。
------------------------------------------------


第四、JSP声明
刚才我们学习了“JSP脚本表达式”和“JSP脚本片断”,它们都是放在Servlet的_jspService方法中的。
思考一下,我们能不能使用“JSP脚本表达式”来声明一个方法?
如:
<%
public void method() {
System.out.println("method()");
}
%>
很显然是不行的,但有时候我们需要通过JSP来声明一些属于自已的方法怎么办?这时候我们可以使用“JSP声明”。


JSP声明的语法格式是:<%! java代码 %>
JSP声明的代码最终会翻译到_jspService方法的外面,也就是作为Servlet类的成员(变量和方法都可以)。
所以,JSP声明可用于定义JSP页面转换成Servlet程序的静态代码块、成员变量或成员方法。
演示:
<%!
public void method() {
System.out.println("method()");
}
%>
<%!
static {
System.out.println("staic ");
}
%>

<%!
int a = 9;
%>
<%!
static int b = 99;
%>
多个静态代码块、变量和方法可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。
JSP隐式对象的作用范围仅限于Servlet的_jspService方法中,所以在JSP声明中不能使用这些隐式对象。


------------------------------------------------


第五、JSP注释
我们可以为JSP添加注释,格式如下:
<%-- JSP注释 --%>
JSP注释的区域不会在翻译后的Servlet代码里显示,JSP注释专门用来注释java代码的。


思考:jsp和html注释有什么区别?
<%-- JSP注释--%>
<!-- html注释 -->
答:html注释是用户可见的,比如你现在点击右键,查看源代码,源文件什么的,是可以看得到html注释的。
而jsp注释是不可见的,也就是说你查看源代码是没法查看这个jsp注释的。
总得来说,html注释,是(可能是,因为很少人蛋疼地去查看源文件以获得帮助)服务于用户的。而jsp注释是服务于程序员的。


------------------------------------------------


第六、JSP指令


如何修改MyEclipse里的JSP模版?


JSP引擎是什么?我们写的JSP代码最终会被翻译成Servlet代码,而这个翻译的过程必定是由某个程序来执行的,这个程序就称为“JSP引擎”。
简单把“JSP引擎”想像成是Tomcat就行了。


JSP指令(directive)是为“JSP引擎”而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 2.0规范中共定义了三个指令:


1. page指令


2. Include指令


3. taglib指令






1. page指令
<%@ 指令 属性名="值" %>
举例:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。例如:<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.util.Date"%>也可以写作:<%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>
page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
JSP2.0规范中定义的page指令的完整语法:
<% page
[ language="java" ]
[ import="{package.class | package.*}"]
JSP引擎自动导入下面的包:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*

使用import指令可以在一条page指令中引入多个类或包,其中的每个包或类之间使用逗号分隔。
如:<%@ page import="java.util.Date, java.sql.:*, java.io.*" %>
上面语句也可以使用多条page指令来写:
<%@ page import="java.util.Date" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>


[ session="true | false" ]
控制JSP页面里的java脚本是否允许直接使用session。
假设设置为true,我们在翻译后的JSP代码可以看到:
    HttpSession session = null;
        session = pageContext.getSession();
假设设置为false,那就没有session被创建。
因为在IE6.0后每个用户对应一个session,如果用户多的话session会相应的增多,服务器的压力就会加大,所以JSP提供了session可开可关的设置。
这里要注意一点,如果没有任何配置的情况下,session在关闭浏览器30分钟后才会消失。


[ isThreadSafe="true | false" ]
实现SingleThreadModel接口,这个不推荐配置。


[ errorPage="relative_url" ]
errorPage属性用来指定当前JSP页面抛出异常后的跳转的JSP页面位置。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="/error.jsp" %>
<%
int a = 10 / 0; // 此代码报错后将自动跳转到error.jsp页面
%>
errorPage="/..." 这里的/表示Web工程的根目录。建议养成习惯,写errorPage的时候先写/


可以在web.xml文件中使用<error-page>元素为整个web应用程序设置错误处理页面,其中的<exception-type>子元素指定异常类的完全限定名,<location>元素指定以“/”开头的错误处理页面路径。
如果1.jsp 2.jsp 3.jsp...页面里都有异常,那为每个JSP页面都配置errorPage是很麻烦的,现在提供一种方式,在web.xml文件里面配置“全局异常”,这样就不需要在每个JSP页面里都配置了。
web.xml
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>


[ isErrorPage="true | false" ]
设置此jsp网页是否为错误处理页面。默认值为”false”。当设置为”true”时,jsp页面将可存取隐含的exception对象,并通过该对象取得从发生错误之网页所传出的错误信息。取得错误信息的语法如下:<% =exception.getMessage()%>


[ contentType ]
设置jsp网页输出时数据时,所使用的字符压缩方式,以及所使用的字符集,当编写中文网页时,设置如下:
<%@page contentType=”text/html;charset=Gb2312”%>
此属性的默认值为”text/html;charset=ISO-8859-1”。
[ buffer ]
设置jsp网页的缓冲区大小,默认为”8k”,如果设置为”none”,则表示不使用缓冲,所有的响应输出都将被PrintWriter直接写到ServletResponse中。




下面讲一个重点内容:使用page指令解决JSP中文乱码问题
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
pageEncoding与contentType属性的设置问题




------------------------------------------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值