15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 2018-5-7 JSP_Web_MVC开发(5)-JSP语法

2018-5-7 JSP_Web_MVC开发(5)-JSP语法

时间:2023-05-25 02:42:02 | 来源:网站运营

时间:2023-05-25 02:42:02 来源:网站运营

2018-5-7 JSP_Web_MVC开发(5)-JSP语法:【注释】

JSP中为了方便用户开发提供了2类注释

  1. Java风格注释://和/*...*/
  2. JSP特有的注释:<%--注释--%>
例 观察注释

<% //此处编写的是JAVA程序 /*用户看不见的注释*/%><!--This is a visiable comment--><%-- 此类注释为JSP所独有--%>此处一定要注意:日后编写JSP时候"<%--注释--%>"很常见。




【三种Scriptlet】

Scriptlet指的是脚本小程序。JSP就是指在HTML页面中要嵌入多个Java程序,嵌入Java程序的语句块称为Scriptlet。

Scriptlet分为3种类型:

1.第一种Scriptlet:<%!%>

使用此种Scriptlet可以在一个JSP页面之中定义类,全局变量、全局常量、方法

例 在JSP中定义类

<%! 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(new Person("Tom",20));%>不过一般而言不会在JSP中定义类,此类操作只是一个介绍。

提示:严格来说,此处定义的类如果还原成Java语言,那么就表示定义的是一个内部类。

例 定义方法

<%! public int add(int x,int y){ return x+y; }%><% out.println(add(20,10));%>提示:此时定义的方法,就相当于在类中定义的普通方法。

例 定义全局常量、全部变量

<%! public static final String MESSAGE="Hello World"; public int x=10;//全局变量%><% out.println(MESSAGE); out.println(x++);%>此时的x就相当于全局变量,只会定义一次。

提示:此时定义的操作就好比定义类中的属性一样。

通过以上的分析可以发现,使用<%!%>定义的结构就相当于定义的是类中的结构一样,而包含此部分代码的部分就好比一个对象,只不过我们不去参与对象的实例化操作,而直接使用对象。

总结

如果将来使用<%!%>定义结构,使用最多的就是用它定义全局常量




2.第二种Scriptlet:<%%>

使用<%%>定义,可以编写语句,可以定义局部变量。类似Java的方法。

例 定义局部变量

<% int x=10; out.println(x ++);%>此时定义的是一个局部变量,局部变量每次调用的时候都会重复的声明,所以JSP刷新显示内容是不会改变的,永远是10。

例 编写语句

<% out.println("<table border=/"1/">"); for(int x=1;x<9;x++){ out.println("<tr>"); for(int y=1;y<=x;y++){ out.println("<td>"+x+"*"+y+"="+x*y+"</td>"); } out.println("</tr>"); } out.println("</table>");%>今后JSP开发中,使用最多的都是“<%%>”,所有的语句几乎都在此处。




3.第三种Scriptlet<%=%>

此种Scriptlet的主要功能是进行变量或常量内容输出。

例 观察使用

<%! public static final String MESSAGE="Hello World";%><% int num=10;%><h1><%=MESSAGE%></h1><h1><%="World"%></h1><h1><%=num%></h1>此时功能和out.println()类似。

疑问?现在输出有2种方式,使用哪种呢?

发现out.println()可以输出,使用<%=%>也可以输出。

一般而言在进行输出的时候,重点输出的是程序的计算结果(是变量,而不是HTML),所有的HTML输出最终都会变为out.println()完成,在使用的时候往往就不会再通过out.println()输出HTML代码,所有的HTML代码直接编写,只在需要输出Java程序的地方使用“<%=%>”。

例 利用<%=%>输出页面

<table border="1"><% for(int x=1;x<9;x++){%> <tr><% for(int y=1;y<=x;y++){%> <td><%=x%> * <%=y%> = <%=x*y%> </td><% }%> </tr><% } %></table>此时代码实现了HTML代码与JAVA程序的分离,唯一的缺点是增加了许多Scriptlet代码块。

今后开发请不要使用out.pringtln(),全部使用<%=%>代替。




【page指令】

