您的位置:首页 > 房产 > 家装 > 做企业网站公司报价_淄博外贸网站制作_百度网盘手机版_网络推广策划方案模板

做企业网站公司报价_淄博外贸网站制作_百度网盘手机版_网络推广策划方案模板

2025/2/24 19:10:16 来源:https://blog.csdn.net/2303_80236475/article/details/145816615  浏览:    关键词:做企业网站公司报价_淄博外贸网站制作_百度网盘手机版_网络推广策划方案模板
做企业网站公司报价_淄博外贸网站制作_百度网盘手机版_网络推广策划方案模板

文章目录

  • 什么是JSP
  • 运行原理
  • JSP基础语法
    • JSP 表达式
    • JSP 脚本片段
    • JSP 声明
    • jsp指令
  • 九大内置对象&四大域对象
    • 内置对象
    • 四大域对象
    • 代码
  • JSP标签、JSTL标签、EL表达式
    • EL表达式
    • JSP标签
    • JSTL标签

什么是JSP

JSP(Java Server Pages)是由 SUN 公司在 1996 年 6 月发布的一种基于 Java 技术的服务器端编程技术,用于开发动态 Web 应用。

从本质上讲,它是一个简化的 Servlet 设计。在传统的 HTML(标准通用标记语言的子集)文件(.htm、.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),就形成了 JSP 文件,后缀名为.jsp。

JSP 具有以下特点:

  • 跨平台性:可在 Windows、Unix、Linux 等多种操作系统上运行。
  • 易于维护:代码与 HTML 代码分离,修改网页时只需修改对应的 JSP 文件。
  • 动态生成网页:将 Java 代码嵌入 HTML 页面,能实时更新网页内容。
  • 数据库访问便捷:方便地实现对数据库数据的增删改查等操作。
  • 集成性强:可与 Servlet、JavaBean 等技术无缝集成,构建完整的 Web 应用系统。

JSP本质上也是Servlet,在tomcat服务器上,**当你访问一个.jsp页面后,**在tomcat目录下的work文件夹中,可以找到.jsp编译的.class和.java文件。源代码如下,可以看出其本质也是Servlet。

public final class luxiya_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent,org.apache.jasper.runtime.JspSourceImports {......}
---------------------------------------------------------
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
......
}

在这里插入图片描述

运行原理

JSP 页面转换为 Servlet 后(.java文件)

//初始化public void _jspInit() {}
//销毁public void _jspDestroy() {}
//JSPServicepublic void _jspService(.HttpServletRequest request,HttpServletResponse response)-----------------------内置对象-------------------------
final javax.servlet.jsp.PageContext pageContext;  //页面上下文
javax.servlet.http.HttpSession session = null;    //session
final javax.servlet.ServletContext application;   //applicationContext
final javax.servlet.ServletConfig config;         //config
javax.servlet.jsp.JspWriter out = null;           //out
final java.lang.Object page = this;               //page:当前
HttpServletRequest request                        //请求
HttpServletResponse response                      //响应
  • 作用_jspService() 方法是 JSP 页面处理客户端请求的核心方法。每次客户端向服务器发送对该 JSP 页面的请求时,容器都会调用这个方法。它接收 HttpServletRequest 对象(封装了客户端的请求信息)和 HttpServletResponse 对象(用于向客户端发送响应),并根据请求的类型(如 GET、POST)执行相应的处理逻辑,生成动态内容并返回给客户端。
  • 作用_jspDestroy() 方法用于 JSP 页面销毁时的资源释放操作。当 JSP 容器决定销毁该 Servlet 实例时,会调用此方法。通常在此方法中释放那些在 _jspInit() 方法中初始化或在 JSP 页面处理过程中使用的资源,如关闭数据库连接、释放文件句柄等。
  • 作用_jspInit() 方法用于 JSP 页面初始化操作。当 JSP 页面第一次被请求并转换为 Servlet 后,容器在实例化该 Servlet 时会调用这个方法。此方法在整个 Servlet 生命周期中仅执行一次,适合进行一些只需要执行一次的初始化工作,例如加载配置文件、初始化数据库连接池等。

JSP运行过程:

  1. 当 JSP 文件首次被请求时,JSP 容器将其转化成一个 Java 源文件(Java Servlet 源程序),若存在语法错误,中断转换并返回错误信息。(eg: Tomcat 支持JSP,它既是一个开源的 Servlet 容器,也是一个 JSP 容器)

  2. 转换成功后,JSP 容器使用 javac 将生成的 Java 源文件编译成字节码文件.class,这就是一个 Servlet。

    (javac是 Java 开发工具包(JDK)中的一个重要命令行工具,它主要用于将 Java 源代码文件(扩展名为 .java)编译成 Java 字节码文件,扩展名为 .class)

  3. 由Servlet容器加载转换后的Servlet类(.class文件)创建一个该Servlet(JSP页面的转换结果)实例,并执行 jspInit () 方法,该方法在 Servlet 生命周期中仅执行一次。

  4. 执行_jspService 方法处理客户端请求。

  5. 若 JSP 文件被修改,服务器按设置决定是否重新编译,若重新编译,使用新结果取代常驻内存的 Servlet 并继续后续处理。

  6. 首次调用时因转换和编译可能产生轻微延迟。此外,因系统资源不足等,JSP 容器可能以不确定方式将 Servlet 从内存移除,此时先调用 jspDestory () 方法。

  7. 接着 Servlet 实例被 “垃圾收集” 处理。

  8. 请求处理完成后,响应对象由 JSP 容器接收,并将 HTML 格式的响应信息发送回客户端。

