(1)jsp的三种注释;
(2)三种scriptlet及其区别;
(3)page指令;
(4)jsp中连接数据库;
(5)包含指令;
(6)跳转指令;
(7)登录程序。
任何一种语言都有自己的语法,jsp虽然是在Java上的一种应用,依然有其扩充的语法,在jsp中,所有的Java程序都可以写。
·jsp的注释
Jsp 的注释有两类三种:
·显示注释
·直接使用html的注释风格
·隐式注释
·使用Java的注释
·使用jsp自己的注释<%--要注释的内容--%>
通过一段代码来观察三种注释的区别
<%--隐式注释--%> <% //我们都是好孩子 %> |
发现程序运行之后的界面查看源文件,发现显示注释可以看到,而隐式注释看不到,这就是显示注释和隐式注释的区别。
·scriptlet
从这个单词字面的意思来看,script是脚本,let表示的小程序,综合起来说叫做脚本小程序。其实里就是编写Java代码的地方。从使用上来说,可以分为三种形式:
·<% Java代码%>
·<%!Java代码%>
·<%= java代码%>
第一种script:<% %>一般用来定义变量,编写语句
范例:在scriptlet中定义变量,编写语句,编写一个for循环
<% int sum = 0; for(int i =0;i<100;i++){ sum+=i;//sum = sum+i } out.print(" %> |
第二种scriptlet:<%!%>在此种scriptlet中声明全局的常量,编写方法,编写类,但是我们说在一般的情况下, 不会在jsp中声明一个类,而且在此scriptlet中不会去编写语句。
<%! public static final String DBURL = "jdbc:oracle:thin:@604-43:1521:maolizi"; public static final String ORACLEDRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String DBNAME = "mlz"; public static final String PASSWORD = "mlz"; %> <% out.print(" out.print(" out.print(" out.print(" %> |
第三种scriptlet:<%= %>此种scriptlet有一个别名,叫做表达式输出,可以直接使用此种形式的script输出一个变量或者具体内容。
<%! public static final String DBURL = "jdbc:oracle:thin:@604-43:1521:maolizi"; public static final String ORACLEDRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String DBNAME = "mlz"; public static final String PASSWORD = "mlz"; %> <html> <head>head> <body> <h1><%=DBURL %>h1> <h1><%=ORACLEDRIVER %>h1> <h1><%=DBNAME %>h1> <h1><%=PASSWORD %>h1> body> html> |
现在我们已经知道了,可以使用out.print()这个方法和使用表达式输出都可以进行页面的内容输出,那么这两种使用哪种会更好呢?
举例:打印一个100*100的表格
·第一种方式使用out.print()
<% out.print(" for(int i = 0;i<=100;i++){ out.print(" for(int j=0;j<=100;j++){ out.print(" out.print(i*j); out.print(" } out.print(" } out.print(" %> |
|
观察此种源文件,没有任何的缩进,反正就是凌乱的感觉。
·使用第二种:使用表达式输出
<table border="1"> <% for(int i = 0;i<=100;i++){ %> <tr> <% for(int j = 0;j<=100;j++){ %> <td><%=i*j %>td> <% } %> tr> <% } %> table> |
首先我们观察我们jsp的代码,发现应经能够很好的将Java和html代码分开了。
而且发现此种源代码出来之后会比较整齐,其实我们还可以告诉大家,这种整齐的代码在以后使用工具开发的时候才能够认得出这是一个表格。如果使用out.print的话,使用DW无法完成操作,而是用表达式输出使用DR去操作没有任何问题。
范例:动态的打印表格
<html> <body> <form action="jspDemo06.jsp" method="post" > <table> <caption> 打印表格 caption> <tr> <td> 输入行 <input type="text" name="rows"> td> tr> <tr> <td> 输入列 <input type="text" name="cols"> td> tr> <tr> <td> <input type="submit" value="提交"> td> tr> table> form> body> html> |
<% int rows = Integer.parseInt(request.getParameter("rows")); int cols = Integer.parseInt(request.getParameter("cols")); %> <table border="1"> <% for(int i = 1;i<=rows;i++){ %> <tr> <% for(int j = 1;j<=cols;j++){ %> <td><%=i*j %>td> <% } %> tr> <% } %> table> |
·对于jsp语法基础,比较重要的呢就是page指令
page指令可以理解为一个对象,page指令主要有如下两个功能:
·设置MIME类型
·导包指令
设置MIME类型,假设有一个jsp页面,里面有中文。
中国您好 |
显示效果是一个乱码,之所以出现乱码,是由于页面的编码和浏览器的编码不一致所造成的,但是如果我们在浏览的时候修改浏览器的编码格式,则可以正常显示,但是这种肯定不是长久之计,现在为了能够更好的显示正确浏览效果,最好是在页面加载的时候就已经自动设置好了浏览器的浏览编码,那么用户就不需要再改,完成这种操作就需要使用page指令去设置MIME类型。
<%@page contentType="text/html; charset=utf-8" %> <h1>中国您好h1> |
当然对于这种指令,在写的时候要确定一个单词都不能写错,写错之后就会出现如下效果:
这就表示MIME类型设置错误。MIME叫做网际邮件扩充协议。
在使用page指令,可以使用import进行导包,page指令中唯一可以设置多次就是导包指令。
<%@page contentType="text/html; charset=utf-8" %> <%@page import="java.applet.*,java.io.*" %> <%@page import="java.util.*,java.sql.Date" %> |
既然jsp中可以导入sql包,那么是不是意味着jsp可以连接数据库呢?我们已经说过,如果连接数据库,必须在项目中加载驱动程序,现在还存在tomcat,就是说tomcat中最好也要加上这个包。
<%@page contentType="text/html; charset=utf-8" %> <%@page import="java.applet.*,java.io.*" %> <%@page import="java.util.*,java.sql.*" %> <%! public static final String DBURL = "jdbc:oracle:thin:@604-43:1521:maolizi"; public static final String ORACLEDRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String DBNAME = "mlz"; public static final String PASSWORD = "mlz"; %> <% Connection conn = null; PreparedStatement pstat = null; ResultSet res = null; try{ Class.forName(ORACLEDRIVER); conn = DriverManager.getConnection(DBURL,DBNAME,PASSWORD); String sql = "select stu_id,stu_name,stu_age,decode(nvl(stu_sex,0),1,'男',0,'女') from dh10_student"; pstat = conn.prepareStatement(sql); res = pstat.executeQuery(); %> <table border="1"> <tr> <th>IDth> <th>姓名th> <th>年龄th> <th>性别th> tr> <% while(res.next()){ %> <tr> <td><%=res.getInt(1) %>td> <td><%=res.getString(2) %>td> <td><%=res.getInt(3) %>td> <td><%=res.getString(4) %>td> tr> <% } }catch(Exception e){ e.printStackTrace(); }finally{ try{ res.close(); pstat.close(); conn.close(); }catch(Exception e){ e.printStackTrace(); } } %> table> |
虽然说jsp可以连接数据库,但是要告诉大家,在以后的开发中jsp中是绝对不运行导入sql包的。
·包含和跳转指令
·包含:include
·跳转:forward
包含:include表示包含,像一般的网页格式:
对于这个网页,开发的时候一般有种方式:
·分别将不同部位写在不同的jsp中,后面使用include进行包含
·所有的内容写在一个jsp中
以上的两种方式肯定是第一种方式比较好,维护的时候只需要将包含的页面进行维护进行。
在jsp中包含有两种语句格式:
·@include
·
对于指令的这种包含形式我们叫做静态包含,主页面不能向被包含的页面传递参数,可以包含任意格式的文件,只是将文件内容进行包含
<%@page contentType="text/html; charset=utf-8" %> <h1>Includeh1> <%@include file="jspDemo01.jsp"%> <%@include file="mlz.txt"%> |
对于这个jsp的标签的形式我们成为动态的包含,如果被包含的页面是jsp的页面,则先处理之后将结果包含,而如果是被包含的页面非jsp,则和上面的指令的包含一样,属于静态包含。对于动态包含,也有两种语法格式:
·第一种
|
·第二种
。。。。 |
使用第一种语法:
<%@page contentType="text/html; charset=utf-8" %> <h1>Includeh1> <jsp:include page="jspDemo11.jsp" /> |
对于这种包含来说,和静态的包含效果是很相似的,因为被包含的页面中没有接受任何参数,现在如果此时进行动态的包含,除了能够包含页面之外,还能够向被包含的页面传递参数。
<%@page contentType="text/html; charset=utf-8" %> <h1>Includeh1> <jsp:include page="jspDemo11.jsp"> <jsp:param name="ref1" value="mlz"/> <jsp:param name="ref2" value="lcd"/> jsp:include> |
<%@page contentType="text/html; charset=utf-8"%> <h1>www.wanczy.comh1> <h1><%=request.getParameter("ref1") %>h1> <h1><%=request.getParameter("ref2") %>h1> |
对于静态包含和动态包含的区别:
静态包含:
<%@page contentType="text/html; charset=utf-8" %> <h1>Includeh1> <% int j = 10; %> <%@include file="jspDemo11.jsp"%> |
<%@page contentType="text/html; charset=utf-8"%> <% int j = 20; %> <h1>www.maolizi.comh1> |
提示错误:在一个页面中不能定义两个变量名称相同的变量,表示静态包含先将内容包含进来,再执行。
动态包含:
<%@page contentType="text/html; charset=utf-8" %> <h1>Includeh1> <% int j = 10; %> <jsp:include page="jspDemo11.jsp"> <jsp:param name="ref1" value="mlz"/> <jsp:param name="ref2" value="lcd"/> jsp:include> |
<%@page contentType="text/html; charset=utf-8"%> <% int j = 20; %> <h1>www.wanczy.comh1> <h1><%=request.getParameter("ref1") %>h1> <h1><%=request.getParameter("ref2") %>h1> |
动态包含是将结果进行包含。要注意的一点是,使用jsp的语法标签必须要完结
·跳转指令:跳转指令表示当程序执行到跳转的时候,会立刻的无条件跳转,跳转指令也属于标签指令的形式,所以也是一定要完结,对于跳转也有两种语法格式:
第一种:
|
第二种:
。。。。 |
下面来完成跳转:
·使用第一种语法
<%@page contentType="text/html; charset=utf-8" %> <% System.out.println("==========跳转前=========="); %> <jsp:forward page="jspDemo11.jsp"/> <% System.out.println("==========跳转后=========="); %> |
<%@page contentType="text/html; charset=utf-8"%> <h1>跳转后页面h1> |
观察程序运行后发现两个问题:
·第一个跳转指令是立刻的无条件跳转
·第二个就是跳转之后地址栏不会改变:如果以后在开发中,跳转后地址栏不改变,我们说这是服务端跳转,如果地址栏改变,我们说是客户端跳转。
当然我们也可以像跳转后的页面传递参数,现在使用第二种语法完成:
<%@page contentType="text/html; charset=utf-8" %> <% System.out.println("==========跳转前=========="); %> <jsp:forward page="jspDemo11.jsp"> <jsp:param value="mlz" name="ref1"/> <jsp:param value="lcd" name="ref2"/> jsp:forward> <% System.out.println("==========跳转后=========="); %> |
<%@page contentType="text/html; charset=utf-8"%> <h1>跳转后页面h1> <h1><%=request.getParameter("ref1") %>h1> <h1><%=request.getParameter("ref2") %>h1> |
(1)使用page指令可以设置MIME类型,可以进行导包
(2) jsp可以连接数据库,但是在以后的开发中,jsp中是绝对不允许连接数据库的
(3)使用包含的时候一定要使用动态包含,因为处理会更方便
(4)一定要清楚两种跳转(客户端跳转和服务端跳转)的区别
(5)可以使用forward进行灵活的跳转,forward是服务端跳转 ,执行到此命令会立刻无条件跳转。