java web动态生成jsp_JavaWeb学习之动态页面技术(JSP/EL/JSTL)

本文详细介绍了JavaWeb中动态生成jsp的相关技术,包括JspWriter的out对象、PageContext的使用,以及EL和JSTL的核心概念和常见用法。内容涉及四大作用域(page、request、session、application)、EL表达式的取值以及JSTL的条件和迭代标签。此外,还探讨了JavaEE的开发模式和三层架构。
摘要由CSDN通过智能技术生成

名称

类型

描述

out

javax.servlet.jsp.JspWriter

用于页面输出

request

javax.servlet.http.HttpServletRequest

得到用户请求信息,

response

javax.servlet.http.HttpServletResponse

服务器向客户端的回应信息

config

javax.servlet.ServletConfig

服务器配置,可以取得初始化参数

session

javax.servlet.http.HttpSession

用来保存用户的信息

application

javax.servlet.ServletContext

所有用户的共享信息

page

java.lang.Object

指当前页面转换后的Servlet类的实例(在普通类中的this)

pageContext

javax.servlet.jsp.PageContext

JSP的页面容器

exception

java.lang.Throwable

表示JSP页面所发生的异常,在错误页中才起作用

(1)out对象

out的类型:JspWriter

out作用就是想客户输出内容-----out.write()

out缓冲区默认8Kb   可以设置为0,代表关闭out缓冲区,内容会被直接写到response缓冲区中。

上述代码的执行过程:当执行out.write();服务器会将里面的aaa、bbb、ddd存入out缓冲区中,执行response.getWriter().writer()时服务器会将里面的asd存入response缓冲区中,最后将out缓冲区中的内容刷到response缓冲区中,由于asd先进入缓冲区,所以最终结果为:asd、aaa、bbb、ddd

如果将buffer设置为0Kb,则关闭out缓冲区,out.write()里面的数据找不out到缓冲区,会默认存到response缓冲区中。最后的结果应为:aaa、bbb、asd、ddd

(2)pageContext对象----是一个域对象

jsp页面的上下文对象,page对象是设置页面属性的,例如导包、设置语言、数据编码格式等,与pageContext对象不是一回事

pageContext同样拥有域对象的三个方法

setAttribute(String name,Object  obj)

getAttribute(String name)

removeAttribute(String  name)

pageContext可以向指定的其他域中存取数据

setAttribute(String name,Object obj,int scope)

getAttribute(String name,int scope)

removeAttrbute(String name,int scope)

pageEncoding="ISO-8859-1"%>

Insert title here

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

%>

pageContext.setAttribute("name", "lisi", pageContext.REQUEST_SCOPE);

%>

pageContext.setAttribute("name", "wangwu", pageContext.SESSION_SCOPE);

%>

pageContext.setAttribute("name", "xiaohong", pageContext.APPLICATION_SCOPE);

%>

String name = (String) pageContext.getAttribute("name");

%>

findAttribute(String name)

依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不再向后寻找

四大作用域的总结:

page域:当前jsp页面范围

request域:一次请求

session域:一次会话

application域:整个web应用

可以获得其他8大隐式对象

例如: pageContext.getRequest()

pageContext.getSession()

jsp标签(动作)

1)页面包含(动态包含):

2)请求转发:

静态包含与动态包含的区别?

静态包含,底层源码只生成一个Java文件

动态包含,有几个jsp,底层源码就会生成几个Java文件

二者执行效果一样。

pageEncoding="ISO-8859-1"%>

Insert title here

include1

EL技术

1.EL 表达式

EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写。

2、从域中取出数据(掌握)

例如:jsp脚本:

EL表达式替代:${requestScope.name}

EL技术重要的就是从四大域中取数据,格式:${EL表达式}

获取pageContext域中的数据:${pageScope.key}

获得request域中的数据:${requestScope.key}

获得session域中的数据:${sessionScope.key}

获得application域中的数据:${applicationScope.key}

EL从四个域中获得某个值${key};

---同样是依次从pageContext域,request域,session域,application域中 获取属性,在某个域中获取后将不在向后寻找

pageEncoding="UTF-8"%>

Insert title here

pageContext.setAttribute("aaa", "bbb");

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

User u = new User();

u.setId(1);

u.setName("lisi");

u.setPwd("123");

session.setAttribute("user", u);

List list = new ArrayList();

User u1 = new User();

u1.setId(1);

u1.setName("wangwu");

u1.setPwd("456");

list.add(u1);

User u2 = new User();

u2.setId(1);

u2.setName("wangwu");

u2.setPwd("456");

list.add(u2);

application.setAttribute("List", list);

%>


