jsp基础
jsp
基本概念
1 jsp动态网页编程技术,是javaweb服务端的动态资源
2 jsp的本质就是servlet,服务器会将jsp编译为servlet形式的java文件传输给客户端
3 通常将把 servlet 作为 web 应用中的控制器组件来使用,
JSP 技术作为数据显示模板来使用,一般编辑在WebContent中
4 jsp的页面格式与html一致,区别只在于其上设置了page指令标签
一 jsp在eclipse中的配置
window –preferrnces—搜索jsp
修改编码格式
JSP File 修改编码格式为UTF-8
修改默认格式
JSP File—Editor—Templates—选择New JSP File(html)—编辑
删除html4的声明
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
二 注释
1显示注释
继承html风格,在网页中可见 可能出现失效
<!-- 这是HTML的注释 -->
2 隐式注释 网页中不可见
jsp注释
<%-- jsp注释 --> 建议使用这个,不易出错
继承java注释 使用在Scriptlet中 可能出现失效
<% // 单行注释 /* 多行注释 */ %>
三 Scriptlet脚本小程序
java代码必须要Scriptlet标记出来
1 脚本段
<% java代码,局部变量声明 %>
内容实际是写在servlet的service方法中,变量是方法内的局部变量
2 声明全局变量
<%! 声明全局变量,方法,类 %>
内容实际是写在servlet类中, service方法外
3 输出表达式
<%=( 输出内容,变量或表达式)%>
直接向页面输出内容
相当于service中写入 out.print( 输出内容 );
等同于脚本段<% out.print(输出内容); %>
四 Page指令标签
<%@ page 属性名1="属性值1" 属性名2="属性值2%>
设置在首行用于对jsp进行属性声明,错误会导致浏览器不识别而执行下载
属性
language:当前语言,目前只支持java
contentType:设置响应类型及编码格式(text/html; charset=UTF-8)
pageEncoding:编码格式(UTF-8)
编码格式优先级依次为contentType, pageEncoding,默认ISO-8859-1
若未设置依次向后参照
import 导包信息,可以多次设置 或者一个import指定多个导入值
isErrorPage:是否是处理错误的页面,默认false
true表示当前页面用来处理报错的,就是可被errorPage指向的页面
errorPage:指定错误跳转页面,值为错误处理页面的相对url
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" isErrorPage="false" errorPage="error.jsp"%> |
指令集标签还具备静态包含和导入taglib标签库的作用
五 inclide静态包含
<%@incloude file=”资源相对url”%> 单标签
将所需要的html资源或jsp资源加载进来
服务器将资源中的内容以复制粘贴的形式全部复制到jsp文件中
两者不能不能有同名变量,否则会报错
只生成了一个源码文件
优缺点:运行效率稍高,但耦合度高,不灵活
六 incloud动态包含
<jsp:include page=”资源路径相对url”></jsp:include> 双标签
将所需资源加载到页面中,实质上是通过引用进行资源加载
1 实际操作中将页面工具栏、头部信息、尾部信息都分成各个独立的文件
使用时直接动态导入.
2 动态包含在代码的编译阶段,包含和被包含部分是两个独立的部分
只有运行时,才会动态包含进来,好比方法的调用。
3 源文件和资源文件可以具备同名变量
参数传递
动态包含是双标签,双标签中间不能加任何内容/空格/换行
双标签之间只能设置动态参数传递
<jsp:param value=”参数值” name=”参数名”/>
name不支持表达式,name支持表达式
参数是通过gerParmetrt(“name属性”)进行获取 四大jsp域对象都能调用
动作标签
动态包含属于动作标签
<jsp:动作标签 …></jsp: 动作标签>
动作标签会被编译为java代码,执行具体的操作,是有服务器解释执行的
七 jsp九大内置对象
已经被jsp包装了的对象
四大域对象
requset session application(应用域对象)
pageContext(页面域对象) jsp的页面容器
用于获取页面中的其他对象pageContext.getRequest(“”)
域对象属性范围
pageContext当前页面保存属性,跳转后无效
request一次请求中有效,服务器跳转后任然有效(请求转发有效)
session 当前会话中有效
application 服务器有用用户共享参数
上述域对象均包括对参数进行操作方法
getAttribute(“name”);获取
setAttribute(“name”,Object o);设置,创建
removeAttribute(“name”);删除
Scriptlet中获取参数,能够指定属性范围
pageContext.PAGE_SCOPE (次数只是说明其范围在页面中,与page对象无关)
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE
使用例子
<%=pageContext. getAttribute(“a”, pageContext.get.PAGE_SCOPE)>
两个响应对象
response response.getWriter( ) 获取输出对象
out out.writer(“ ”); 直接进行输出
页面对象
page对象 代表jsp页面本身 相当于this指针 page.getClass()
表示该页面的servlet实例 object对象,
page并非域对象,与pageContext无关,page只是能够被pageContext获取到
配置对象
config 能够调用配置方法 取得初始化参数
异常对象
exception 只有在错误页面中才起作用
八 EL表达式
用于获取域对象中的值,或者域对象中的值的运算结果 直接写在jsp中
el表达式只能对域对象中的值和字面常量值进行操作,但无法对变量进行操作
基本格式是${ }
el表达式中的取值从从小范围找到大范围(从page到application)
若需要获取对指定范围的属性值
使用pageScope、requestScope、sessionScope、applicatonScope进行获取
注:为了便于获取,域对象中的key通常设不同的值,避免范围导致的问题
1 值的获取方式
${key } 直接通过key取值
${范围对象.key} 指定范围对象和key取值
pageScope、requestScope、sessionScope、applicatonScope
${ pageScope.key}
${ 10 } 直面常量,一般jsp中直接写,html直接显示
若key对应的是javabean对象,可以获取javabean内部的属性
${key.属性名 } 这种取值方式,需要javabean中预设了该属性的get方法
实际上与 ${key.getUname() } 一样
若key对应的是集合对象,可以获取集合中的值
${key[索引] }
若值为javabean对象,可进一步获取属性${key[索引].属性 }
获取集合长度 ${key.getsize() }
若key对应的是map对象,可以获取map中的值
${key[“mapkey”]} 或者 ${key.mapkey } mapkey为
2 字符串方法
获取子串的索引 ${str.indexOf("a") }
字符串截取 ${str.substring(0,2) } 前闭后开
3 非空判断
${empty 域变量 } 为空返回true 可以取反${!empty 域变量}
字符串 空串和null均为true
容器 空集合和null均为true
与${str != null && str != "" }效果相同
4 运算
+-*/
加法:${num1 + num2 }
减法:${num1 - num2 }
乘法:${num1 * num2 }
除法:${num1 / num2 } -- ${num1 div num2 }
大小比较
${num1 > num2 }
${num1 >10 }
${(num1+num2) <= 10 }
等值判断 注意el表达式存在默认转型
${aa == ab } -- ${aa eq ac }
逻辑判断
${(num1+num2) > 10 && aa == ab }
${(num1+num2) > 10 || aa == ab }