JSP本身也是一个servlet
1.基本语法
1).html注释<!-- 注释内容 -->:
2).隐藏注释:<%-- ?--%>,这种注释JSP编译时会忽略,不会显示在客户的浏览器和源代码。这个要保密。
3).JAVA代码:
<% JAVA %>:JAVA的内容只能是申明变量,编译完成是service方法里的变量,也就是声明的变量是局部变量
可以执行类的调用
<%! %>:JAVA的内容申明变量和方法,但不能调用属性和方法;
编译完成后所声明的变量为类的一属性,方法为另一单独方法存在在类中
不能进行方法的调用
4).表达式:<%= 内容 %>,内容直接打印在页面,注意要有“;”;
编译完成后,在service中以out.println("内容");形式存在?
2.内置对象(前5个为常用的)
1).request:(常用方法均为getXXXX,获得页面传过来的信息)
request生命周期:当第二次请求时,上一次的request生命周期结束;
又重新获得request,虽然与上一个有相同的地址,但是值已经被刷新了。
**页面中如果想用setAttribute("name","value")中来进行传值,
用超链接或者是用response.sendRedirect()进行重定向跳转,值都会被刷新;
只能是用request.getRequestDischatcher("").forward(request,response);进行跳转
2).response
**request和response中所以用到的流均以二进制流进行传输
3).pageContext
.getSession();
4).session:
生命周期:
.getCreationTime();返回的时间也就是系统时间
.invalidate();取消该session,使其失效
5).application
用来展示共享的信息,相当于整个工程的全局变量
**可用来统计在线人数:session.isNew();session.get/setAttribute("")/("","");
6).out
7).config
8).page
9).exception
3.指令(page,include,taglib)
1).<%@ 指令 属性名="值" %>;属性名称大小写敏感,属性与属性之间空格隔开,不要有任何其他的符号
page:都是相对于当前页面
language="java";默认为java,不写也可以
import="";
session="";
pageEncoding="";默认是工程编码
errorPage="page-rul";处理错误异常所跳转的页面
isErrorPage="true";默认是false,这个在错误页面必须标识
2).include:在编译时可以将外部文件内容合并编译到一个servlet中
对也页面重复的内容可以写成单独的页面,然后在需要的时候在引入这个页面
**重复的head内容,应该清楚
<%@ include file="url"%>
**在JSP页面中,<%@ page pageEncoding="" %> <meta charset="">
前者是告诉编译器以神马方式编码,后者是告诉浏览器以神马编码解析文件
3).taglib:<%@ taglib uri="" prefix=""%>
4.JSP标签
jsp:useBean:一般的普通javaBean类
<jsp:useBean id="beanName" class="package.class" scope="page|request|session|application">?
</jsp:useBean>
scope:是对使用的权限进行设置
**jsp:get/set 必须跟在一个jsp:userBean之后,而且jsp:get/set中的name与jsp:userBean中的id一样
jsp:getProperty:相当与javaBean类的get方法
<jsp:getProperty name="useBeanId" property="属性"/>
jsp:setProperty:相当与javaBean类的set方法
<jsp:setProperty name="useBeanId" property="属性" value="值"/>
jsp:include:
<jsp:include page="">
<jsp:param name="parameter" value="value" />//传递参数
</jsp:include>
***jsp:include与<%@ include file="" %>
A.前者在请求处理阶段执行引入,后者在编译阶段执行
5.EL表达式
尽量减少在页面书写JAVA表达式子
1).<%! 申明name的内容 %>
<%= "name" %> ==> ${"name"}
2).在EL表达式中,数字,字符串,布尔值和null了都可以被指定为文字值,展现出来都是一字符串
3).运算符基本相似,能识别的表达式都可以进行计算(与JavaScript中的eval(表达式)类似)
****声明好的变量需要执行ruquest.setAttribute(name,value);使用EL表达式${name}才能取得到value
****如果在内置对象中有多个同名的参数,读取顺序以下为标准进行查找,若为找到则返回null
pageContext --> request --> session --> application
4).存取器
[] :内加"",'',输出对象属性名对于的值
. ?:属性
**user["userName"] == user['userName'] == user.userName
**对于集合的List[].中为数组下标.
***牛叉的是,数组小标越界或不规范取不到值,但不会报错
**MAP操作,mapName.key.
5).隐藏对象
6.JSTL,取值都是用${}进行取,不能进行逻辑,但可以进行简单的运算
J2EE1.4之前的版本需要收到导入JAR包
配置:
<% taglib="" p%>
用途:输出值
?<c:set var="" value=""></c:set>
?<c:foreach var="" ></c:foreach>
?
****编码转码:
在地址栏中输入的内容包含参数(超连接<a href=""></a>或者是JS中的window.location.href="")
,request与response以及过滤器是不能对他进行编码的,如果当中的内容有中文,会出现乱码
Byet[] byte = request.getParameter("parameterName").getBytes("ISO-8859-1");
new String(byte,"utf-8");
或者是使用修改服务器的XML
在tomcat中的端口添加URIEncoding="utf-8"
**如果已经有对地址栏进行转码,再使用以上任一种方式,都会再次出现乱码;
因为原来的编码是以"ISO-8859-1",转换过后的编码已经不在是"ISO-8859-1",一个中文不再是原先的两个字节