1. JSP的指令 49
- 指令的作用:指导JSP的翻译引擎如何工作(指导当前的JSP翻译引擎如何翻译JSP文件。)
1.1 指令包括哪些呢? 49
- include指令:包含指令,在JSP中完成静态包含,很少用了。
- taglib指令:引入标签库的指令。这个到JJSTL标签库的时候再学习。现在先不管。
- page指令:目前重点学习一个page指令。
1.2 指令的使用语法是什么?
<%@指令名 属性名=属性值 属性名=属性值 属性名=属性值....%>
1.3 关于page指令当中都有哪些常用的属性呢?
1.3.1 举例
<%@page session="true|false" %>
true表示启用JSP的内置对象session,表示一定启动session对象。没有session对象会创建。
如果没有设置,默认值就是session="true"
session="false" 表示不启动内置对象session。当前JSP页面中无法使用内置对象session。
<%@page contentType="text/json" %>
contentType属性用来设置响应的内容类型
但同时也可以设置字符集。
写法一
<%@page contentType="text/json;charset=UTF-8" %>
写法二
<%@page pageEncoding="UTF-8" %>
pageEncoding="UTF-8" 表示设置响应时采用的字符集。
<%@page import="java.util.List, java.util.Date, java.util.ArrayList" %>
<%@page import="java.util.*" %>
import语句,导包。
<%@page errorPage="/error.jsp" %>
当前页面出现异常之后,跳转到error.jsp页面。
errorPage属性用来指定出错之后的跳转位置。
<%@page isErrorPage="true" %>
表示启用JSP九大内置对象之一:exception,它可以在控制台提示错误信息
默认值是false。
代码在E:\java学习\javaWeb\course\course23\web
5. jsp
<%--page指令 49--%>
<%--<%@page session="true" %>--%>
<%--<%@page session="false" %>--%>
<%--<%@page contentType="text/html" %>--%>
<%--<%@page contentType="text/json" %>--%>
<%--<%@page contentType="text/json;charset=UTF-8" %>--%>
<%--<%@page contentType="text/json" pageEncoding="UTF-8" %>--%>
<%--<%@page import="java.util.List, java.util.Date, java.util.ArrayList" %>
<%@page import="java.util.*" %>--%>
<%@page errorPage="/error.jsp" %>
<%
String name = null;
// 空指针异常
name.toString();
%>
error. jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--在错误页面可以启用JSP九大内置对象之:exception 49--%>
<%--exception内置对象就是刚刚发生的异常对象。--%>
<%@page isErrorPage="true" %>
<html>
<head>
<title>error</title>
</head>
<body>
<h1>网络繁忙,稍后再试!!!</h1>
<%
//打印异常堆栈信息,输出到后台控制台,exception是九大内置对象之一。
exception.printStackTrace();
%>
</body>
</html>
2. JSP的九大内置对象 49
- jakarta.servlet.jsp.PageContext pageContext 页面作用域
- jakarta.servlet.http.HttpServletRequest request 请求作用域
- jakarta.servlet.http.HttpSession session 会话作用域
- jakarta.servlet.ServletContext application 应用作用域
- pageContext < request < session < application
- 以上四个作用域都有:setAttribute、getAttribute、removeAttribute方法。
- 以上作用域的使用原则:尽可能使用小的域。
- java.lang.Throwable exception 异常
- jakarta.servlet.ServletConfig config (就是一个类 接口,或者对象)
- java.lang.Object page (其实是this,指当前的servlet对象)
- jakarta.servlet.jsp.JspWriter out (负责输出)
- jakarta.servlet.http.HttpServletResponse response (负责响应)
3. EL表达式 49
3.1 EL表达式是干什么用的? 49
- Expression Language(表达式语言)
- EL表达式可以代替JSP中的java代码,让JSP文件中的程序看起来更加整洁,美观。
- JSP中夹杂着各种java代码,例如<% java代码 %>、<%=%>等,导致JSP文件很混乱,不好看,不好维护。所以才有了后期的EL表达式。
- EL表达式可以算是JSP语法的一部分。EL表达式归属于JSP。
3.2 EL表达式出现在JSP中主要是: 49
- 从某个作用域中取数据,然后将其转换成字符串,然后将其输出到浏览器。这就是EL表达式的功效。
3.2.1 三大功效: 49
- 第一功效:从某个域中取数据。
- 四个域:
- pageContext
- request
- session
- application
- 第二功效:将取出的数据转成字符串。
- 如果是一个java对象,也会自动调用java对象的toString方法将其转换成字符串。
- 第三功效:将字符串输出到浏览器。
- 和这个一样:<%= %>,将其输出到浏览器。
EL表达式很好用,基本的语法格式:
${表达式}
代码在E:\java学习\javaWeb\course\course23\web
6. jsp
<%--EL表达式举例 49-50--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%
//向request作用域当中存储username为zhangsan
request.setAttribute("username","zhangsan");
request.setAttribute("obj",new Object());
%>
<%--将request域当中的数据取出来,并且还要输出到浏览器,使用java代码怎么办--%>
<%=request.getAttribute("username")%>
<br>
<%=request.getAttribute("obj")%>
<br>
<hr>
<%--使用El表达式--%>
${username}
<br>
${obj}
3.3 EL表达式的使用:50
将User对象存储到某个域当中。一定要存,因为EL表达式只能从某个范围中取数据。数据是必须存储到四大范围之一的。
<%
// 创建User对象
User user = new User();
user.setUsername("jackson");
user.setPassword("1234");
user.setAge(50);
// 将User对象存储到某个域当中。一定要存,因为EL表达式只能从某个范围中取数据。
// 数据是必须存储到四大范围之一的。
request.setAttribute("userObj", user);
%>
3.3.1 使用EL表达式取
${这个位置写什么????这里写的一定是存储到域对象当中时的name}
要这样写:
${userObj}
等同于java代码:<%=request.getAttribute("userObj")%>
你不要这样写:${"userObj"}
3.4 面试题: 50
${abc} 和 ${"abc"}的区别是什么?
${abc}表示从某个域中取出数据,并且被取的这个数据的name是"abc",之前一定有这样的代码: 域.setAttribute("abc", 对象);
${"abc"} 表示直接将"abc"当做普通字符串输出到浏览器。不会从某个域中取数据了。
3.5 ${userObj} 底层是怎么做的? 50
从域中取数据,取出user对象,然后调用user对象的toString方法,转换成字符串,输出到浏览器。
3.5.1 如果想输出对象的属性值,怎么办?50
${userObj.username} 使用这个语法的前提是:User对象有getUsername()方法。
${userObj.password} 使用这个语法的前提是:User对象有getPassword()方法。
${userObj.age} 使用这个语法的前提是:User对象有getAge()方法。
${userObj.email} 使用这个语法的前提是:User对象有getEmail()方法。
EL表达式中的 . 这个语法,实际上调用了底层的getXxx()方法。
注意:如果没有对应的get方法,则出现异常。报500错误。
${userObj.addr222.zipcode}
以上EL表达式对应的java代码:
user.getAddr222().getZipcode()
代码在com.bjpowernode.javaweb.jsp.bean
User
package com.bjpowernode.javaweb.jsp.bean;
//一个javabean关于学习EL的 50
public class User {
private String username;
private String password;
private int age;
private Address addr;
public Address getAddr222() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
// @Override
// public String toString() {
// return "User{" +
// "username='" + username + '\'' +
// ", password='" + password + '\'' +
// ", age=" + age +
// '}';
// }
public User() {
}
public User(String username, String password, int age) {
this.username = username;
this.password = password;
this.age = age;
}
public String getUsername() {
System.out.println("getUsername()方法执行了");
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
System.out.println("getPassword()方法执行了");
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
System.out.println("getAge()方法执行了");
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
* 这个方法只是一个get方法而已。类中并没有声明email属性。
* 使用EL表达式可以获取Email吗?
* @return
*/
public String getEmail(){
return "[email protected]";
}
}
Address
package com.bjpowernode.javaweb.jsp.bean;
//一个javabean 关于学习EL的 50
public class Address {
private String city;
private String street;
private String zipcode;
public Address() {
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
7.jsp
<%--EL表达式的使用 50--%>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.User" %>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.Address" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%
//创建User对象
User user = new User();
user.setUsername("jackson");
user.setPassword("1234");
user.setAge(50);
//创建地址Address对象
Address a = new Address();
a.setCity("北京");
a.setStreet("大兴区");
a.setZipcode("1111111");
user.setAddr(a);//这个是将地址对象存入user对象(因为地址对象那个是用户对象的一个属性)
//将User对象存储到request域当中
request.setAttribute("userObj",user);
%>
<%--使用EL表达式,从request当中取出User对象,并将其输出到浏览器--%>
<%--1.EL表达式会自动的从某个范围内取数据 2.将其转化成字符串 3.将其输出到浏览器--%>
${userObj}
<br>
<%--你想输出的是user对象的username属性--%>
${userObj.username}
<br>
<%--输出password--%>
${userObj.password}
<br>
<%--输出年龄age--%>
${userObj.age}
<br>
<%--输出email--%>
${userObj.email}
<br>
<%--取出User对象是哪个城市的?--%>
城市:${userObj.addr222.city}
街道:${userObj.addr222.street}
邮编:${userObj.addr222.zipcode}
标签:El,String,EL,page,JSP,userObj,public,表达式
From: https://blog.51cto.com/u_15784725/6402283