JSP

简介

JSP:Java Server Page SUN 公司提供的动态⽹⻚编程技术,是 Java Web 服务器端的动态资源。

相⽐ html ⽽⾔,html 只能为⽤户提供静态数据,⽽ Jsp 技术允许在⻚⾯中嵌套 java 代码,为⽤户
提供动态数据。

相⽐ servlet ⽽⾔,servlet 很难对数据进⾏排版,⽽ jsp 除了可以⽤ java 代码产⽣动态数据的同时,
也很容易对数据进⾏排版。其实 Jsp 就是⼀个 Servlet.

注释

显示注释
从 HTML ⻛格继承⽽来 注释中的内容会被编译

隐式注释
1.JSP ⾃⼰的注释: <%----%>
2.从 JAVA ⻛格继承: // 注释,单⾏注释 /* 多⾏注释*/

Scriptlet

在 JSP 中最重要的部分就是 Scriptlet(脚本⼩程序),所有嵌⼊在 HTML 代码中的 Java 程序。
在 JSP 中⼀共有三种 Scriptlet 代码:都必须使⽤ Scriptlet 标记出来

第⼀种:<% %>: java 脚本段,可以定义局部变量、编写语句

<%
    int a = 1;
    String  str = "abc";
    //控制台打印
    System.out.println("控制台打印");
%>

第⼆种:<%! %>:声明,可以定义全局(成员)变量、⽅法、类

<%!
	String str2 = "efg"; 
%>

第三种:<%= %>:表达式,数据⼀个变量或具体内容

<%=str%>  <%=a%>

JSP的指令标签

使⽤包含操作,可以将⼀些重复的代码包含进来继续使⽤,从正常的⻚⾯组成来看,有时可能分为⼏
个区域。⽽其中的⼀些区域可能是⼀直不需要改变的,改变的就其中的⼀个具体内容区域。

include 静态包含

<%@ include file=“要包含的⽂件路径” %>

耦合度太高,声明同名变量会冲突,页面中的代码相当于是直接拷贝来的

<%@include file="03-页面引入2.jsp"%>
    
  

include 动态包含

动态包含在代码的编译阶段,包含和被包含部分是两个独⽴的部分,只有当运⾏时,才会动态包含进
来,好⽐⽅法的调⽤。

<jsp:include page=“include.jsp”>< /jsp:include >

注意:动态包含,中间不要加任何内容,包括空格,除⾮确认要使⽤参数,否则报错!

<%--动态包含--%>
<jsp:include page="03-页面引入2.jsp"></jsp:include>

<%
    String a = "hello.jsp";
%>
<jsp:include page="<%=a %>"></jsp:include>

使⽤动态包含还可以通过在⻚⾯之间传参。
接收参数通过 request.getParameter(name);

<jsp:include page="hello.jsp" flush="true">
<jsp:param name="uname" value="zhangsan"/>
</jsp:include>
<!-- hello.jsp接收参数 -->
<%=request.getParameter("uname")%>

JSP的四⼤域对象

四种属性范围

  1. page范围
    pageContext : 只在⼀个⻚⾯中保存属性,跳转之后⽆效
  2. request范围
    request : 只在⼀次请求中保存,服务器跳转后依然有效
  3. session范围
    session : 在⼀次会话范围中,⽆论何种跳转都可以使⽤
  4. application范围
    application : 在整个服务器上保存

方法

public void setAttribute(String name, Object o) 设置属性的名称及内容

public Object getAttribute(String name) 根据属性名称取属性

public void removeAttribute(String name) 删除指定的属性

EL表达式的使⽤

EL(Expression Language) 是为了使 JSP 写起来更加简单。

语法

语法结构: ${expression}

EL 表达式⼀般操作的都是域对象中的数据,操作不了局部变量。

域对象的概念:pageContext, request, session, application;

​ 范围依次是,本⻚⾯,⼀次请求, ⼀次会话,整个应⽤程序

EL 默认的查找⽅式为从⼩到⼤查找,找到即可。当域对象全找完了还未找到则返回空字符串""

当需要指定从某个特定的域对象中查找数据时可以使⽤四个域对象对应的空间对象,分别是:
pageScope, requestScope, sessionScope, applicationScope。

EL表达式的使用

获取数据

1>设置域对象中的数据

<%
pageContext.setAttribute("uname","zhangsan"); // page作⽤域
request.setAttribute("uname","lisi"); // request作⽤域
session.setAttribute("uname","wangwu"); // session作⽤域
application.setAttribute("uname","zaholiu"); // application
%>

2>获取域对象的值

<%-- 获取域对象中的数据:默认查找⽅式为从⼩到⼤,找到即⽌。若四个范围都未找到,则返回空字符
串。--%>
${uname} <!-- 输出结果为:zhangsan -->

3>获取指定域对象的值

${pageScope.uname} <!-- page作⽤域 -->
${requestScope.uname} <!-- request作⽤域 -->
${sessionScope.uname} <!-- session作⽤域 -->
${applicationScope.uname} <!-- application作⽤域 -->

4>获取list

<%
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>
<%--
获取List中指定下标的数据
${list[下标] }
获取集合的⻓度
${list.size()}
注:
list代表的是存在域对象中的变量名(限域变量名)
--%>
${list[1] }

5>获取map

${map[“key”] } 或 ${map.key }

<%
Map map = new HashMap();
map.put("aaa", "111");
map.put("bbb", 2222);
map.put("ccc-a", 333);
request.setAttribute("map", map);
%>
<%--
获取Map中指定值
${map["key"] } 或 ${map.key }
注:
map代表的是存在域对象中的变量名(限域变量名)
--%>
${map.aaa }
${map["bbb"]}

6>获取JavaBean对象

u s e r < ∗ ∗ {user} <%-- 获取对象 --%>** ** user<{user.uname} <%–获取对象中的属性–%>

javabean…

<%
User user = new User();
user.setUserId(1);
user.setUname("zhangsan");
user.setUpwd("123456");
request.setAttribute("user",user);
%>


<%-- JavBean中的属性字段需要提供get⽅法 --%>
${user} <%-- 获取对象 --%>
${user.uname} <%--获取对象中的属性--%>
empty

判断域对象是否为空。为空,返回true;不为空返回false;

<%--
empty
判断域对象是否为空。为空,返回true;不为空返回false;
${empty 限域变量名 }
判断对象是否不为空。
${!empty 限域变量名 }
--%>
${empty uname}
${empty list}
${empty map}
${empty user}
EL运算

设置域对象中的数据

<%
request.setAttribute("a", 10);
request.setAttribute("b", 2);
request.setAttribute("c", "aa");
request.setAttribute("d", "bb");
%>

1>⽐较两个值是否相等,返回true或false
== 或 eq

2>算术运算

加法: +
减法: -
乘法: *
除法: / 或 div

3>⼤⼩⽐较

⼤于:>
⼩于:<
⼤于等于:>=
⼩于等于:<=

${a == b }
${c == d }
${c eq d }
${a / b } 或 ${a div b }
${a + b >= 10 }
${a > b && b > 5 }
${a + b > 10 || a - b > 5 }
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