JavaWeb学习笔记(12)

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

数据的存储方式:

  1. ServletContext  【application】   在整个应用是共享的,范围最大
  2. Session        在同一个浏览器同一个Sessionc才有效
  3. request    在同一个请求对象中有效【转发】

常用方法

Ø  void setAttribute(String name,Object o);

Ø  Object getAttribute(String name);

Ø  void removeAttribute(String name);

操作其它域对象的方法

Ø  void setAttribute(String name,Object oint 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 oint 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");

转发方式:

  1. 在Servlet中进行转发
  2. jsp内置标签
  3. 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标签库的使用

使用步骤:

  1. 导入JSTL的jar包,然后在jsp页面顶部导入JSTL标签
  2. 在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",一个对象);
  • 这个对象记录着当前遍历的元素的一些信息:
  1. getIndex():返回索引。从0开始
  2. getCount():返回计数。从1开始
  3. sLast():是否是最后一个元素
  4. 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

 具体案例:
  

 

 项目出现了一些问题,就不放代码了

 

猜你喜欢

转载自www.cnblogs.com/zhangwugai/p/11516502.html