热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jspeljava_第75节:Java的中的JSP,EL和JSTL

第75节:Java中的JSP,EL和JSTL哭吧看不完的!!!Cookie和Session请求转发和重定向的区别:地址不一样请求次数也不一样数据无法传递4.跳转范围有

a28fb64e777525d66c2eb3378117208e.png

第75节:Java中的JSP,EL和JSTL

哭吧看不完的!!!

cb572acd5639eef3eff034fd3d92f155.png

COOKIE和`Session

请求转发和重定向的区别:

地址不一样

请求次数也不一样

数据无法传递

4.跳转范围有限制

效率

请求转发请求1次,只能对当前项目跳转,重定向请求2次.重定向是无法传递的,重定向对跳转范围没有限制.

COOKIE是服务器发送给客户端,存储在客户端的小数据.发送COOKIE:

COOKIE COOKIE = new COOKIE("key", value");

response.addCOOKIE(COOKIE);

服务器返回COOKIE给客户端

// 响应头

Set-COOKIE: a=b

接收COOKIE

COOKIE[] COOKIEs = request.getCOOKIEs();

客户端提交数据的COOKIE

// COOKIE: a=b;c=d;

COOKIE分会话COOKIE和持久COOKIE

关闭COOKIE,可以关闭浏览器.

持久的COOKIE,在一段时间内有效

COOKIE COOKIE = new COOKIE("a","b");

COOKIE.setMaxAge(); // 秒

response.addCOOKIE(COOKIE);

COOKIE.setDomain(".dashucoding.com");

// 只有带上这个域名的时候,才会有COOKIE

// 例如:www.dashucoding.com

COOKIE..setPath("/Demo");

// 要进行访问上面的路径才会带COOKIE

http://localhost:8080/Demo

移除COOKIE

COOKIE COOKIE = new COOKIE("a","b");

COOKIE.setMaxAge(60*60*24);

response.addCOOKIE(COOKIE);

// 获取以前COOKIE,设置有效期

COOKIE[] COOKIEs = request.getCOOKIEs();

COOKIE COOKIE = COOKIEUtil.findCOOKIE(COOKIEs,"a");

COOKIE.setMaxAge(0);

reponse.addCOOKIE(COOKIE);

COOKIE是存在客户端的.

可以创建一个新的COOKIE去替换

COOKIE COOKIE = new COOKIE("a","dashu");

COOKIE.setMaxAge(0);

response.addCOOKIE(COOKIE);

Session是基于COOKIE的一种会话技术.COOKIE的安全隐患,是把数据存放在客户端,下次访问时,带上这个数据,服务端就知道客户端是谁.

Session的数据是存放在服务端.

session对应sessionid传递给客户端,是通过COOKIE传递的.只要有sessiondi,就可以获取以前的数据.

HttpSession session = request.getSession();

session.setAttribute();

sesssion.getAttribute();

package com.dashucoding.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

* Servlet implementation class Demo01

*/

public class Demo01 extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

HttpSession session = request.getSession();

// 得到会话ID

session.getId();

// 存值

//session.setAttribute(name, value);

// 取值

//session.getAttribute(name);

// 移植

//session.removeAttribute(name);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

doGet(request, response);

}

}

session创建:

request.getSession

销毁

关闭服务器,或自动会话过期,默认时间为30分钟.

在进行访问浏览器时,再次重启是无法获取以前的数据的,因为sessionid是通过COOKIE来传递的,COOKIE没有设置有效期,关闭后,就COOKIE删除了,同时COOKIE带过来sessionid同样也没有了.

手动设置COOKIE

String id = request.getSession().getId();

COOKIE COOKIE = new COOKIE("JSESSIONID",id);

COOKIE.setMaxAge(60*60*24*7);

response.addCOOKIE(COOKIE);

JSP和EL和JSTL

什么是JSP

JSP就是一个网页而已,或者是一个Java类,继承了servlet,所以jsp是一个servlet.

jsp设计目的是因为html是显示静态内容,有时网页要一些动态数据.html是不支持java代码,jsp支持java代码.

写法

指令

language

contentType内容类型

content-Type="text/html;charset=UTF-8"

pageEncoding jsp内容编码

extends="httpjspbase"

用于指定jsp翻译成java文件后,继承的父类是谁

import导包使用,一般不用手写

session

true or false

errorPage 错误的页面.

isErrorPage="true" 显示错误

errorPage="error.jsp" 呈现错误

errorPage 值需要给错误的页面路径

include

--%>

把另外一个页面的内容拿过来

--%>

url标签库的路径

prefix别名

include和forward

--%>

--%>

等同于以下代码 --%>

//请求转发

//request.getRequestDispatcher("other02.jsp").forward(request, response);

%>

9c7f69db0111e83630a1e165acad7085.png

a19f629277d9544f8e6b9fb2951b87e6.png

jsp: param

小结

什么是JSP

为什么会有JSP

三大指令集

page

有什么用,那么怎么用,有哪些常用的属性

include

有什么用,那么怎么用

taglib

有什么用,怎么用

JSP动作标签

jsp:forword

jsp:include

jsp:param

jsp的内置对象

四个作用域

pageContext

request

session

appiication

JSP内置对象

内置对象是在jsp页面中使用的这些对象,不用创建

pageContext

request

session

application

exception

out

page

config

response

application: ServletContext

config: ServletConfig

out: JspWriter

page: Object

pageContext: PageContext

request: HttpServletRequest

session: HttpSession

final javax.servlet.jsp.PageContext pageContext;

javax.servlet.http.HttpSession session = null;

final javax.servlet.ServletContext application;

final javax.servlet.ServletConfig config;

javax.servlet.jsp.JspWriter out = null;

final java.lang.Object page = this;

javax.servlet.jsp.JspWriter _jspx_out = null;

javax.servlet.jsp.PageContext _jspx_page_context = null;

request, response

四个作用域

pageContext

request

session

application

作用域,就是这个对象可以在哪用,对象可以存值,取值范围限定.

作用的对象是不一样的

setAttribute

getAttribute

pageContext:作用域只能在当前页面,PageContext

request:作用域限于一次请求

只要服务器做出反应,域中的值就没有了HttpServletRequest

session:限于一次会话,第二次会话就没了,HttpSession

application:都有,都可以访问,只有服务器关闭后就不能访问了.->ServletContext

一个工程只能有一个

exception -> Throwable

config -> ServletConfig

page -> Object -> 当前类的实例

response -> HttpServletResponse

out JSP -> JSPWriter

5376e21dfa34d3867cfea0d6abba02ce.png

out

response.getWriter

out对象输出的内容是放到response的缓冲区内的,先输出response本身的内容,然后才是out里面的内容.

exception -> Throwable

page -> Object -> 一般就是jsp翻译成java类的实例对象 -> this -> 当前实例类

config -> ServletConfig

out -> JspWriter

response -> HttpServletResponse

pageContext -> PageContext: 作用域当前页面

request -> HttpServletReques: 作用域限于一次请求

session -> HttpSession -> 作用域限于一次会话

application -> ServletContext

整个工程可以访问,服务器关闭后就不能进行访问了

pageContext 也可以获取其他8个内置对象

EL表达式:

是什么,怎么用,也有内置对象?

// 作用域

pageScope

requestScope

sessionScope

applicationScope

// 请求头

header

headerValues

参数

param

params

EL表达式

简化jsp中java的代码.

${ 表达式 }

取值方式:

String [] a = {"aa","bb","cc","dd"};

pageContext.setAttribute("array", a);

%>

User user = new User {"zhangsan",18};

session.setAttribute("u", user);

%>

${u.name}, ${u.age}

pageEncoding="UTF-8"%>

Insert title here

从域中取值。 得先存值。

//pageContext.setAttribute("name", "zhangsan");

session.setAttribute("name", "lisi...");

%>


直接指定说了,到这个作用域里面去找这个name

${ pageScope.name }


//先从page里面找,没有去request找,去session,去application

${ name }


指定从session中取值

${ sessionScope.name }


---------------------------------------------

User user = new User("zhangsan",18);

session.setAttribute("u", user);

%>

${ u.name } , ${ u.age }

${ a > b}

${ a gt b }

${ empty u }

package com.dashucoding.domain;

public class User {

private String name;

private int age;

public User(String name, int age) {

super();

this.name = name;

this.age = 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;

}

}

pageEncoding="UTF-8"%>

Insert title here

pageContext.setAttribute("name", "page");

request.setAttribute("name", "request");

session.setAttribute("name", "session");

application.setAttribute("name", "application");

%>

按普通手段取值


使用EL表达式取出作用域中的值

${ pageScope.name }

${ requestScope.name }

${ sessionScope.name }

${ applicationScope.name }

${name }


-----------------------------

String [] a = {"aa","bb","cc","dd"};

pageContext.setAttribute("array", a);

%>

使用EL表达式取出作用域中数组的值

${array[0] } , ${array[1] },${array[2] },${array[3] }


-------------集合数据----------------

List list = new ArrayList();

list.add("11");

list.add("22");

list.add("33");

list.add("44");

//pageContext.setAttribute("li", list);

session.setAttribute("li", list);

%>

使用EL表达式取出作用域中集合的值

${li[0] } , ${li[1] },${li[2] },${li[7] }


-------------Map数据----------------

Map map = new HashMap();

map.put("name", "zhangsna");

map.put("age",18);

map.put("address","北京..");

map.put("address.aa","深圳..");

//pageContext.setAttribute("map", map);

application.setAttribute("m", map);

%>

使用EL表达式取出作用域中Map的值

${applicationScope.m.name } , ${m.age } , ${m.address } , ${m["address.aa"] }

EL表达式隐式对象

11个内置对象

${ }

pageCotext

pageScope

requestScope

sessionScope

applicationScope

请求参数

param

paramValues

请求头

header

headerValues

COOKIE

initParam初始化参数

pageContext是PageContext实例,其他都是Map类.

EL内置对象

// 作用域

pageScope

requestScope

sessionScope

applicationScope

// 请求头

header

headerValues

// 请求参数

param

params

COOKIE

全局初始化参数

initparam

pageContext

引入

pageEncoding="UTF-8"%>

Insert title here

这是el03页面

pageEncoding="UTF-8"%>

Insert title here

这是el04页面

使用EL表达式获取这个参数

${COOKIE.name } --%>

${param.address }

小结案例

pageEncoding="UTF-8" %>

--%>

--%>

Insert title here

--%>

这是other页面的内容.



推荐阅读
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • (三)多表代码生成的实现方法
    本文介绍了一种实现多表代码生成的方法,使用了java代码和org.jeecg框架中的相关类和接口。通过设置主表配置,可以生成父子表的数据模型。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有