在tomcat环境搭建一文中为大家详细的介绍了第一个JSP的程序——Hello World,大家都应该顺利的完成了吧,以此为一个开端,希望大家在学习java EE的路上乘风破浪,不断进步。今天,为大家介绍JSP基本语法。想要快速的学会一门语言,掌握其语法非常关键。这是根本。
一方面因为篇幅原因,另一方面我做此文的目的是做一个小的总结,帮助大家理清思路,撸一撸JSP基本语法。因此,在这篇博文上没有小程序的例子。其实,JSP的本质就是java,只要你有一定的java基础,JSP脚本段的语法与java一模一样。熟记本文之后,相信你写些JSP的小程序会很轻松。希望大家,能在看完本文之后,多写些小程序。毕竟,编程的能力不是记忆一些理论知识就可以的,而是要多多动手实践。
言归正传,语法是根本。总的来说,JSP基础语法包括:两种注释类型、三个脚本元素、三个指令元素、八个动作指令。
JSP页面的组成
JSP页面包含JSP元素和Template data两类。Template data是指JSP引擎不处理的部分,也就是<%%>以外的部分,例如代码中的HTML标签等,这些数据会直接传送到客户端的浏览器。
JSP元素则是值由JSP引擎直接处理的部分,这一部分必须符合JSP语法。JSP标签是大小写敏感的(HTML标签不区分大小写),脚本语法和指令语法则使用了传统的语法。
两种注释类型
1.html注释
<!-comment[<%=expression%>]-> //[]为可选
eg:
<!-This file dispalys <%=user%> login sreen>
2.jsp注释
<%--这是一个jsp单行注释--%> <%/*这是一个jsp多行注释*/%>
三个脚本元素
1.申明:整个页面的成员变量或方法
<%! int a=0;%>
2.表达式
<%=expression%>
"<%"和"="之间不要有空格,表达式必须能求值。
3.脚本段:java程序段
<% code fragment%>
JSP页面可以在<%%>之间插入java程序段。一个JSP页面可以有许多程序段,这些程序段将被JSP引擎按顺序执行。
注意:<%! %>内的变量和方法是一个类内的变量和方法也就是页面的成员变量和成员方法。声明在<%%>内的变量是一个方法的变量也就是局部变量。这个地方我们不太好理解,可以查看Tomcat编译成带名称中有“_jsp”的.java的文件,也就是servlet。我们可以查看JSP转译成的servelt,其路径如下:
apache-tomcat-7.0.59workCatalinalocalhostyourwebapporgapachejsp
我们可以看到一个叫_jspService的方法,所有JSP脚本段都在这个方法里。
为了区别他们:请看如下的计数器小程序counter.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head></head> <body> <%!int count = 0; synchronized void setCount() { count++; }; %> <h2> 欢迎阅读本文 <h2> <br> 本文阅读次数: <% setCount(); out.println(count); %> <br> i=0,计算i++= <% int i = 0; out.println(i++); %> </body> </html>
局部变量当方法调用完,就会在内存中被销毁,所以i每次都为0,0++还是0。而count是页面的成员变量,每访问一次这个页面,count就会+1,直到JSP引擎关闭。用synchronized关键词修饰原因是:当多个用户同时访问这个页面时,线程是安全的。
三个指令元素
1.page指令,仅仅import可以多个
eg:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.kl.bean.*" %>
contentType 属性指定页面响应的MIME类型和字符编码
pageEncoding属性用于指定JSP页面字符编码格式。
我的建议:都设置为UTF-8
2.include指令:在编译阶段就处理所需要的文件
<%@ include file="relativeURL"%>
3.taglib,声明页面的自定义标签
<%@ taglib uri="http://www.jspcentral.com/tags" prefix="public"%>
八个动作
1.内部跳转(请求转发):<jsp:forward >
从一个jsp文件向另一个jsp文件传递一个包含用户请求的request对象。标签后的jsp脚本不会执行。
该语句实现页面跳转,并可携带相关参数,浏览器地址栏数据不改变,不会显示参数信息。
重定向:重定向行为是做了两次请求,及产生了两个request对象,重定向会导致第一次request对象信息丢失。
请求转发:转发做了一次请求, 浏览器的地址栏一直是第一次请求的地址。转发是服务器内部request/response控制权的移交。
eg: 含param子标记
<jsp:forward page="loginResult.jsp"> <jsp:param name="username" value="<%=user%>"/> <jsp:param name="password" value="<%=pwd%>"/> </jsp:forward>
不含param子标记
<jsp:forward page="declare.jsp"/>
2.包含页面:<jsp:include>
与<%@ include%>不同,在jsp页面运行时动态加入。
<jsp:include page="scripts/login.jsp"> <jsp:param name-"username" value="tom"/> </jsp:include>
->javaBean
3.创建Bean:<jsp:useBean>
属性:
id:javaBean是一个类,不同实例用id区分
class:javaBean的类名。
scope:默认page,以下是取值的详细说明
- page:创建Bean的jsp以及此文件中的所有静态包含文件(<%@ include %>)。
- request:同一个请求,直到客户端发起下一个请求为止。
- session:整个会话,近似理解为关闭浏览器为止。
- application:整个application。服务器一开始执行服务到服务器关闭为止。
eg:
<jsp:useBean id="checking" scope="session" class="bank.checking" > <jsp:setProperty name="checking" property="balance" value="0.0"/> </jsp:useBean>
4.设置Bean属性:<jsp:setProperty>
属性:
name: <jsp:useBean>标签中的id属性
property:Bean实例的属性。
value: Bean实例属性的值。
param:表单参数
语法:
1)将bean属性的值设置为一个字符串。
<jsp:setProperty name="bean的名字" property="bean的属性" value=字符串/>
2)通过表单的参数的值来设置bean的相应属性的值,表单中的属性和javaBean的属性应该同名。
<jsp:setProperty name="bean的名字" property="*" /> <jsp:setProperty name="bean的名字" property="属性名" param=“参数名” />
注意表单中文参数乱码
post方式
request.setCharacterEncoding("utf-8"); response.setCharacterEncoding( "utf-8" );
get方式
String string = request.getParamers(""); String = new String(string.getBytes("ISO8859-1","utf-8"));
5.取得属性<jsp:getProperty>
<jsp:getProperty name="bean的名字" property="bean的属性"/>
6.定义参数:<jsp:param>
param标记以“名字-值”对的形式为其他标记提供附加信息,不能独体使用。作为<jsp:include>,<jsp:forward >,<jsp:plugin>标记的子标记。
<jsp:param name="名字" value="值">
7.使用Applet插件:<jsp:plugin>
8.插件错误提示:<jsp:fallback>