一. JSP基本语法
1.JSP模板元素:JSP页面中的静态HTML内容
2.JSP表达式(expression):提供了将一个JAVA变量表达式的计算结果输出到客户端的简化方式,它将要输出的变量或表达式直接封装在<%= 和 %>之中
例:
<%
Date date=new Date();
out.print(date);
%>
</br></br>
<%=date%> //等同于out.print(date)
向浏览器输出变量或者表达式 <%= %>
3.JSP脚本片段(scriptlet):是指在<% 和 %>之中的一条或多条JAVA程序代码
多个脚本片段之间可以相互访问
<%
String ageStr=request.getParameter("age");
Integer age=Integer.parseInt(ageStr);
if(age>=18){
%>
成人
<%
}else{
%>
未成人
<%
}
%>
可以在JAVA代码中穿插HTML代码
等同于:
<%
String ageStr=request.getParameter("age");
Integer age=Integer.parseInt(ageStr);
if(age>=18){
out.print("成人");
}else{
out.print("未成人");
}
%>
4.JSP声明:JSP声明将JAVA代码封装在<% 和 %>之中,它里面的代码被插入进Servlet的_jspServlet方法的外面(几乎不用,知道即可)
<%
voiod test(){}
%>
5.JSP注释:<%-- --%>
HTML注释:<!-- -->
区别:JSP注释可以阻止Java代码的执行
例:
不可输出
可输出
二.JSP指令
他们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分
- 语法格式:<% 指令 属性名=属性值 %>( 举例:<%@ page contentType="text/html;charset=gb2312"%>)
- 注意:属性名部分是大小写敏感的
- 在目前的JSP 2.0中,定义了page、include和taglib这三种指令,每种指令中又都定义了一些各自的属性。
- 如果要在一个JSP页面中设置同一条指令的多个属性,可以使用多条指令语句单独设置每个属性,也可以使用同一条指令语句设置该指令的多个属性。
第一种方式:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date"%>
第二种方式:
<%@ page contentType="text/html;charset=gb2312" import="java.util.Date"%>
1.Page指令
1) 定义JSP页面的各种属性,Page指令最好放到整个JSP页面的起始位置
2)JSP 2.0规范中定义的page指令的完整语法:
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ import="{package.class | package.*}, ..." ] :指定当前JSP页面对应的Servlet需要导入的类
[ session="true | false" ] :页面不能再使用session
[ buffer="none | 8kb | sizekb" ]
[ autoFlush="true | false" ]
[ isThreadSafe="true | false" ]
[ info="text" ]
[ errorPage="relative_url" ] :如出现错误跳转到指定响应页面(响应error.jsp时,jsp引擎使用的请求的转发的方式)
[ isErrorPage="true | false" ] :在指定的错误页面中设置此值为true后即可使用exception这个隐含对象(可知道错误原因),一般不建议能够直接访问
例:
(也可在web.xml文件配置错误页面)
例1:<error-code>500</error-page> 错误编码
<location>/WEB-INF/error.jsp</location> 响应页面的位置
例2:
<error-code>java.lang.ArithmeticException</error-page> 指定异常的类型
<location>/WEB-INF/error.jsp</location> 响应页面的位置
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] :指定当前JSP的响应类型/实际调用的是response.setContextType("text/html;charset=utf8),通常情况下,JSP页面取值均为此.
[ pageEncoding="characterSet | ISO-8859-1" ] :通常和ontentType下的charset一致
[ isELIgnored="true | false" ]:指定当前JSP页面是否可以使用EL表达式,通常取值为True
2.include指令
- include指令用于通知JSP引擎在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称之为静态引入,当前JSP页面与静态引入的页面紧密结合为一个Servlet(即合并为一个Servlet文件)
- 语法:
其中的file属性用于指定被引入文件的 相对路径
- file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件
例:(静态包含)
a.jsp
b.jsp
结果:
三.JSP标签
1.概念:
- JSP还提供了一种称之为Action的元素,在JSP页面中使用Action元素可以完成各种通用的JSP页面功能,也可以实现一些处理复杂业务逻辑的专用功能。
- Action元素采用XML元素的语法格式,即每个Action元素在JSP页面中都以XML标签的形式出现。
- JSP规范中定义了一些标准的Action元素,这些元素的标签名都以jsp作为前缀,并且全部采用小写,例如,<jsp:include>、<jsp:forward>等等。
2.<jsp:include>标签:
用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
1)语法:
<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。
flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。
例:<jsp:include page="b.jsp"></jsp:include>
2) <jsp:include>标签与include指令的比较
<jsp:include>标签: 两个.jsp生成两个.class文件
include指令:两个.jsp生成一个Servlet文件
3.<jsp:forward>标签:用于把请求转发给另外一个资源(相当于一个转发)。
1)语法:
<jsp:forward page="relativeURL | <%=expression%>" />
例:<jsp:forwaard page="d.jsp"></jsp:forward>
相当于
<%
request.getRequestDispatcher(d.jsp).forward(request,response);
%>
2)使用jsp:forwaard :可使用jsp.param子标签向d.jsp传入一些参数,同样jsp:include也可以使用jsp.param子标签
page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。
4.当使用<jsp:include>和<jsp:forward>标签引入或将请求转发给的资源是一个能动态执行的程序时,例如Servlet和JSP页面,那么,还可以使用<jsp:param>标签向这个程序传递参数信息。
语法1:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
语法2:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
<jsp:param>标签的name属性用于指定参数名,value属性用于指定参数值。在<jsp:include>和<jsp:forward>标签中可以使用多个<jsp:param>标签来传递多个参数。
四.关于中文乱码(默认参数传送过程中为ISO8859-1)
1.在JSP页面输入中文,请求页面后不出现乱码:保证<%contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>,charset和pageEncoding的编码一致,且都支持中文,通常取值为UTF8,还需保证浏览器的显示的字符编码也和请求的编码一致
2.获取中文参数值:
1) 对于POST请求:只要在获取请求信息之前调用request.setCharacterEncoding("utf-8")即可
2)对于GET请求:上面方式对GET无效,可以通过修改Tomcat的server.xml文件的方式