jsp基础、指令、9个内置隐含对象、jsp标签、el表达式

来源:互联网 发布:彩票极限大数据 编辑:程序博客网 时间:2024/05/20 21:22

jsp基础

1、什么是jsp 一种服务器端的动态页面技术
本质就是一个servlet
2、如何写一个jsp
3、添加:
(1)html
(2)java代码
4、<%java代码 %>
jsp表达式
5、<%=java表达式 %>
6、jsp声明
<%!生命一个变量或者一个方法 %>

7、指令

什么是指令
指令会影响jsp的第一个阶段。对应的servlet类是什么样子
通知容器再将jsp转换成servlet类时做一些额外的处理(导一些包等)
指令的格式
<%@指令名 属性=值%>
掌握3个指令
a.page指令
import属性
pageEncoding属性 告诉编码方式
contentType属性
session属性:true false 默认是true 当这个值为false时,不能使用session隐含对象

这里写图片描述

errorPage属性:指定一个异常处理页面的
isErrorPage属性:true/false 默认是false 为true时,表示这是一个异常处理页面,就可以使用exception隐含对象。为false就不能用这个exception对象了

例子,写一个页面,故意写个带异常的。然后利用 errorPage属性和isErrorPage属性

a2.jsp <body>   <%    String str = "123a";   Integer.valueOf(str);   %><%@page errorPage="a3.jsp" %>  </body>a3.jsp <%@page isErrorPage="true" %>  <body>    This is my Error page. <br>    <%=exception.getMessage() %>  </body>

这里写图片描述

b.include指令 包含
就只有一个属性 file属性
告诉容器再将jsp文件转成servlet类的时候,将file属性指定的文件的内容插入到该指令的位置
可以把员工管理的emplist.jsp改一下
发现很多文件的头和尾的内容是一样的。那么就可以把头和尾单独拿出来。做两个jsp
然后用对应的位置<%@include=”xxx.jsp”%> 转成servlet时,会直接把文件的内容插进去

c.taglib指令
用来引入jsp标签的

8、隐含对象

什么是隐含对象?
为什么可以直接使用
有哪些隐含对象
out
requst
response
session
application
exception
pageContext
config
page (用的很少,几乎没有)

page 是jsp实例本身 ,就是servlet实例

重点是pageContext
1、容器会为每一个jsp实例创建唯一的一个符合PageContext接口要求的对象 一个jsp对应一个pageContext
2、持久性 ,因为就是上下文嘛。这个jsp没有被销毁就会一直存在。
作用:
1、绑定数据 (绑定到对应的pageContext,只有对应的才能获取)
setAttribute getAttribute removeAttribute

<body>    <%    pageContext.setAttribute("user", "Recar");     %>    <%=pageContext.getAttribute("user") %>  </body>

这里写图片描述

2.获得其他所有的隐含对象

另一个隐含对象config

读取初始化参数
也可以用他获取上下文
因为也可以对jsp进行配置,就是在web.xml进行配置

<%=config.getInitParameter("user") %> <servlet>  <servlet-name>a6</servlet-name><jsp-file>/a6.jsp</jsp-file>  <init-param>  <param-name>user</param-name>  <param-value>Recar</param-value>  </init-param>  </servlet>  <servlet-mapping>  <servlet-name>a6</servlet-name>  <url-pattern>/ddd.html</url-pattern>  </servlet-mapping>

注意:写的是 jsp-file 而不是 servlet-class !!!

这里写图片描述

重点是 out request response session exception 还有pageContext

8、注释:

jsp文件中写注释:

1、<!--注释内容-->
2、<%--注释内容--%>

第一种注释,如果注释的内容是java代码,则java代码会执行,第二种,如果是java代码就会忽略。
第一种是会执行,但是被html注释给注释掉了。可以在源代码中看到

第二种的话,转成servlet就不会执行。

9、jsp标签和el表达式

