浅谈JSP
jsp的局部代码块
<%
//声明java代码块
int i = 80;
if(i>90){
%>
<h1>优秀</h1>
<% } else{
function1(); //调用function1方法
%>
<h1>有待进步</h1>
<% } %>
jsp的全局代码块
<%!
int i = 80;
public void test(){
System.out.println("全局代码块");
}
%>
Jsp 的访问原理:
浏览器发起JSP页面的请求,
tomcat去项目中找Servlet,找不到
然后去tomcat中去找,
执行JspServlet 将请求的 JSP 文件转义成为对应的 java 文件(也是Servlet),
然后执行转义好的 java 文件。
使用:
JSP 负责页面展现,Servlet 负责业务逻辑处理。
Jsp 的9大内置对象:
- PageContext 对象
//界面的上下文对象
//封存了其他的内置对象;封存了当前jsp的运行信息
//注意:每一个jsp文件单独拥有一个pageContext对象
//作用域:当前页面
- Request 对象
//封存了当前请求数据的对象。
//由tomcat服务器创建;
//作用域:一次请求
- Session 对象
//此对象用来存储对象。
//由tomcat服务器创建。
//作用域:一次请求
- Application 对象
//ServletContext对象,一个项目只有一个,
//存储用户共享数据的对象、操作
//作用域:项目内
- Response 对象
//响应对象
//用来响应请求处理结果给浏览器对象
- Out 对象
//响应对象
//带有缓存区的响应对象,效率高于response对象
//作用域:jsp内部使用
- Page 对象
//代表当前jsp的对象;相当于java的this
- Exception 对象
//异常对象
//存储了当前运行的异常信息
//注:使用此对象需要在page指定中使用属性isErrorPage="true"开启
- Config 对象
//ServletConfig对象,
//主要是用来web.xml的配置数据
//完成一些初始化数据的读取
4个作用域对象 | 作用域 | 使用场景 | 流转方式 |
---|---|---|---|
pageContext | 当前界面 | 解决了当前页面内的数据共享 | 获取其他内置对象 |
request | 一次请求 | 一次请求的servlet的数据共享 | 通过请求转发给下一个servlet |
session | 一次会话 | 一个用户的不同请求的数据共享 | 将数据从一次请求转发给其他请求 |
application | 项目内 | 不同用户的数据共享问题 | 将数据从一个用户流转给其他用户 |
作用:数据流转
Jsp 的语法和指令:
- JSP 的 page 指令
/*配置jsp文件转译的相关参数*/
<%@page 属性名="属性值" 属性名="属性值" ... %>
<%@page language="java" //声明java要被转译的语言
import="java.util.*, java.lang.*" //转译的java文件需要导入的jar包
pageEncoding="utf-8" //当前jsp文件保存的编码格式
contentType="text/html; charset=utf-8" //设置JSP数据响应给浏览器是,浏览器的解析和编码格式
session="true" //设置转译的servlet中是否支持开启session支持;默认开启,true表示开启
errorPage="error.jsp" //设置jsp配置运行错去跳转的界面
extends="xxx.yyy.zzz" //设置jsp转译的java文件要继承的父类
... %>
- JSP 的 taglib 指令
被引入的jsp文件不能定义当前jsp界面使用的java代码块声明的同名变量
3. Jsp 的静态引入(JSP 的 include 指令)
/*会将引入的jsp文件和当前的jsp文件转译成一个servlet文件
*在网页中显示合并后的效果
*静态引入的jsp文件不会单独转译成servlet文件
*/
<%@include file="foot1.jsp" %> //可点击
静态/动态引入
优点:降低jsp代码的冗余,便于维护升级
- Jsp 的动态引入
/*动态引入的jsp文件能够转译成servlet文件
*并被当前jsp文件转译成的servlet文件调用
*在网页中显示合并后的效果
*
*注:动态引入允许文件中声明同名变量
*/
<jsp:include page="foot2.jsp" ></jsp:include>
- 页面转发(forword 标签)
/*一次请求、地址栏信息改变*/
/*转发标签的中间除了写子标签 <jsp:param /> 不会报错,其他任意字符串都会报错*/
<jsp:forward page="foreard.jsp">
<jsp:param name="str" value="转发信息">
</jsp:forward>
jsp中的相对资源路径
相对路径: …/…/资源路径
绝对路径: /虚拟项目名/资源路径第一个 “ / ” 表示服务器的根目录
jsp自带的全局路径声明:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
<base href="<%=basePath%>">
...
...
作用:给资源前面添加项目路径