jsp简介
jsp(java Server Pages):是java语言为基础的动态网页开发技术,相当于是一个servlet,在html页面中嵌入java代码。
JSP语法
1.变量和方法的声明:<%! 方法、属性 %>
2.使用<% 编写java代码%>,java方法里面能放什么 他就能放什么,里面的输出语句用 out.println();
3.输出语句 <%= %> java system.out.println();括号里面能放什么,它就能放什么。
JSP的注释
JSP注释: <%-- --%>
include指令
<%@ include file="path" %>
静态包含,先将页面包含进来,在进行处理,属于先包含后处理,include指令也不支持Servlet路径。
include行为
<jsp:include page="path" > <jsp:param value="zhangsan" name="userName"/> 设置参数。动态包含,先将各个页面分别处理,处理完之后在将处理后的结果包含进来。
include行为是可以传递参数的。而include指令是不能传递参数的!有些人会有疑问了,那可以这样写啊,<%@ include file="/index.jsp?userName=zhangsan" %> ,我也曾经这样想过,可事实上是不可以的,因为file属性只能填写一个页面地址(index.jsp或者index.html这种),后面不能带任何的参数,如果带了参数,那就会把/index.jsp?userName=zhangsan这个整体看做是一个页面路径,换句话说会把/index.jsp?userName=zhangsan这句话当成一个整体的页面路径,而项目中根本就没有叫/index.jsp?userName=zhangsan的这个页面。
JSP九大内置对象和四大作用域
九大:page、config、application、request、response、session、out、exception、pageContext
page:page对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象。相当于this。
config:标识Servlet配置,类型:ServletConfig,api跟Servlet中的ServletConfig对象是一样的,能获取该servlet的一些配置信息,能够获取ServletContext
application:标识web应用上下文,类型:ServletContext,详情就看Servlet中的ServletContext的使用
request:请求对象,类型:httpServletRequest
response:响应对象,类型:httpServletResponse
session:表示一次会话,在服务器端记录用户状信息的技术
out:输出响应体 类型:JspWriter
exception 表示发生异常对象,类型 Throwable,使用它,必须结合page指令中的isErrorPage属性和errorPage属性。
pageContext:表示 jsp页面上下文(jsp管理者) 类型:PageContext
pageContext可以获得jsp的所有内置对象,如获取四大作用域:
第一种做法:使用pageContext.getAttribute("attributeName",PageContext.SESSION_SCOPE);去取出session对象中值
第二种做法:使用session.getAttribute("attributeName");去取出session对象中值
提供作用域常量
PageContext.PAGE_SCOPE page
PageContext.REQUEST_SCOPE request
PageContext.SESSION_SCOPE response
PageContext.APPLICATION_SCOPE application
四大作用域
page、request、session、application
page作用域:代表变量只能在当前页面上生效
request:代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B
session:代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。
application:代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。
el表达式
语法:${key.属性}
在使用el表示式时,要在servlet中设置一个作用域来存储,在转发到jsp页面中通过el来获取值。
request.setAttribute("u", users1);
${u.username }//取值
${} 默认取值 是从作用域从小到大取值
如果不知道作用域的时候 默认从小到大 从PageContext(page)开始查找
如果要指定作用域 由各大作用域的别名+Scope指定 ${requestScope.key}
jstl标签库
步骤:1.导入架包 2.添加标签库<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3.使用语法:<c: >
大概 的使用方式:
items:表示需要循环的数组。
var : 表示将每一个值赋值到该变量中
vsStats : 专门用来获取下标的方法,index 从下标为0开始,count 从下标为1开始,last是否是最后一个元素,first是否是第一个元素
相当于java中的foreach循环
<c:foreach items = "${}" var = "s",vsStats="vs">
<c:foreach>
相当于java中的if循环
<c:if test = "${逻辑表达式}">
<c:if>
相当于java中的if-else循环
<c:choose>
<:when test="${}"><c:when>
<c:otherwise><c:otherwise>//相当于else
<c:choose>
fmt标签
fmt主要用来格式化输出的,通常需要格式化时间和金钱
1.添加标签库<fmt:formatDate value="${customer.date}" pattern="yyyy-MM-dd"/>
2.使用<li>时间:<fmt:formatDate value="${customer.date}" pattern="yyyy-MM-dd"/></li>