SentralLiu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、JSP(Java Server Pages)


1.1 概念

简化的Servlet设计,在HTML标签中嵌套Java代码,用以高效开发Web应用的动态网页

1.2 作用

替换显示页面部分的Servlet(使用*.jsp文件替换XxxJSP.java)

二、JSP开发【重点


2.1 创建JSP

在web目录下新建*.jsp文件(与WEB-INF平级)

2.1.1 JSP编写Java代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>This is my first page</title>
</head>
<body>
    <%=new java.util.Date() %>
</body>
</html>

2.1.2 访问JSP

在浏览器输入http://ip:port/项目路径/资源名称

2.2 JSP与Servlet

  • 关系

    • JSP文件在容器中会转换成Servlet执行。

    • JSP是对Servlet的一种高级封装。本质还是Servlet。

  • 区别

    • 与 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。

JSP与Servlet区别

2.3 JSP实现原理

Tomcat会将xxx.jsp转换成Java代码,进而编译成.class文件运行,最终将运行结果通过response响应给客户端。

JSP实现原理

 

 

2.3.1 JSP.java源文件存放目录

使用IDEA开发工具,Tomcat编译后的JSP文件(Xxx_jsp.class 和 Xxx_jsp.java)的存放地点:

  • C:\用户\账户名\.IntelliJIdea2019.1\system\tomcat\项目名称\work\Catalina\localhost\应用上下文\org\apache\jsp

三、JSP与HTML集成开发


3.1 脚本

脚本可以编写Java语句、变量、方法或表达式。

3.1.1 普通脚本

语法:<% Java代码 %>

<html>
<head><title>Hello World</title></head>
<body>
Hello World!<br/>  
<%  
    //jsp中,使用小脚本嵌入java代码!  
    out.println("hi");//打印内容在客户端页面
    System.out.println("hi");//打印内容在控制台
%>
</body>
</html>

3.1.2 输出脚本

语法:<%=Java表达式 %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp基本使用</title>
</head>
<body>
<p>
   今天的日期是: <%= new java.util.Date() %>
</p>
</body> 
</html> 

3.3 JSP指令

JSP指令用来设置与整个JSP页面相关的属性。

指令描述
<%@ page ... %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %>包含其他文件
<%@ taglib ... %>引入标签库的定义,可以是自定义标签

3.3.1 page指令

  • 语法:<%@ page attribute1="value1" attribute2="value2" %>

  • Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。

属性描述
contentType指定当前JSP页面的MIME类型和字符编码格式
errorPage指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面
import导入要使用的Java类
language定义JSP页面所用的脚本语言,默认是Java
session指定JSP页面是否使用session。默认为true立即创建,false为使用时创建
pageEncoding指定JSP页面的解码格式

3.3.2 include指令

  • 语法:<%@ include file = "被包含的JSP路径"%>

  • 通过include指令来包含其他文件。

  • 被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是当前JSP文件的一部分,会被同时编译执行(静态包含)。

<%@ include file="header.jsp"%>
...
...
<%@ include file="footer.jsp" %>

3.3.3 taglib指令

  • 语法:<%@ taglib uri="外部标签库路径" prefix="前缀" %>

  • 引入JSP的标准标签库

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

3.4 动作标签

  • 语法:<jsp:action_name attribute="value" />

  • 动作标签指的是JSP页面在运行期间的命令

3.4.1 include

  • 语法:<jsp:include page="相对 URL 地址" />

  • <jsp:include >动作元素会将外部文件输出结果包含在JSP中(动态包含)。

属性描述
page包含在页面中的相对URL地址。
<jsp:include page="index.jsp"/>

3.5 内置对象

由JSP自动创建的对象,可以直接使用

对象名类型说明
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
sessionjavax.servlet.http.HttpSession由session=“true”开关
applicationjavax.servlet.ServletContext
configjavax.servlet.ServletConfig
exceptionjava.lang.Throwable由isErrorPage=“false”开关
outjavax.servlet.jsp.JspWriterjavax.servlet.jsp.JspWriter
pageContextjavax.servlet.jsp.PageContext
pagejava.lang.Object当前对象this当前servlet实例

3.5.1 四大域对象

JSP有四大作用域对象,存储数据和获取数据的方式一样,不同的是取值的范围有差别

  • pageContext (javax.servlet.jsp.PageContext) 当前JSP页面范围

  • request (javax.servlet.http.HttpServletRequest) 一次请求有效

  • session (javax.servlet.http.HttpSession) 一次会话有效(关闭浏览器失效)

  • application (javax.servlet.ServletContext) 整个Web应用有效(服务器重启或关闭失效)

3.5.2 pageContext 对象

  • pageContext对象是javax.servlet.jsp.PageContext 类的实例,拥有作用域,用来代表整个JSP页面。

  • 当前页面的作用域对象,一旦跳转则失效

  • 通过setAttribute("name",value);存储值

  • 通过getAttribute("name");获取值

  • 用于获取其他8个内置对象或者操作其他对象的作用域

3.5.4 pageContext操作其他内置对象的作用域

pageContext对象可以操作其他作用域存储和获取。

<%
    //操作其他作用域存储
    pageContext.setAttribute("name",value);//当前页面有效
    pageContext.setAttribute("name",value,PageContext.REQUEST_SCOPE);//request作用域
    pageContext.setAttribute("name",value,PageContext.SESSION_SCOPE);//session作用域
    pageContext.setAttribute("name",value,PageContext.APPLICATION_SCOPE);//application作用域
​
%>
​
<%
    //操作其他作用域获取
    pageContext.getAttribute("name");//当前页面作用域
    pageContext.getAttribute("name",PageContext.REQUEST_SCOPE);//request作用域
    pageContext.getAttribute("name",PageContext.SESSION_SCOPE);//session作用域
    pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE);//application作用域
    pageContext.findAttribute("name");//从pageContext,request ,session ,application依次查找
%>

posted on 2021-12-10 20:55  SentralLiu  阅读(48)  评论(0)    收藏  举报