page指令提供的选项非常多,随着时间推移和开发的标准化,重点的选项就只有2个了:解决显示乱码和导包。

1.解决显示编码问题

如果在页面之中直接编写中文,显示的时候会出现乱码,这是因为浏览器中默认使用的编码是ISO8859-1,如果用户没有指定编码,那么就采用默认的方式处理。

编码设置可以用pageEncoding属性来完成。

例 设置编码

<%@page pageEncoding="GBK" language="java"%><h1>这是测试页面</h1>page指令之中还有language属性,表示操作的语言。现在有且只有Java。

请注意:编码一定只能设置一次。




2.设置MIME类型

除了以上方式设置编码之外,也可以采用MIME类型设置编码,不过此类方式比较少见了。

例 解决乱码

<%@page contentType="text/HTML;charset=GBK"%><h1>这是测试页面</h1>如果contentType写错了,就会出现下载框(这种情况以前经常会遇到)。

MIME是Internet媒体访问标准,指的是程序的处理方式是什么。

打开conf/web.xml观察里面支持的MIME类型,在其中可以发现多种文件的处理形式,例如:word

<mime-mapping> <extension>doc</extension> <mime-type>application/msword</mime-type></mime-mapping>以上word的处理形式是 “application/msword”。

<%@page pageEncoding="GBK" contentType="application/msword"%>此时页面就会按照word风格运行,如果使用的是IE会自动弹出下载提示,可以把结果以word形式下载保存。

除了这种风格之外,还有可能使用CSS(text/css),javascript(application/javascript)。

问题:我们发现网页后缀可以使*.htm可以是*.html,从专业的角度解释,这2种文件处理的MIME是完全相同的。

<mime-mapping> <extension>htm</extension> <mime-type>text/html</mime-type></mime-mapping><mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type></mime-mapping>可以发现,web.xml文件中htm和html后缀处理的MIME是完全相同的。




3.导包操作

程序开发过程中一定会有导包操作,如果要想在JSP程序中导入包,那么只能使用page指令中的import完成。同时,import是page指令中唯一一个可以多次出现的选项。

例 导包操作

<%@page pageEncoding="GBK" %><%@page import="java.io.*,java.net.*"%><%@page import="java.util.*"%><%@page import="java.text.*"%><h1><%=new SimpleDateFormat("yyyy-MM-dd").format(new Date())%></h1>既然页面可以导入开发包,那么也一定可以导入sql包,进行数据库的连接操作。下面实现数据读取。

<%@page pageEncoding="GBK"%><%@page import="java.sql.*"%><%!//定义数据库连接的常量信息 public static final String DBURL="jdbc:sqlserver://1.25.13.8:1433;DatabaseName=test"; public static final String DBDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver"; public static final String DBUSER="test"; public static final String DBPASSWORD="test";%><% //定义所需要的对象 Connection conn; PreparedStatement pstmt; ResultSet rs;%><%//进行数据库连接操作 String sql=" select swname,swdescription,swtype from [QND_White] "; Class.forName(DBDRIVER); conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); pstmt=conn.prepareStatement(sql); rs=pstmt.executeQuery();%><center><table border="1" width="90%"> <tr> <td>名称</td> <td>描述</td> <td>类型</td> </tr><%//读取数据 while(rs.next()){ String swname=rs.getString(1); String swdescription=rs.getString(2); String swtype=rs.getString(3);%> <tr> <td><%=swname%></td> <td><%=swdescription%></td> <td><%=swtype%></td> </tr><% }%></table></center><% //关闭数据库连接 conn.close();%>今后可以利用JSP程序直接与数据库进行交互。




【include-导入(包含)指令】

一般项目之中,每个页面基本都会由如下的结构组成:

一般而言,每个页面之中的工具条,头部信息、尾部信息的代码都是固定的,所以开发上就有2种做法:

很明显,使用第二种做法更加适合于代码的维护,在JSP之中就提供有2种包含的指令:静态导入<%@include%>、动态导入<jsp:include>。




1.静态包含<%@include%>

此类语法是静态包含的操作,可以包含任何的文件信息,

<%@include file="路径"%>为了方便,下面首先建立3个文件。

