1.1 jsp注释
JSP中支持两种注释,一种是显式注释,客户端是允许看见的,另外一种是隐式注释,客户端是无法看见的;
显示注释的内容会发送到客户端;隐式注释的内容不会发到客户端;
content.jsp :
<!-- 这个注释客户端就可以看见 -->
<!-- JSP中的注释,客户端可以看见 -->
<%
// Java中提供的单行注释,客户端无法看见
/*
Java中提供的多行注释,客户端无法看见
*/
%>
<%-- 也看不见 --%>
1.2 Scriptlet
在JSP中最重要的部分就是Scriptlet(脚本小程序),所有嵌入在HTML代码中的Java程序都必须使用Scriplet标记出来; 在JSP中一共有三种Scritplet代码: 第一种:<%%>:在此Scriptlet中可以定义局部变量、编写语句 第二种:<%!%>:在此Scritplet中,可以定义全局变量、方法、类 第三种:<%=%>:用于输出一个变量或一个具体内容 scriptlet_demo01.jsp :<%
int x = 10; // 定义局部变量
String info = "www.baidu.com"; // 定义局部变量
out.println("<h2>x = " + x + "</h2>"); // 编写语句
out.println("<h2>info = " + info + "</h2>"); // 编写语句
%>
scriptlet_demo02.jsp :
<%!
public static final String INFO = "www.MLDNJAVA.cn" ; //定义全局变量
int x = 10 ;
%>
<%
out.println("<h2>x = " + x++ + "</h2>") ;// 语句
%>
<%!
public int add(int x,int y){ //定义方法
return x + y ;
}
%>
<%!
class Person{ //定义类
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "name = " + this.name + ";age = " + this.age ;
}
}
%>
<%
out.println("<h3>INFO = " + INFO + "</h3>") ;
out.println("<h3>3 + 5 = " + add(3,5) + "</h3>") ;
out.println("<h3>" + new Person("zhangsan",30) + "</h3>") ;
%>
scriptlet_demo03.jsp :
<%
String info = "www.baidu.com" ;// 局部变量
int temp = 30 ;
%>
<h3>info = <%=info%></h3>
<h3>temp = <%=temp%></h3>
<h3>name = <%="luwucheng"%></h3>
尽量不要使用out.put.println()输出,而使用表达式输出;
1.3 scriptlet标签
如果过多的出现<%%>会导致代码的混乱,此scriptlet标签完成与<%%>同样的功能;
scriptlet_tag.jsp
<jsp:scriptlet>
String url="www.baidu.com";
</jsp:scriptlet>
<h2><%=url%></h2>
1.4 page指令
指定一个jsp页面的相关属性,包括MIME类型,定义需要导入的包,错误页的指定;
只有import指定可以重复出现多次,其它属性只能出现一次;
常用指令:contentType、pageEncoding、errorPage/isErrorPage、import
语法 :
<%@page 属性="内容"%>
MIME:可以设置打开文件的应用程序类型;指定某个扩展名文件将使用何种应用程序打开的一个说明;
page_demo01.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%>
<CENTER>
<H2> 百度一下</H2>
<H3> 网址:www.baidu.com </H3>
</CENTER>
以上,指定了开发语言是java,通过contentType进行设置,按照HTML文本文件进行显示,页面编码是GBK;
设置页面编码
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
contentType和pageEncoding设置编码的区别:
pageEncoding指的是jsp文件本身的编码;
contentType中的charset指的是服务器发送给客户端的内容编码;
如果一个jsp页面只需要按照网页显示,则使用pageEncoding设置编码即可;
错误页的设置
完成错误页的操作,需要满足两个条件:
指定错误出现时的跳转页,通过errorPage属性指定;
错误处理页必须有明确的标识,通过isErrorPage属性指定;
会出现错误的页面 show.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page errorPage="error.jsp"%><%-- 一旦出现错误之后将跳转到error.jsp中 --%>
<%
int result = 10 / 0 ; // 这里操作将发生异常
%>
<h1>欢迎光临本页面</h1>
错误处理页 error.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page isErrorPage="true"%> <%-- 表示此页面可以处理错误 --%>
<h1>程序出现了错误!</h1>
错误页的跳转属于服务器端的跳转;
服务器端跳转:页面内容出现了改变,而地址栏并有改变;
客户端跳转:程序跳转后,地址栏发生了变化;
有时可能出现无法跳转的错误页,无法显示error.jsp页面信息,则可能tomcat也认为该页有错误;
解决方式:在error.jsp页面中加入如下语句
<%response.setStatus(200);%>
1.5 包含指令
采用包含的形式,减少代码的重复量;
jsp中可以通过静态包含和动态包含两种方式完成;
静态包含
在jsp编译时插入一个包含文本或代码的文件,过程是静态的;
包含的文件可以是jsp文件,html文件,文本文件或一段java程序(只是简单的将内容合在一起进行显示);
语法:<%@ include file="要包含的文件路径"%>
include_demo01.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title></title></head>
<body>
<h1>静态包含操作</h1>
<%@include file="info.htm"%>
<%@include file="info.jsp"%>
<%@include file="info.inc"%>
</body>
</html>
静态包含中,现将三个文件的内容导入到include_demo.jsp中,然后一起编辑,最后呈现一份整体的内容给用户,属于先包含,后编译处理;
动态包含
使用<jsp:include>指令完成动态包含操作;
可自动区分被包含的页面是动态还是静态;
如果是静态,则将内容包容进来进行处理;如果是动态,则先进行动态处理,再将处理后的结果包含进来;
语法:
* 不传递参数
<jsp:include page="{要包含的文件 | <%=表达式%>}" flush="true | false" />
* 包含参数
<jsp:include page="{要包含的文件 | <%=表达式%>}" flush="true | false" >
<jsp:param name="参数名称" value="参数内容" />
....可以向被包含的页面传递多个参数
</jsp:include>
标签指令必须完结;
当flush = false,表示将整个网页全被被读进来以后才输出;
每个jsp的内部都有一个buffer,如果是true,当buffer满了就输出。默认值为true;
采用包含参数语法可向被包含页面传递参数,被包含的页面可使用 request.getParameter()方法进行参数的接收;
被包含页面:receive_param.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<h1>参数一:<%=request.getParameter("name")%></h1>
<h1>参数二:<%=request.getParameter("info")%></h1>
包含页,并传递参数: include_demo02.jsp
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String username = "BUGSHI" ; // 定义一个变量
%>
<h1>动态包含并传递参数</h1>
<jsp:include page="receive_param.jsp">
<jsp:param name="name" value="<%=username%>"/>
<jsp:param name="info" value="www.baidu.com"/>
</jsp:include> <!-- 此处为标签指令,必须完结 -->
</body>
</html>
<%@include %> 和<jsp:include />操作相似,采用动态包含更好;
1.6 跳转指令
使用<jsp:forward>指令,将一个用户的请求(request)从一个页面传递到另一个页面的操作;
语法:
* 不传递参数
<jsp:forward page="{要包含的文件名称 | <%=表达式%>}" />
* 传递参数
<jsp:forward page="{要包含的文件名称 | <%=表达式%>}" />
<jsp:param name="参数名称" value="参数内容" />
....可以向被包含页面传递多个参数
</jsp:forward>
跳转指令与动态包含指令的语法相似,只是完成的功能不同;
此种跳转也属于服务器端跳转;