JSP

JSP

为什么需要JSP?

Servlet:

**优点:**逻辑处理方便

**缺点:**页面表现麻烦

JSP:

**优点:**页面表现方便

**缺点:**逻辑处理麻烦

**注意:**一般在web项目中,采用JSP+Servlet+JavaBean技术

JSP≈java+html

JSP执行过程

浏览器输入:localhost:8080/jsp/1.jsp

tomcat收到*.jsp请求,则会到org.apache.jasper.servlet.JspServlet处理

JspServlet调用相应的java类,jsp引擎根据1.jsp生成的java类(位于tomcat子目录work下面:1.jsp.java,1.jap.class)

执行1.jsp.class,将HTML数据输出给tomcat,tomcat再将这些数据输出给客户端

Page:

作用:用来设置转义成servlet文件时的参数

contentType:表示浏览器解析响应信息时候使用的编码和解析格式

language:表示jsp要转义成的文件类型

import:导入需要的jar包,多个包使用逗号分隔

pageEncoding:设置页面的编码格式

session:用来控制servlet中是否有session对象

errorPage:当页面发生逻辑错误的时候跳转的页面

extends:选择要转义的servlet类要继承的父类(包名+类名)

JSP页面嵌入java代码

**局部代码块:**可以将java代码和页面展示的标签写在一个jsp页面中,java代码转义成的servlet文件中,java代码跟输出是保存在service方法中的。

​ **缺点:**代码可读性比较差,开发比较麻烦。

​ 一般不使用

全局代码块:

​ 定义公共的方法时候需要使用全局代码块<%!%>,生成的代码在servlet类中

​ 调用的时候需要使用局部代码块

脚本调用方法:

​ 使用<%=直接调用变量和方法(必须有返回值)%>

​ **注意:**不能在变量或方法的后面添加

include:

静态导入:

​ <%@ include file=“staticImport.jsp”%>

​ file中填写的是jsp页面的相对路径。

​ 不会将静态导入的页面生成一个servlet文件,而是将两个文件合并。

​ **优点:**运行效率高

​ **缺点:**两个页面会耦合到一起,两个页面中不能存在相同名称的变量名。

动态导入:

​ <jsp:include page=“dynamicImport.jsp”></jsp.include>

​ 两个页面不会进行合并,分别生成自己的servlet文件,但是页面在最终展示时候是合并在一起的

​ **优点:**没有耦合,可以存在同名的变量

请求转发:

​ 在jsp中也可以实现servlet的请求转发

<jsp:forward page=“forward.jsp”></jsp.froward>

**注意:**在标签中间不可以添加任何字符除了<jsp:param name="" value="">,在转发的页面中想要获取到属性值request.getParameter("");

jsp九大内置对象:

jsp页面在转义成其对应的servlet文件的时候,会自动声明一些对象,在jsp页面可以直接使用

**注意:**内置对象是在jsp页面中使用的,可以再局部代码块中使用,也可以在脚本段语句中使用,不能在全局代码中使用

1.pageContext:表示页面上下文的对象,封存了其他的内置对象,封存了当前页面的运行信息

**注意:**每一个页面都有一个对应的pageContext对象,伴随着当前页面的结束而结束。

2.request:封装当前请求的数据,由tomcat创建,一次请求对应一个request对象

3.session:用来封装同一个用户的不同请求的共享数据,一次会话对应一个session对象

4.application:相当于ServletContext,一个web项目只有一个对选哪个,存储所有用户的共享数据,从服务器启动到服务器结束

5.response:响应对选哪个,用来响应请求数据,将处理结果返回给浏览器,可以进行重定向

6.page:代表当前jsp对象,跟java中的this指针类似

7.exception:异常对象,存储当前运行的异常信息,必须在page指令中添加isErrorPage=true

8.config:相当于servletConfig对象,用来获取web.xml中配置的数据,完成servlet初始化操作

9.out:响应对象,jsp内部使用,带有缓存区的响应对象,效率要高于response