<h1>content.htm</h1><h1>content.jsp</h1><h1>content.inc</h1>例 实现导入操作

<%@ page pageEncoding="GBK"%><%@include file="content.jsp"%><%@include file="content.htm"%><%@include file="content.inc"%>执行后发现所有内容会合在一起显示。




2.动态导入<jsp:include>

此类语法形式与HTML元素(标签)很相似,被统一称为标签指令。标签指令有一个最大的特征:标签必须完结。

动态导入指令可以区分导入的资源是静态文件还是动态文件(*.jsp),所以语法也分为2种:

<jsp:include page="路径"> <jsp:param name="参数名称" value="参数内容"/> <jsp:param name="参数名称" value="参数内容"/> ......</jsp:include>例 导入静态文件--与<%@include%>相同

<%@ page pageEncoding="GBK"%><jsp:include page="content.jsp"/><jsp:include page="content.htm"/><jsp:include page="content.inc"/>此时的效果与之前静态导入完全相同,没有任何区别。但是使用<jsp:include>导入文件时,如果导入的时动态文件,那么可以传递参数,所有的参数都使用request.getParameter()进行接收。

例 定义一个可以接收参数的导入页-param.jsp

<%@ page pageEncoding="GBK"%><h1>传递参数<%=request.getParameter("username")%></h1><h1>传递参数<%=request.getParameter("password")%></h1>本页面规定好了所需要传递的参数内容,后面进行导入操作。

例 定义导入页面--include_demo.jsp

<%@ page pageEncoding="GBK"%><h1>Hello World!</h1><jsp:include page="param.jsp"> <jsp:param name="username" value="Tom"/> <jsp:param name="password" value="123456"/></jsp:include>需要特别注意的是,这种标签指令类似HTML代码,是不可能写在Scriptlet之中的。如果现在要想传递一个变量的数据到被包含页面,那么就只能够利用表达式输出了。

<%@ page pageEncoding="GBK"%><h1>Hello World!</h1><% String str="123456";%><jsp:include page="param.jsp"> <jsp:param name="username" value="Tom"/> <jsp:param name="password" value="<%=str%>"/></jsp:include>目前传递变量采用的是表达式输出,以后会有其他形式。

面试题:静态导入和动态导入的区别

如果要想完成导入操作,有2类语法支持,实际之中使用哪种会更好呢?

下面做一个测试

例 定义个note.jsp页面

<%@ page pageEncoding="GBK"%><% int num=10;%><h1>note.jsp,num=<%=num%></h1>例 使用静态导入

<%@ page pageEncoding="GBK"%><%@include file="note.jsp"%><% int num=2;%><h1>包含页,num=<%=num%></h1>此时出现语法错误,直接提示变量num重复(Duplicate local variable num)。

结论:静态导入采用的是先导入然后处理的形式完成。

需要注意的是使用动态导入本身也包含静态导入的功能,但是其处理的效果不同:如果是静态文件与之前的一样,如果是动态文件则采用先处理后导入结果

例 使用动态导入

<%@ page pageEncoding="GBK"%><jsp:include page="note.jsp"/><% int num=2;%><h1>包含页,num=<%=num%></h1>结果如下:

结论:

1.静态导入语法

<%@include file="路径"%>2.动态导入语法

<jsp:include page="路径"> <jsp:param name="参数名称" value="参数内容"/> <jsp:param name="参数名称" value="参数内容"/> ......</jsp:include>


【forward-跳转指令】

由一个页面转到另外一个页面的操作。跳转指令也有2种方式

<jsp:forward page="路径"> <jsp:param name="参数名称" value="参数内容"/> <jsp:param name="参数名称" value="参数内容"/> ......</jsp:forward>例 实现跳转操作--跳转到param.jsp页

<%@page pageEncoding="GBK"%><h1>Hello World</h1><jsp:forward page="param.jsp"> <jsp:param name="username" value="Jacky"/> <jsp:param name="password" value="123456"/></jsp:forward>此时可以发现页面的内容实现了跳转,但是路径没有发生任何的改变,这种跳转称为服务器端跳转

而改变路径的跳转就是客户端跳转,例如:window.location。





关键词:语法

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