JSP总笔记

1.JSP简介
  • 全称:Java Server Pages,运行在服务器上的Java页面,是一种动态网页技术。
  • JSP必须要运行在服务器上,不能脱离服务器单独运行
  • JSP的本质就是一个披着Html外衣的Servlet,即可以写html代码的java文件
2.JSP的运行原理
  • 当我们访问jsp页面时会经历以下步骤:
  • 1)JSP引擎将jsp页面翻译成java文件
  • 2)Java虚拟机将java文件编译成class文件
  • 3)JSP容器根据对应的类创建对象并调用_jspService()方法处理用户的请求
  • 以访问index.jsp页面为例:
  • 第一次访问index.jsp页面
  • 1)JSP引擎将index.jsp页面翻译成index_jsp.java文件
  • 2)Java虚拟机将index_jsp.java文件编译成index_jsp.class文件
  • 3)JSP容器根据index_jsp这个类创建对象并调用_jspService()方法处理用户的请求
    • 以后再访问index.jsp页面(前提是没有改变页面中的内容)
  • 直接使用JSP容器根据index_jsp这个类创建对象并调用_jspService()方法处理用户的请求
3.JSP的基本组成
1)模板元素,与JAVA/JSP无关
  • 就是HTML标签,在HTML中怎么用,在JSP中就怎么用
<a href="/Web08_JSP/index.jsp">我是一个超链接</a>
2)JSP脚本片段
  • 格式:<% Java代码 %>
  • 在JSP页面中可以有多个脚本片段,但是要保证多个脚本片段能完整拼接
<%         for(int i = 0 ; i < 100 ; i ++){             //out.print("热巴热巴我爱你!");     %>           <h1>热巴热巴我爱你!</h1>     <%           }     %>
3)JSP表达式
  • 格式:<%= 对象 %>
  • JSP表达式是用来向浏览器输出一个对象
4)JSP声明:<%! … %>,定义java成员变量或方法
5)JSP注释
<!--
        第一种是HMTL注释,客户端可以看到
        第二种是Java注释
        第三种是JSP注释
     -->
     <%-- 我是JSP注释,客户端无法看到 --%>
6)JSP指令
  • 格式:<%@ 指令名 属性名1="属性值1" 属性名2="属性值2" %>
  • 常用的指令
  • page指令:用来告诉服务器如何解析当前页面
<!-- 常用属性: language:设置开发语言,默认值是java,可选值也是java contentType:设置内容的类型是html等,并告诉浏览器使用什么字符集进行解码, 对应的java文件的_jspService()方法中会有以下内容:                             response.setContentType("text/html; charset=UTF-8"); pageEncoding:设置翻译当前页面使用的字符集,即指定web容器采用什么编码来将此jsp文件翻译成java文件 errorPage:设置当当前页面出现异常,要转发到的页面           isErrorPage:设置当前页面是否是一个错误页面。默认是false,如果该为true, 则可以通过exception对象获取异常信息 import:导包,一般是重新创建一个page指令并通过import属性进行导包      -->
  • include指令:用来将其它(子)页面引入 到当前(父)页面中
  <!-- file:用来设置要包含的页面的地址 -->      <!-- 这种方式称为静态包含:只是将子页面的代码复制进父页面中,所以如果子页面内容发生变化, 父页面将会重新编译-->      <%@ include file="/include.jsp" %>
7)JSP动作标签
  • 格式:<jsp:标签名 属性名="属性值"></jsp:标签名>
  • 常用的动作标签
    • useBean:创建JavaBean;
    • setPropertory:为Bean属性赋值;
      • name:需要赋值的bean; property:属性 value:属性值(如果是另一个Bean,需要套表达式)
<jsp:useBean id="bService" class="com.booksSys.service.BooksServiceImpl"/> <jsp:useBean id="bDao" class="com.booksSys.dao.BooksDaoImpl"/> <jsp:setProperty name="bService" property="bDao" value="<%= bDao %>"/> //java依赖关系: public class BooksServiceImpl implements BooksService { private BooksDaoImpl bDao; }
  • forward标签:用来进行请求的转发
