博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP学习
阅读量:5237 次
发布时间:2019-06-14

本文共 4547 字,大约阅读时间需要 15 分钟。

第一次访问编译运行 运行时'JspServlet'类 把jsp解析成servlet后编译运行在work->Catalina->localhost->_->org->apache->jsp = html嵌入Java代码
//jsp在<% %>中可以直接写java代码 定义的内容在servlet的service方法中 不可定义方法<% int i=0; System.out.println(i);%>//i不会初始化//访问此jsp时console输出0//jsp在<%! %>中可以直接写java代码 定义的内容为servlet成员变量或方法<%!	int i; public void run(){
System.out.println(i);};%>//i会初始化<% test(); %>//访问此jsp时console输出0//jsp<%= %> 相当于 response.getWriter().write("");<%= "test"%> //访问此jsp时页面输出 'test'//解析后的jsp(servlet) 实际是out.print()方法
//page buffer="8kb"时 jsp解析后 写在response缓冲区 tomcat默认来这获得内容<% response.getWriter.write("aaa");%>//后三个等同 jsp解析后 都是out.writer(); 写在out缓冲区 out缓存区会推送到responsebbb<% out.writer("ccc")%><%= "ddd"%>//页面显示aaa bbb ccc ddd如果page buffer="0kb"//页面显示字符串按jsp页面顺序来显示
客户端浏览器可见//单行注释 解析成servlet显示 客户端页面不显示 /** 多行注释 解析成servlet显示 客户端页面不显示*//*** 文档注释 解析成servlet显示 客户端页面不显示*/<%-- jsp注释 --%> 只在jsp源码中显示 解析成servlet消失

JSP指令

//page指令 属性最多 当前jsp页面配置(IDE创建jsp时默认模板已写好)<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>//language冗余属性只能写java 可不写默认java//contentType 相当于response.setContentType();//pageEncoding 代表当前jsp的文件编码 此属性存在 contentType可省略不写<%@ page session="true"%>//默认session为true 可使用session<%@ page extends=""%>//等同于extends关键字 默认继承HttpJspBase即可 不可随意修改<%@ page errorpage=""%>//当前页面报错跳转的页面 转发<%@ page isErrorpage="true"%>//当前页面时处理错误的页面	默认jsp只有500错误 因为jsp错误被限制在页面中 如 : 不会有404 jsp页面错误//用web.xml配置 全局错误页面 如jsp已配置的错误页面 则下面不生效
404
状态码 即404错误
/error.jsp
跳转的页面或路径
<%@ page autoFlush="true"%>//自动刷新 默认为true<%@ page buffer="8kb"%>//out对象默认缓冲区大小//include指令<%@ include file="test.jsp"%>//把test.jsp整个包含到本页面(静态包含)//taglib指令<%@ taglib uri="标签库地址" prefix="前缀"%>//导入标签库 前缀相当于标签库的别名

JSP内置对象或隐式对象(九个)

jsp被解析成servlet后 service方法中有9个对象定义并初始化完毕 在jsp脚本中可以直接使用

名称 类型 描述
out javax.servlet.jsp.JspWriter 用于页面输出 相当于带缓存的PrintWriter
request javax.servlet.http.HttpServletRequest 里面封装客户端向服务器请求信息
response javax.servlet.http.HttpServletResponse 里面封装服务器向客户端的响应信息
config javax.servlet.ServletConfig 服务器配置 可以取得初始化参数
session javax.servlet.http.HttpSession 用来保存用户的信息
application javax.servlet.ServletContext 所有用户的共享信息 ServletContext
page java.lang.Object 指当前页面转换后的Servlet类的实例
pageContext javax.servlet.jsp.PageContext JSP的页面容器
exception java.lang.Throwable 表示JSP页面所发生的异常 在错误页中才起作用

out对象

out的类型 : JspWriter
out作用就是想客户端输出内容 - - out.write()
out缓冲区默认8kb 可以设置成0 代表关闭out缓冲区 内容直接写到respons缓冲区

response.getWriter().write() 与 out.print()的区别

write() 仅支持输出字符类型数据 字符 字符数组 字符串等
//OutputStream output = response.getOutputStream() - - 可以输出二进制
print() 可以将各种类型 Object 的数据通过默认编码转换成bytes字节形式(图片)

out.write() response.getWriter().write()
javax.servlet.jsp.JspWriter java.io.PrintWriter.write()

pageContext对象 jsp页面的上下文对象(封装当前页面的其他信息)

page对象 jsp页面解析后servlet的对象(当前页面的实例)

pageContext是一个域对象

setAttribute(String name,Object obj);getAttribute(String name);removeAttrbute(String name);

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

setAttribute(String name,Object obj,int scope);getAttribute(String name,int scope);removeAttrbute(String name,int scope);findAttribute(String name);	依次从pageContext域 request域 session域 application域中获取属性 获取到后将不在向后寻找
//pageContext向request域存数据pageContext.setAttribute("name","value",PageContext.REQUEST_SCOPE);//pageContext向session域存数据pageContext.setAttribute("name","value",PageContext.SESSION_SCOPE);//pageContext向application域存数据pageContext.setAttribute("name","value",PageContext.APPLICATION_SCOPE);//pageContext向request域取数据pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//pageContext向session取存数据pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//pageContext向application域存数据pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);
10001001100210031004100510061007100810091010page域- - -当前jsp页面范围request域- - -一次请求session域- - -一次会话application域- - -整个web应用四大域对象的总结

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

pageContext.getRequest();pageContext.getSession();

jsp标签(动作)

//页面包含//将多个jsp页面拼凑到一起在解析出servlet 最后只有一个servlet文件
(动态包含)运行时//将多个jsp解析成servlet文件后 再把页面拼凑到一起 最后有多个servlet文件 主页面先解析成servlet后运行include(req,resp,"/test.jsp",out,false); 然后主页面查找test.jsp 找到后会让test.jsp解析成servlet 再包含在主页面中 <%@ include file="test.jsp"%>//(静态包含)解析时 当前页面可以获得test.jsp的数据(请求&响应)
//请求转发页面跳转到test.jsp中 地址栏url不会变化
//等同于request.getRequestDispatcher("/test.jsp").forward(request, response);
${pageContext.request.contextPath} 等同于 request.getContextPath();//getRequest();获取的是ServletRequest 而不是HttpServletRequest 不能直接获取ContextPath<%=pageContext.getRequest().getContext()%>//不能实现

jsp开发 主要是servlet用request域把数据转发到jsp页面 完成页面跳转和数据传送

转载于:https://www.cnblogs.com/setlilei/p/10629480.html

你可能感兴趣的文章
转:C#数据结构和算法学习系列五----基础查找算法
查看>>
Java基础(八)异常处理
查看>>
分布式系统概述
查看>>
函数执行时间查看效率
查看>>
Vue Cli3 TypeScript 搭建工程
查看>>
第四次作业1
查看>>
2.17 数组循环移位
查看>>
java 序列化和反序列化的实现原理
查看>>
动态规划:HDU1059-Dividing(多重背包问题的二进制优化)
查看>>
pl/sql学习(4): 包package
查看>>
图像对比度和亮度
查看>>
Http Header
查看>>
DataTable转换成IList
查看>>
数据结构(三十六)关键路径
查看>>
以太坊合约的自动化编译详解一
查看>>
末学者笔记--apache编译安装及LAMP架构上线
查看>>
Html列表标签
查看>>
Java8新特性。
查看>>
ajax请求aspx
查看>>
RabbitMQ-2
查看>>