一、JSP的三种注释:

1显示注释<!— 这个注释通过页面查看源代码中可以看见—>

2、隐式注释1Java的注释// /* */

3、隐式注释2<%-- JSP本身的注释 --%>

只有一种显示注释,其他的是隐式注释

二、JSP中脚本小程序的三种形式:

<% 可以定义变量、编写语句 %>

<%! 定义全局变量、编写方法、类 %>

<%= 输出内容 %> 等价于 out.print(); 但最好使用<%= %>形式更好。

三、常见出错的含义和解决方法:

404表示页面找不到出错,查看路径是否正确。

500表示服务器出错,必须查看代码进行处理。

四、page指令主要功能:设定整个JSP网页的属性和相关功能。

1、 设置MIME类型:包括htmlworldxsl等类型。自己可以根据自己具体的需要来设置,例如可以应用于导出excel文档、world文档··· ··· <%@page contentType=” ”%>  所有的MIME类型从tomcat中的conf/web.xml文件中可以找。  注意:contentType只能设置一次。

2、 导包指令:<%@page  import=” ”%>

3、 其他指令:错误页、禁止session、页面的缓冲等等。

page指令语法格式如下:

<%@  page
[language=”java”]---------------------------------声明JSP页面使用的脚本语言类型,默认是java,所以通常不用配置
[import=”package.class,……”]---------------------包的导入,默认已经导入的有java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*
[contentType=”text/html”;charset=”GB3212”]------设置MINI类型,默认是text/html、设置字符编码,默认是ISO-8859-1
[session=”True|false”]----------------------------设置这个JSP页面是否需要HTTPSession,如果为true,那么产生的servlet将包含创建一个HTTP会话(或访问一个HTTP会话)的代码,缺省为true。 
[buffer=”none|8kb|sizekb”]------------------------指定输出缓存区的大小,out用于缓存区的输出,默认是8KB
[autoFlush=”True|false”]--------------------------决定输出流的缓冲区是否要自动清除。当值为true时缓存满时将被自动刷新,当值为false时,缓冲区满会抛出溢出异常。缺省值为true。       
[isThreadSafe=”True|false”]-----------------------此JSP页面能处理来自多个线程的同步请求,此值为true,否则为false,生成的servlet表明它实现了SingleThreadMode接口。SingleThreadMode已经声明不赞成使用(deprecate)
[info=”text”]-------------------------------------表示此JSP页面的相关信息,由getServletInfo()方法返回的
[errorPage=relativeURL]-----------------------------表示如果发生异常错误,网页会被重新指向一个URL页面。错误页面必须在其page指令元素中指定isErrorPage="true"      
[isErrorPage=”True|false”]------------------------如果此页面被用作处理异常错误的页面,则为true。在这种情况下,页面可被指定为另一页面page指令元素中errorPage属性的取值。指定此属性为true将使exception隐含变量对此页面可用。缺省值为false。
[extends=”package.class”]-------------------------定义此JSP页面产生的Servlet是继承自哪个父类。必须为实现HttpJspPage接口的类。JSP规范对不完全理解其隐意的情况下使用此属性提出警告
%>

凡是出现“文件下载”提示时,肯定是MIME类型设置错误。


如果MIME改为world文档当然变成如下:


JSP连接Oracle数据库实例:

Tomcatcommon/lib中加入oracle中的驱动包。连接数据库,把雇员的全部信息列出来。

<%@page contentType="test/html;charset=GBK"%>

<%@page import="java.sql.*"%>

<%!

public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:MLDN" ;

public static final String DBUSER = "scott" ;

public static final String DBPASS = "tiger" ;

%>

<%

Connection conn = null ; // 数据库连接

PreparedStatement pstmt = null ;// 数据库操作

ResultSet rs = null ; // 查询结果集

%>

<%

Class.forName(DBDRIVER) ; // 加载驱动程序

conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;

String sql = "SELECT empno,ename,job,hiredate,sal,comm FROM emp" ;

pstmt = conn.prepareStatement(sql) ;

rs = pstmt.executeQuery() ;

%>

<center>

<h1>雇员管理</h1>

<table border="1" width="80%">

<tr>

<td>雇员编号</td>

<td>雇员姓名</td>

<td>工作</td>

<td>雇佣日期</td>

<td>工资</td>

<td>奖金</td>

</tr>

<%

while(rs.next()){

int empno = rs.getInt(1) ;

String ename = rs.getString(2) ;

String job = rs.getString(3) ;

java.util.Date hiredate = rs.getDate(4) ;

float sal = rs.getFloat(5) ;

float comm = rs.getFloat(6) ;

%>

<tr>

<td><%=empno%></td>

<td><%=ename%></td>

<td><%=job%></td>

<td><%=hiredate%></td>

<td><%=sal%></td>

<td><%=comm%></td>

</tr>

<%

}

%>

<%

rs.close() ;

pstmt.close() ;

conn.close() ;

%>

</table>

</center>

程序运行出现了错误如下:


以上错误是因为程序中缺少了Oracle驱动程序包,因为刚才我们在common/bin中增加了Oracle驱动包,而没有重启服务器。

此时,重启服务器即可。

重启运行结果如下:


五、include指令:功能:在JSP编译时插入包含一个文件。包含的过程是静态的,包含的文件可以是JSP、HTML、文本或是Java程序。