<!-- ★1.forward标签: -->     <!-- 不带请求参数的转发,注意:标签体中不能包含任何内容 -->   <jsp:forward page="/index.jsp"></jsp:forward>      <!-- 带请求参数的转发 -->     <jsp:forward page="/index.jsp"><jsp:param value="superAdmin" name="username"/></jsp:forward>
  • include标签
    <!-- 2.include标签:用来将其他页面(子)中的内容包含到当前页面(父)中 -->     <!-- page:用来设置要包含的页面的地址 -->     <!-- 这种方式称为动态包含,先执行子页面的代码,再将运行结果包含进父页面中, 所以,如果子页面内容发生变化,父页面不会重新编译 -->     <!-- 如果被包含的页面是一个静态页面,通常我们使用静态包含; 如果被包含的页面是一个动态页面,通常我们使用动态包含 -->     <jsp:include page="/include2.jsp"></jsp:include>
 
4.JSP中的9大内置对象
  • JSP的隐含对象即在jsp页面中不用声明就可以直接使用的对象,是因为在对于的Java类的_jspService()方法中已经声明了这些对象。九大隐含对象:
  • out
  • 类型:JspWriter
  • 作用:与PrintWriter的作用类似,可以向浏览器响应一些数据
  • pageContext
  • 类型:PageContext
  • 作用:一个顶九个,通过它可以获取其他八个隐含对象
  • 它还是一个域对象
  • request
  • 类型:HTTPServletRequest
  • 作用:与Servlet中的request的作用一样
  • 它还是一个域对象
  • session
  • 类型:HttpSession
  • 在Servlet中通过以下方式获取
HttpSession session = request.getSession();
  • 它还是一个域对象
  • application
  • 类型:ServletContext
  • 在Servlet中通过以下方式获取
ServletContext application = this.getServletContext();
  • 它还是一个域对象
  • response
  • 类型:HTTPServletResponse
  • 作用:与Servlet中的response作用一样
  • config
  • 类型:ServletConfig
  • 作用:获取配置信息
  • page
  • 类型:Object
  • 作用:相当于this,代表当前对象(在jsp中几乎不用)
  • exception
  • 类型:Throwable
  • 作用:获取异常信息。前提是jsp页面是一个错误页面,即jsp页面的page指令中的isErrorPage属性值为true
5.四个作用域对象
  • 域指区域/范围,在JavaWeb中指不同的Web资源(Servlet、jsp页面)
  • 由于不同的Web资源之间需要共享数据,所以就有了域对象
  • 四个域对象中都维护着一个Map,用来存取要共享的数据
  • 四个域对象都有以下三个方法(拥有setAtrrubite和getAtrrbite的对象统称为作用域对象):
  • void setAttribute(String key , Object value)
  • 向域对象中添加属性(设置要共享的数据)
    • Object getAttribute(String key)
  • 根据属性名从域对象中获取属性值(获取要共享的数据)
    • void removeAttribute(String key)
  • 根据属性名从域对象中移除属性值
  • 四个域
  • page域:当前页面,所有页面相关的象都由它来管理和创建它共享的数据,只能在当前页面使用。
  • 对应的域对象:pageContext
    • request域:一次请求 响应完成 作用域:一次请求中(请求转发也属于一次请求)
  • 对应的域对象:request
    • session域:当前会话(一次会话)会话超时之前都存在
  • 对应的域对象:session
    • application域:当前Web应用,服务器启动后,数据一直保存,直到服务器重启或关闭
  • 对应的域对象:application
    • 四个域的使用规则
  • 能用小的就不用大的
  • Servlet与Jsp的分工
  • Servlet负责处理请求;Jsp负责生成静态显示页面
 

posted @   皮蛋&&瘦肉  阅读(45)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示