在这里插入图片描述

JSP基础语法

JSP 表达式

//  作用:用来将程序的输出,输出到客户端
//  <%= 变量或者表达式%><%= new java.util.Date() %>

JSP 脚本片段

  <%--jsp脚本片段--%>//在<%与%>之间可编写任意合法 Java 代码int sum = 0;for (int i = 1; i <=100 ; i++) {sum+=i;}out.println("<h1>Sum="+sum+"</h1>");%>

JSP 声明

//用于在 JSP 页面中声明 Java 类的成员变量和方法
//当创建实例时,就会执行static模块,name,luxiya分别就是该实例的成员变量和方法
<%!String name = "luxiya";static {System.out.println("static block");}public void luxiya(){System.out.println("luxiya");}
%>
<%luxiya();
%>

jsp指令

  • page 指令

    用于定义 JSP 页面的各种属性,如页面的编码、语言、导入的包等。常见属性如下:

    • language:指定 JSP 页面使用的脚本语言,一般为 java
    • contentType:设置响应的 MIME 类型和字符编码。
    • import:导入 Java 包。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
  • include 指令:用于在 JSP 页面中静态包含另一个文件。在编译时,被包含文件的内容会直接插入到当前 JSP 页面中。语法为 <%@ include file="filename.jsp" %>
  • taglib 指令:用于引入自定义标签库。当使用 JSTL 等标签库时会用到。语法是 <%@ taglib uri="taglibURI" prefix="tagPrefix" %>,其中 uri 是标签库的 URI,prefix 是标签库的前缀。
<%--@include会将两个页面合二为一--%>
<%@include file="common/header.jsp"%>
<h1>网页主体</h1><%@include file="common/footer.jsp"%><hr><%--jSP标签jsp:include:拼接页面,本质还是三个--%>
<jsp:include page="/common/header.jsp"/>
<h1>网页主体</h1>
<jsp:include page="/common/footer.jsp"/>

九大内置对象&四大域对象

内置对象

  • PageContext 存东西
  • Request 存东西
  • Response
  • Session 存东西
  • Application 【ServletContext】 存东西
  • config 【ServletConfig】
  • out
  • page(几乎不用)
  • exception

config(对应 ServletConfig)对象用于获取 Servlet 的初始化参数信息,一般不用于存储数据。

    <%// 获取初始化参数String initParam = config.getInitParameter("paramName");%><p>初始化参数的值: <%= initParam %></p>
--------------------------------------------------<init-param><param-name>paramName</param-name><param-value>paramValue</param-value></init-param>

out 对象用于向客户端输出文本内容,不是用于存储数据的。

    <%// 输出文本内容out.println("<h1>这是使用 out 对象输出的内容</h1>");%>

四大域对象

PageContext :保存的数据只在一个页面中有效

Request :保存的数据只在一次请求中有效,请求转发会携带这个数据

Session :保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器(会话级别)

Application :保存的数据只在服务器中有效,从打开服务器到关闭服务器(应用级别)

代码

---------------------demo3.jsp-----------------------
<%
pageContext.setAttribute("namepageContext","luxiyapageContext");
request.setAttribute("namerequest","luxiyarequest");
session.setAttribute("namesession","luxiyasession");
application.setAttribute("nameapplication","luxiyaapplication");
%>
<%String namepageContext = (String) pageContext.findAttribute("namepageContext");String namerequest = (String) pageContext.findAttribute("namerequest");String namesession = (String) pageContext.findAttribute("namesession");String nameapplication = (String) pageContext.findAttribute("nameapplication");
%>
<%pageContext.forward("/demo4.jsp");
%>
<p>pageContext:<%=namepageContext%></p>
<p>request:<%=namerequest%></p>
<p>session:<%=namesession%></p>
<p>application:<%=nameapplication%></p>
---------------------demo4.jsp-----------------------
<%String namepageContext = (String) pageContext.findAttribute("namepageContext");String namerequest = (String) pageContext.findAttribute("namerequest");String namesession = (String) pageContext.findAttribute("namesession");String nameapplication = (String) pageContext.findAttribute("nameapplication");
%><p>这里是demo4.jsp</p>
<p>pageContext:<%=namepageContext%></p>
<p>request:<%=namerequest%></p>
<p>session:<%=namesession%></p>
<p>application:<%=nameapplication%></p>

