Jsp:可以写JAVA代码的html页面。。其实就是一个servlet::简化了之前servlet自己输出html标签的工作。。
Java Server Pages:Java服务器端页面。。。
出现的原因:之前是用getWriter流输出html页面。。。。但是如果比较复杂。。。这么输出费劲。。所有有了JSP
服务器将jsp转换成java类,服务器启动编译器,将.java编译成.class文件。访问字节码文件。。。
jsp就是一个servlet...是由服务器转换成的servlet:
jsp中如何写java代码:jsp脚本:用于定义java代码:(jsp是servlet,就好理解 jsp脚本的使用了) JSP脚本写好后,不需要重启服务器就可以生效。
<% System.out.println("Hello,World"); %>
<%! %> 定义成员内容:成员变量,成员方法 (用的较少,因为servlet中,最好不用成员变量 )
<%= %> 定义service方法的输出语句(输出到页面中的语句)写完后不能加分号。。
<% %>定义局部内容:service方法中的局部内容,局部变量。。
jsp内置对象:在jsp不需要创建可以直接 使用的对象:共9个。。。。(request,response,session,out等等)
html和 java代码混合,维护性差。不适合分工。。。所以不适合大面积书写。。。。
JSP注释:首先html注释:<!-- -->,不能注释java代码
jsp专用注释:<%-- --%>
JSP指令:配置 jsp或者导入文件,
<%@ 指令名称 属性=属性值%>
<%@ page language="java" import="java.util.*,java.io.FileInputStream" import="java.io.*"pageEncoding="UTF-8"%>:用于配置jsp信息
属性:1,,language:指定jsp使用的语言环境
2,import:因为写java代码需要导包,写在这个位置。可以写多个
3,pageEncoding:页面的编码是UTF-8,,指定当前页面的编码并通知浏览器服务端使用的编码
4,contentType:告诉浏览器服务端使用的编码。。
5,errorPage:当该页面出现异常,则跳转到errorPage指定的页面中。一般在web.xml文件里配置<error-page><error-code></error-code><location></location></error-page>
6,isErrorPage:是否是错误页面,出错后跳转到该页面。。如果是true,则可以通过exception内置对象,获取上一页面的异常信息。。
7,session:true/false 是否在支持session内置对象。。
8,isELIgnored:是否支持 el表达式。
<%@ include %>:用于静态包含。。用于包含相同的页面。。
<%@ include file="/b.jsp"%>
静态包含的特点:1,最终只有一个.class文件;
<%@ taglib %>:加载资源,(加载标签库)
JSP标签:
1,<jsp:useBean>
2,<jsp:setProperty>
3,<jsp:useBean>
4,<jsp:include>动态包含
5,<jsp:forward>转发
6,<jsp:param>传递请求参数
JSP内置对象:jsp可以 直接使用的对象。。因为servlet中的service方法中,已经定义了
1,application: 类型servletContext
2,session
3,request
4,pageContext : 域对象 页面域
pageContext.setAttribute("msg","haha");
用法/用途:后期不定义java代码时,可以存入域,并取出来用。。。
获出其他8个内置对象:pageContext.getXXXX();没有web环境时
5,response
6,out 输出流:在jsp中,使用out向页面输出。
7,config :servletConfig对象
8,page:当前页面的对象。相当于this
9,exception : Throwable
el表达式:Expression Language
特殊规则字符串,用于替换jsp页面的java代码,简化书写
格式:${表达式}
${1}相录于<%=1%>
运算符:很多,,重点解物释下empty
${empty msg}用来判断msg是否为空。。不仅可以判断是否为null ,还可以判断容器大小是否为零。
not:非的意思。。
获取域中存储的数据 : requestScope sessionScope applicationScope,pageScope
如果: request.setAttribute("msg","hello");
可以 通过 ${requestScope.msg}取到“hello”
取对象:${requestScope.p.name}
取list集合中的数据:${sessionScope.list[0]}
取map集合中的数据:${pageScope.map.p1.name}或者:${pageScope.map["p1"].name}//用遍历
简化格式:不需要加域对应的内置对象,直接获取:如上写成${map.p1.name} ::为什么可以这么写??
如果不加el内置对象名称,会从每一个域中依次查找,直到找到为止。查找顺序,从小到大 pageScope->applicationScope。。如果没有找到则返回空字符串""
JSTL:jsp standard tag library jsp标准标签库
功能:用于替换页面上的java代码,简化书写
分类:
core:
fmt:
sql:
xml:
function:
使用步骤:
1,导入标签库 使用taglib指令
<%@ taglib prefix="c" uri=http://java.sun.com/jsp/jstl/core%>
2,使用
<c:if test="表达式">
hello//表达式为true时,输出hello
</c:if>
core标签使用:一共12个标签
1,c:out
2,c:set 向域中设置值
<c:set var="键名" value ="值" scope="4个域" ></c:set>
3,c:remove
4,c:catch
5,c:if 进行if逻辑判断
<c:if test="表达式">
//如果表达式为真,则执行此处的语句
</c:if>
6,c:choose
7,c:forEach:循环遍历
<c:forEach begin ="1" end="9" var="i" step="1">
${i}
</c:forEach>
<c:forEach items = "${list}" var="p" varStatus="s"> //items是容器,一般通过el从域中获取;var:容器中的对象 varStatus:循环的次数
<tr>
<td>s.count</td>
<td>${p.name}</td>
<td>${p.age}</td>
<td>${p.gender}</td>
</tr>
</c:forEach>
8,c:url :简化形式定义路径
1,自动补全:<a href = "<c:url value='/jstl3.jsp'/>">jstl3</a>
2,自动url重写:
。。。。
自定义标签:
原理:java代码。。
步骤:
1,定义java类,实现 SimpleTag
2,在web-inf 下定义一个tld文件,配置该标签
3,导入标签库后可以使用