*静态包含指令@include指令<%@include file="relativeURLSpec"%>

*动态包含指令<jsp:include>指令

1静态@include指令是属于静态包含,先包含进来再处理,可以包含任意的文件(htmltxtpdf等等文件都可以),当然只是把文件的内容包含进来。

content.html页面文件代码:

<h2>content.html</h2>

content.txt文件代码:

<h2>content.txt</h2>

content.inc文件代码

<h2>content.inc</h2>

Include.jsp中把以上三个文件静态包含进来,代码如下:

<h2>include.jsp</h2>

<%@include file=”content.html”%>

<%@include file=”content.txt”%>

<%@include file=”content.inc”%>

运行结果如下:


2动态jsp:include指令

此语句为动态包含,如果被包含的页面是JSP,则先处理后再包含,而如果包含的是非*.jsp文件,侧只是把文件的内容静态包含进来(功能与@include类似)

此指令在使用的时候语法非常严格,有一下两种形式的语法:

语法一:

<jsp:include page=”页面”/>

语法二:

<jsp:include page=”页面”/>

<jsp:param name=”参数名称” value=”参数值”/>

········· //可以写多个

</jsp:include>

如果被包含的页面是动态的页面的话,处理可以包含之外,还可以向被包含的页面里面传递参数

范例:

建立content.jsp文件,此文件是被包含文件,可以接受 ref1ref2参数。

<h2><%=request.getParameter("ref1")%></h2>

<h2><%=request.getParameter("ref2")%></h2>

<h2><%=request.getParameter("ref2")%></h2>

以上文件接受了被包含页面传递过来的两个参数,然后再被被包含页面包含了

建立includedemo.jsp,同时向content.jsp文件中传递ref1ref2参数

<h2>includedemo.jsp</h2>

<jsp:incluce page=”content.jsp”>

     <jsp:param name=”ref1” value=”HELLO WORLD”/>

<jsp:param name=”ref2” value=”www.mldn.cn”/>

</jsp:include>

运行效果如下:


当然,也可以向包含页面中传递变量。

范例:建立includedemo.jsp

<h1>includedemo04.jsp</h1>

<%!

public static final String str = "www.jtlyuan.iteye" ;

%>

<jsp:include page="content.jsp">

<jsp:param name="ref1" value="HELLO WORLD"/>

<jsp:param name="ref2" value="<%=str%>"/>

</jsp:include>

以后,凡是要向页面中传递变量的话,则肯定采用以上的形式。

运行结果如下:


两种包含的区别:

先看如下代码示例,demo.jsp

<%@ page contentType="text/html;charset=GBK"%>

<%

int i = 1000 ;

%>

<h2>demo.jsp中的i的值为<%=i%></h2>

测试静态include的代码

<%@ page contentType="text/html;charset=GBK"%>

<h1>includedemo06.jsp</h1>

<%

int i = 10 ;

%>

<h2>includedemo06.jsp中的i的值为<%=i%></h2>

<%@include file="demo.jsp"%>


呵呵,重复定义变量i了,这是为什么呢?因为静态包含是将全部内容包含进来以后,再一起处理的。

测试动态包含:代码

<%@ page contentType="text/html;charset=GBK"%>

<h1>includedemo06.jsp</h1>

<%

int i = 10 ;

%>

<h2>includedemo06.jsp中的i的值为<%=i%></h2>

<jsp:include page="demo.jsp"></jsp:include>

运行结果:


发现,利用动态包含可以正确显示,而却不会互相影响,这是因为动态包含是先各自处理完成后,再包含进来的。

所以,明显动态include更加常用。

六、forward标签指令:

该指令的形式与include很相似

Forward跳转指令,当一执行打指令的时候,程序就会无条件立刻跳转,语法如下:

语法一:

<jsp:forward page=”要跳转到的页面”/>

<jsp:forward page=”要跳转到的页面”>

     <jsp:param ame=”参数名称” value=”参数值”/>

     ········· //可以写多个参数列表

</jsp:forward>

范例:完成跳转功能

forwarddemo01.jsp代码

<%@ page contentType="texcharset=GBK"%>

<jsp:forward page="forwarddemo02.jsp"/>

forwarddeom.jsp代码

<%@ page contentType="text/html;charset=GBK"%>

<h2>跳转之后的页面!</h2>

 结果得到:


结果已经成功跳转,但是地址却没有变化,这是为什么呢??原来,forward这种跳转是服务器端的跳转,地址是不会改变的。

当然,也可以和include动态指令一样,我们可以向跳转页面传递参数。使用request.getParameter()进行接收。

Forward03.jsp代码如下

<%@ page contentType="text/html;charset=GBK"%>

<%!

public String str="www.jtlyuan.iteye.com";

 %>

<jsp:forward page="content.jsp">

<jsp:param name="ref1" value="HELLO WORLD"/>

<jsp:param name="ref2" value="<%=str %>"/>

</jsp:forward>

跳转到的页面forwarddemo04.jsp代码:

<%@ page contentType="text/html;charset=GBK"%>

<h2>跳转之后的页面!</h2>

<h2><%=request.getParameter("ref1")%></h2>

<h2><%=request.getParameter("ref2")%></h2>

结果如下:



Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