(1)什么是jsp标签:
jsp标签用来替换jsp文件中的java代码,因为直接在jsp文件写java代码不方便jsp文件的维护(比如,将jsp文件交给美工去修改就很不方便),所以,sun制定了jsp标签技术规范。
可以将jsp标签看做是一个占位符,容器遇到jsp标签之后,会依据标签名找到标签类,然后调用执行标签类中的代码。
使用jsp标签有两个好处;
jsp文件很好维护、可以将标签复用。(把一些常用的代码封装成jsp标签)
(2)什么是el表达式
是一套简单的运算规则,用于给jsp标签的属性赋值,也可以直接输出。

(3)el表达式的使用
1)访问bean的属性
javabean :规范
有属性,有对应的get,set方法就可以叫bean
比如一个类Employee
属性:name、salary、age、getName、等
a、方式一:
${user.name}
如何执行的
容器会依次从pageContext,request,response,session,application中查找绑定名为”user”的对象。找到该对象后,会调用该对象的”getName”方法,最后输出。
注意:
会将null转换成”null”输出
找不到对象也会输出””
代码:

先写了一个类 User.java

package bean;public class User {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}
<body> <%@page import="bean.*" %><%User user = new User();user.setName("Recar");user.setAge(20);request.setAttribute("user", user); %>name:${user.name}<%//正常写法,不用el表达式/* User user1 = (User)request.getAttribute("user");out.print(user1.getName()); */ %> 

这里写图片描述

如果在session上也绑定了一个user。还是这么写。还是会显示request的。因为是按查找顺序的。

如果想指定查找范围:
pageScope,requestScope,sessionScope,applicationScope
指定:即 ${sessionScope.user.name}

b、方式二
${user[“name”]} 等价于 user.name

这里写图片描述

具有第一种方式不具有的特性:
[]中可以写一个绑定名

<% request.setAttribute("str", "age");%><br>str: ${user[str]} !!!

先给request绑定str 值是age
那么user[]中写的str ,是绑定的名字。会查找str。找到,然后把str替换成其值。也就是age 。也就变成了 user[“age”]
所以就返回了bean中的age值

这里写图片描述

[]中还可以出现从0开始的下标,用于访问数组中的某个元素。

先给bean类中增加一个数组

private String[] interest;    public String[] getInterest() {        return interest;    }    public void setInterest(String[] interest) {        this.interest = interest;    }

然后在jsp中设置user的属性-数组
user.setInterest(new String[]{“cooking”,”learning”});

然后在后面用表达式获取
interest:${user.interest[0]}

获取的就是数组interest的第一个元素

这里写图片描述

1)比如${user.card.id}
就是先查找绑定的user,然后调用getCard(),返回的对象再次调用getId()方法

2)进行一些简单的运算
运算的结果可以给jsp标签的属性赋值,也可以直接输出
a.算术运算 + - * /
算术运算 ${1+1}
这里写图片描述

但是只能求和,不能做连接运算就是说 “2”+”4” 运算完是6

b.关系运算 > >= < <= == !=
关系运算 ${2>1}

<%request.setAttribute("str1", "abc"); %> ${"abc"==str1}

str1 是绑定名,所以可以直接写~

这里写图片描述

c.逻辑运算 && || !
逻辑:${1<2&&2>3}

d.empty运算
用来判断集合是否为空,或者是否是一个空字符串。
先创建一个集合 List 然后绑定到request。
后面是先查找list1,然后判断是否为空empty,空就是true

<%  List list1 = new ArrayList();  request.setAttribute("list1", list1);   %> empty:${empty list1}

这里写图片描述

还有 null 也是返回true

 null       ${empty null }

或者找不到也是返回true

 找不到      ${empty aaa}

这里写图片描述

3)读取请求参数值

比如 e3.jsp?username=Recara.${param.username}等价于request.Parameter(“username”)b.${paramValues.city}等价于request.getParameterValues(“city”)如:  username:${param.username}

这里写图片描述

city:${paramValues.city[0]}

这里写图片描述

0 0
原创粉丝点击