四大作用域:

pageContext:当前页面,解决当前页面内的数据共享问题,获取其他内置独享

request:一次请求,一次请求的servlet的数据对象,通过请求请求转发的方式,将数据流转到下一个servlet

session:一次会话,一个用户发送的不同请求之间的数据共享

application:项目内不同用户数据共享问题,将数据从一个用户流转到其他用户

路径问题:

想要获取项目中的资源,可以使用相对路径,也可以使用绝对路径。

**相对路径:**相对于当前页面的路径

​ **问题:**1、资源的位置不可以随便更改

​ 2、需要使用…/的方式进行文件夹的跳出,如果目录结构比较深,可能操作起来比较麻烦

**绝对路径:**在请求路径的前面加/表示当前服务器的根路径,使用的时候要添加虚拟项目名称加/资源目录

使用jsp中自带的全局路径声明:

<%

String path = request.getContextPath();

System.out.println(path);

String basePath = request.getScheme()+"😕/"+request.getServerName()+":"+request.getServerPort()+path+"/";

System.out.println(basePath);

%>

标签:

添加资源路径的时候,从当前项目的web路径下即可。

EL表达式:

使用传统方式获取request中的值有以下缺点:

1.必须要导入包

2.进行类型的强制转换

3.层次结构比较复杂

**解决办法:**使用EL表达式

**概念:**一种写法非常简单的表达式,语法简单易懂,便于使用

**作用:**让jsp写起来更加的方便。建华在jap中获取作用域或者请求数据的写法

语法结构:

${expression},可以使用.或者[]获取属性值或者指定索引位置的对象

获取值得时候,直接使用作用域中的key即可,使用.来引用属性,使用[]来获取指定索引位置的对象

**作用域:**pageContext–>request–>session–>application

获取作用域数据的顺序:

从小的作用域开始查询,如果找到则返回对应的值,不接着向大范围寻找数据。

当四种作用域中存在相同key的属性的时候,可以通过pageScope,requestScope,sessionSCope,applicationScope获取指定作用域的value

El表达式可以进行算数运算和关系运算:

直接在表达式中写入算法操作即可,如果是关系运算,返回true或者false。

**注意:**在EL表达式中的+表示加法操作,而不是字符串连接符。

EL表达式可以进行逻辑运算:

KaTeX parse error: Expected '}', got 'EOF' at end of input: {true$false}

EL表达式获取header信息:

${header}:获取所有请求头信息

${header[key]}:获取指定可以的数据

${headerValues[key]}:获取key对应的一组数据

${headerValues[key] [0]}:获取key对应数组的某一值

El表达式获取cookie数据

${cookie}:获取cookie中所有数据

${cookie.key}

${cookie.key.name}

${cookie.key.value}

JSTL标签库:

帮助我们在jsp页面中添加复杂的逻辑判断,避免逻辑代码和页面标签混为一谈

JSTL表达式是EL表达式的扩展,同事,JSTL依赖于EL,为了方便从作用域中获取值

JSTL的导入:

添加jar到web-inf的lib目录下

​ <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

需要在配置里面加入c.tld文件(FIle–>Settings–>Languages & Frameworks–>Schemasand and DTDS -->±->)

核心标签库:

格式化标签库:

函数标签库:

xml标签库:

SQL标签库:

标签学习:

<c:out value="哈哈" default="嘿嘿"></c:out>

value:填写要输出的值

default:默认值

<c:set var="哈哈" value="pageContext"></c:set>

var:表示参数的key

value:表示参数的值

scope:表示向哪个作用域设置属性值

注意:当只配置这两个属性的时候,默认是向pageContext作用域中设置属性,可以通过参数来做选择向那个作用域设置。

<c:remove var="哈哈"></c:remove>

删除作用域数据

var:表示参数的key

如果没有指定删除的作用域(scope),则默认会把所有作用域中的参数删除

<c:if test"${a>5} var="flag" scope="request" >
	<h1>jstl is easy</h1>
</c:if>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值