${requestScope.name }

${sessionScope.user.id }

${sessionScope.user.name }

${applicationScope.List[0].name }

${pageScope.aaa }

EL的11个内置对象

获得JSP域中的数据:pageScope、requestScope、sessionScope、applicationScope

接收参数:param、paramValues   相当于request.getParameter()、request.getParameterValues()

获取请求头信息:header、headerValues  相当于request.getHeader(name)

获取全局初始化参数:initParam   相当于this.getServletContext().getInitParameter(name)

WEB开发中的cookie:cookie   相当于request.getCookies()--cookie.getName()---cookie.getValue()

pageContext- WEB开发中的pageContext.

pageContext获得其他八大对象

${pageContext.request.contextPath}  获得web应用的名称相当于    这句代码不能实现

EL执行表达式

例如:

${1+1}

${empty user}

${user==null?true:false}

pageEncoding="UTF-8"%>

Insert title here

${param.name }

${header["User-Agent"] }

${cookie.goods.name }

${cookie.goods.value }

${pageContext.request.contextPath}

${1+1}

${empty user}

${user==null?true:false}

JSTL技术

JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库Core

标签库

标签库的URI

前缀

Core

http://java.sun.com/jsp/jstl/core

c

I18N

http://java.sun.com/jsp/jstl/fmt

fmt

SQL

http://java.sun.com/jsp/jstl/sql

sql

XML

http://java.sun.com/jsp/jstl/xml

x

Functions

http://java.sun.com/jsp/jstl/functions

fn

JSTL下载与导入

从Apache的网站下载JSTL的JAR包。进入 “http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”网址下载 JSTL的安装包,并解压

4ac6a2dabb624b960fc307d6bca5820c.png

使用jsp的taglib指令导入核心标签库

1c7fa749c0e341eb03b3c0523cd33f07.png

JSTL核心库的常用标签

1)标签

其中test是返回boolean的条件

pageEncoding="UTF-8"%>

Insert title here

xxxxxx

yyyyy

${user.name }

${user.pwd }

2)标签

使用方式有两种组合形式:

52af1896d3df569c698cf576b58b105b.png

1)遍历List的值

2)遍历List的值

3)遍历Map的值

4)遍历Map的值

5)遍历Map>的值

entry.key-----User

entry.value------List

pageEncoding="UTF-8"%>

Insert title here

//List

List l1 = new ArrayList();

l1.add("zhangsan");

l1.add("李四");

request.setAttribute("l1", l1);

//List

List l2 = new ArrayList();

User u1 = new User();

u1.setId(1);

u1.setName("zhang");

u1.setPwd("123");

l2.add(u1);

User u2 = new User();

u2.setId(2);

u2.setName("lisd");

u2.setPwd("123");

l2.add(u2);

session.setAttribute("l2", l2);

//Map

Map m1 = new HashMap();

m1.put("1", "chengyaojin");

m1.put("2", "houyi");

m1.put("3", "diaochan");

m1.put("4", "yase");

session.setAttribute("m1", m1);

//Map

Map m2 = new HashMap();

User u3 = new User();

u3.setId(1);

u3.setName("ahe");

u3.setPwd("123");

m2.put("1", u3);

User u4 = new User();

u4.setId(2);

u4.setName("dd");

u4.setPwd("123");

m2.put("2", u4);

session.setAttribute("m2", m2);

%>

类型 --%>

${str }


类型 --%>

${user.id }:${user.name }:${user.pwd }


类型 --%>

${entry.key }:${entry.value }


类型 --%>

${entry.key }:${entry.value.id }:${entry.value.name }:${entry.value.pwd }

JavaEE的开发模式

model1模式:

技术组成:jsp+javaBean

model1的弊端:随着业务复杂性 导致jsp页面比较混乱

model2模式

技术组成:jsp+servlet+javaBean

model2的优点:开发中 使用各个技术擅长的方面

servlet:擅长处理java业务代码

jsp:擅长页面的实现

JavaEE的三层架构

服务器开发时 分为三层

web层:与客户端交互

service层:复杂业务处理

dao层:与数据库进行交互

开发实践时 三层架构通过包结构体现

MVC:---- web开发的设计模式

M:Model---模型 javaBean:封装数据

V:View-----视图 jsp:单纯进行页面的显示

C:Controller----控制器 Servelt:获取数据--对数据进行封装--传递数据-- 指派显示的jsp页面

JavaEE三层架构+MVC

web层:收集页面数据,封装数据,传递数据,指定响应jsp页面

service层:逻辑业务代码的编写

dao层:数据库的访问代码的编写

5c3e0f56a5e93746f537dcdad76c9df3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值