JSP标签、JSTL标签、EL表达式

EL表达式

EL 表达式: ${}

  • 获取数据
  • 执行运算
  • 获取 Web 开发的常用对象

JSP 脚本片段(<% %>)里定义的变量,默认情况下不能直接在 EL 表达式中使用。EL 表达式有自己的变量解析机制,通常从pageContextrequestsessionapplication等作用域中查找变量。

JSP标签

  • <jsp:include>

    作用:在运行时动态包含另一个资源(如 JSP 页面、HTML 页面等)。被包含的资源会在请求处理时被执行,并将结果插入到当前页面中。

<jsp:include page="header.jsp" />
  • <jsp:forward>

    作用:将当前请求转发到另一个资源,原请求的所有信息(如请求参数、请求头)都会被传递到目标资源。转发后,当前页面的处理会停止。

<jsp:forward page="success.jsp" />
  • <jsp:param>

    作用:通常与 <jsp:include><jsp:forward> 一起使用,用于传递参数给被包含或转发的资源。类似url里使用?添加参数

---------------demo5.jsp------------
<jsp:forward page="demo6.jsp"><jsp:param name="param_name" value="luxiya"/><jsp:param name="param_name2" value="123456"/>
</jsp:forward>
---------------demo6.jsp------------
<%= request.getParameter("param_name")%>
<%= request.getParameter("param_name2")%>
  • <jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>
    <!-- 使用 <jsp:useBean> 创建或查找 User 对象,作用域为 session --><jsp:useBean id="user" class="com.example.User" scope="session" /><!-- 使用 <jsp:setProperty> 设置 User 对象的属性值 --><jsp:setProperty name="user" property="username" value="John" /><jsp:setProperty name="user" property="age" value="25" /><!-- 使用 <jsp:getProperty> 获取 User 对象的属性值并输出到页面 --><p>用户名: <jsp:getProperty name="user" property="username" /></p><p>年龄: <jsp:getProperty name="user" property="age" /></p>

JSTL标签

JSTL标签库使用步骤

  • 引入对应的 taglib
  • 使用其中的方法
  • 在 Tomcat 也需要引入 JSTL 的包,否则会报错:JSTL 解析错误
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • <c:choose>:无参数,作为条件判断的容器。

  • <c:when>test 为必填项,布尔类型的 EL 表达式,用于判断条件是否成立。

  • <c:otherwise>:无参数,当所有 <c:when> 的条件都不成立时执行其标签体内容。

  • <c:if>test:必填项,一个布尔类型的 EL 表达式,用于判断条件是否成立。

  • <c:out>

    • value:必填项,要输出的值,可以是 EL 表达式。
    • default:可选项,当 valuenull 时显示的默认值。
    • escapeXml:可选项,布尔值,默认为 true,表示对特殊字符进行转义;若设为 false 则不转义。
  • <c:set> 标签

    • var:必填项,要设置的变量名。
    • value:必填项,变量的值,可以是 EL 表达式。
    • scope:可选项,指定变量的作用域,取值为 pagerequestsessionapplication,默认为 page
  • <c:forEach>

  • items:可选项,要遍历的集合、数组或迭代器,通过 EL 表达式指定。

  • var:必填项,用于存储当前遍历元素的变量名。

  • begin:可选项,指定循环开始的索引,从 0 开始计数。

  • end:可选项,指定循环结束的索引。

  • step:可选项,指定循环的步长,默认为 1。

  • varStatus:可选项,用于存储循环状态信息的变量名,通过该变量可获取当前索引、是否为第一个元素等信息。

<c:out value="nihoa"/>
<%int i = 6;request.setAttribute("i", i);  // 将变量 i 存储到 request 作用域中request.setAttribute("score", 80);
%>
<c:if test="${i > 0}"><p>正确</p>
</c:if><c:out value="<%=i%>" default="未知姓名" escapeXml="true"/><c:set var="name" value="luxiya" scope="page"></c:set>
<c:out value="${name}" default="未知姓名" escapeXml="false"/><c:choose><c:when test="${score >= 90}"><p>成绩优秀</p></c:when><c:when test="${score >= 60}"><p>成绩及格</p></c:when><c:otherwise><p>成绩不及格</p></c:otherwise>
</c:choose><%ArrayList<String> people = new ArrayList<>();people.add(0,"张三");people.add(1,"李四");people.add(2,"王五");people.add(3,"赵六");people.add(4,"田六");request.setAttribute("list",people);
%><%--
var , 每一次遍历出来的变量
items, 要遍历的对象
begin,   哪里开始
end,     到哪里
step,   步长
--%>
<c:forEach var="people" items="${list}"><c:out value="${people}"/> <br>
</c:forEach><hr><c:forEach var="people" items="${list}" begin="1" end="4" step="2" ><c:out value="${people}"/> <br>
</c:forEach>
<%-- 结果:李四,赵六--%>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com