JSP的内置对象:不用new,直接拿来就能用
JSP的9大内置对象
- 内置对象是指在JSP的<%=%> 和<% %>中可以直接使用的对象
对象名 |
类型 |
说明 |
request |
javax.servlet.http.HttpServletRequest |
|
response |
javax.servlet.http.HttpServletResponse |
|
session |
javax.servlet.http.HttpSession |
由session="true"开关 |
application |
javax.servlet.ServletContext |
|
exception |
java.lang.Throwable |
由isErrorPage="false"开关 |
page |
java.lang.Object当前对象this |
当前servlet实例 |
config |
javax.servlet.ServletConfig |
|
out |
javax.servlet.jsp.JspWriter |
字符输出流,相当于 printWriter对象 |
pageContext |
javax.servlet.jsp.PageContext |
pageContext(重要)
概述
本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据
范围从小到大依次是request《session《application
数据的存储方式:
- ServletContext 【application】 在整个应用是共享的,范围最大
- Session 在同一个浏览器同一个Sessionc才有效
- request 在同一个请求对象中有效【转发】
常用方法
Ø void setAttribute(String name,Object o);
Ø Object getAttribute(String name);
Ø void removeAttribute(String name);
操作其它域对象的方法
Ø void setAttribute(String name,Object o,int Scope);
Ø Object getAttribute(String name,int Scope);
Ø void removeAttribute(String name,int Scope);
scpoe的值:
Ø PageContext.PAGE_SCOPE
Ø PageContext.REQUEST_SCOPE
Ø PageContext.SESSION_SCOPE
Ø PageContext.APPLICATION_SCOPE
常用方法
Ø void setAttribute(String name,Object o);
Ø Object getAttribute(String name);
Ø void removeAttribute(String name);
操作其它域对象的方法
Ø void setAttribute(String name,Object o,int Scope);
Ø Object getAttribute(String name,int Scope);
Ø void removeAttribute(String name,int Scope);
scpoe的值:
Ø PageContext.PAGE_SCOPE
Ø PageContext.REQUEST_SCOPE
Ø PageContext.SESSION_SCOPE
Ø PageContext.APPLICATION_SCOPE
findAttribute(String name);
自动从page request session application依次查找,找到了就取值,结束查找。
pageContext获取其它的8个隐式对象
在普通类中可以通过PageContext获取其他JSP隐式对象。(其他八个)
pageContext的简易方法
pageContext.forward("2.jsp");
pageContext.include("2.jsp");
转发方式:
- 在Servlet中进行转发
- jsp内置标签
- pageContext内置对象
四大域对象:实际开发
- PageContext(page) : pageConext 存放的数据在当前页面有效。开发时使用较少。
- ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。
- HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。
- ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。
page和pageContext的关系 相等
JSP的EL表达式:
EL概述
- EL表达式:expression language 表达式语言,用于简化jsp中java代码开发。
- 它不是一种开发语言,是jsp中获取数据的一种规范
EL表达式是用来获取4大作用域数据的,是用来简化Java代码的
EL的使用方法:${作用域key.属性名} 实际上是调用了对应的方法get方法
EL的具体功能
获取数据
- EL表达式只能获取存在4个作用域中的数据
- ${u} 原理: pageContext.findAttribute("u");
- EL获取对于null这样的数据,在页面中表现为空字符串
- ${u.name} == u.getName()方法
点(.) 运算符相当于调了getter方法,点后页面跟的是属性名。
[]运算符
- []运算符:点能做的,它也能做; 它能做的,点不一定能做
- 举例: ${user.name}== ${user['name']} == ${user["name"]}
<%@page import="com.zx.model.Address"%> <%@page import="com.zx.model.User"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% //1.EL表达式 //jsp往request存数据 User user=new User("张大大","123","男"); user.setAddress(new Address("中国","陕西")); request.setAttribute("user", user); %> 显示数据:<br> <%-- <%=user.getName() %> <%=user.getPassword() %> <%=user.getGender() %> --%> 名字:${user.name} ------------${user['name']}<br> 密码:${user.password}<br> 性别:${user.gender}<br> 国家:${user.address.country}<br> 城市:${user.address.city}<br> </body> </html>
空运算empty
用于判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true
若集合为null,或者是集合没有元素,都返回true
字符串也是一样的
<% List<String> list1=null; List<String> list2=new ArrayList<String>(); list2.add("zx"); request.setAttribute("list1", list1); request.setAttribute("list2", list2); %> list1是否为空:${empty list1}<br> list2是否为空:${empty list2}<br> 结果: list1是否为空:true list2是否为空:false
EL的隐式对象:
${pageContext.request.contextPath}<br>
通过EL表达式获取上下文路径 作用:灵活设置Servlet的访问路径
${param【‘参数名’】}也可以
JSTL:JSP标签库的使用
使用步骤:
- 导入JSTL的jar包,然后在jsp页面顶部导入JSTL标签
- 在jsp中可以使用c:的形式使用标签
通用标签:set,out,remove----用于操作作用域数据
set:存一个变量值
out:取值
remove:从作用于移除变量
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%--JSTL:JSP标签库的使用 --%> 存数据:<c:set var="num" value="${5+8}" scope="page"></c:set><br> 取数据:<c:out value="${num}"></c:out><br> 移除数据:<c:remove var="num"/><br> 再次取出:<c:out value="${num}" default="8888"></c:out> </body> </html>
条件标签 if choose
1.test属性中写EL表达式
2.choose 内部y与when一起使用,相当于switch
forEach
var:放变量名 items:写El表达式,一般写作用域中的key
varStatus:变量状态
其中,forEach中的语句与下列代码意思类似:
for (String item:list){ }
迭代器
- c:forEach中的varStatus属性。
- 指向一个字符串,该字符串引用一个对象。 map.put("vs",一个对象);
- 这个对象记录着当前遍历的元素的一些信息:
- getIndex():返回索引。从0开始
- getCount():返回计数。从1开始
- sLast():是否是最后一个元素
- isFirst():是否是第一个元素
EL表达式中调用get方法,所以在表达式中只需要写出xx.index,或者xx.first即可(Boolean方法的get方法就是is方法)
MVC:
1.1软件开发模式
- C/S:客户端 / 服务器 (胖客户端)
- B/S:浏览器 / 服务器 (瘦客户端)
1.2 JavaBean的概念
- 就是一个普通类(实体bean),包含三样标准:
v 一个无参构造
v 私有属性
v 公共的getter和setter方法
1.3 MVC设计模式
- M:Model模型【JavaBean】
- V:View视图 【JSP】
- C:Controller控制器 【Servlet】
- JSP + Servlet + JavaBean
具体案例:
项目出现了一些问题,就不放代码了