博客
关于我
html转jsp_JSP详解
阅读量:791 次
发布时间:2023-01-24

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

JSP技术详解

JSP(JavaServer Pages)全称Java Server Pages,是一种动态网页开发技术。它通过在HTML网页中插入Java代码来实现灵活的网页动态化。JSP文件通常与Servlet结合使用,其中JSP用于实现用户界面,负责展示动态内容,而Servlet负责处理业务逻辑和数据处理。

JSP的特点

  • 本质上还是Servlet:JSP本身是Servlet的一种实现方式,其核心思想与Servlet相同,都是将请求转换为Servlet并执行。
  • 跨平台,一次编写处处运行:JSP文件可以直接裸运行,而无需经过特定的编译步骤,虽然实际使用中通常会通过转换器将JSP文件转换为对应的Servlet文件,因为JSP转换到Servlet后仍然是纯Java代码,可直接运行。
  • 组件跨平台:JSP的标签组件可以经过转换后也能运行在任何支持Servlet的服务器上。
  • 健壮性和安全性:JSP具有较高的健壮性和安全性,企业级应用常用JSP来构建复杂的网页。
  • JSP的访问原理

    JSP的运行过程如下:

  • 浏览器向服务器发送HTTP请求(如访问某个.jsp文件)。
  • 服务器接收请求后将其交给JspServlet进行处理。
  • JspServlet通过jsp:servlet标签识别JSP文件并启动转换过程。
  • JSP文件被转换为对应的Servlet文件(.java),然后被Java虚拟机执行。
  • 执行完成后,Servlet将生成的HTML内容返回浏览器显示给用户。
  • 建议详细阅读JSP运行原理的专属文章,如《JSP运行原理》。

    Page指令

    Page指令用于在JSP转译过程中设置一些配置信息,常用来定义转译语言、字符集、异常页面等。常见的page指令包括:

    • @page language="java":定义使用的语言,默认为java。
    • @page import="...":导入需要的Java包。
    • @page pageEncoding="...":指定页面的编码格式。
    • @page contentType="...":指定响应内容类型。
    • @page session="...":控制Session的使用。
    • @page isErrorPage="...":设置错误页面。
    • @page errorPage="...":当JSP出现错误时跳转指定页面。

    JSP代码块

    JSP支持局部代码块和全局代码块:

  • 局部代码块

    • 代码块用<% java代码 %>包裹。
    • 被转译为_jspService方法中对应的Java代码。
  • 全局代码块

    • 代码块用<%! java代码 %>包裹。
    • 被转译为JSP对应的Servlet文件的全局部分。
  • Java脚本段/table达式

    • <%= 表达式 %>输出数据到页面。
    • 表达式不允许使用分号结尾,否则会导致编译错误。
  • JSP注释

    JSP支持多种注释方式:

    注释类型 etkыв结果
    HTML注释 被转译,输出到浏览器但不被执行
    CSS注释 被转译,输出到浏览器但不被执行
    JavaScript注释 被转译,输出到浏览器但不被执行
    Java注释 被转译但不执行
    JSP注释 不被转译也不执行,格式为<!-- 注释内容 -->

    static和dynamic Include

    为了实现资源共享,JSP支持静态和动态引入:

  • 静态引入

    • 使用<%@ include file="..." %>引入JSP文件。
    • 引入文件和主JSP文件合并转换为一个Servlet文件,共享变量需谨慎。
  • 动态引入

    • 使用<jsp:include page="..." %>引入文件。
    • 引入文件单独转换为Servlet,主JSP调用引入文件。
  • 两者的主要区别在于共享变量能力,静态引入变量不可共享用于异名变量,而动态引入允许共享。

    转发Forward标签

    当JSP处理后需要将请求转换为其他页面,可以使用<jsp:forward>标签:

    • 属性page="..."指定转发页面。
    • 子标签<jsp:param>用于传递额外参数。

    <jsp:forward>标签只能输出空白内容,且传输的参数不会随状态传递。

    Nine隐含对象

    JSP页面内置提供九大对象:

  • pageContext:当期页面作用域,包含其他八个对象。
  • request:封存请求相关数据。
  • session:同一浏览器持续连接期间的数据存储。
  • application:服务器运行期间的数据存储。
  • response:定义响应内容和编码格式。
  • out:高效的响应输出流。
  • page:当前转译的JSP文件。
  • config:ServletContext对象,用于资源初始化。
  • exception:异常对象,存储异常信息。
  • 四大作用域

    JSP的变量作用域主要有以下四种:

  • pageContext(当前页面):变量仅在当前JSP页面内有效,适用于页面显示层数据。
  • request(请求):变量有效期从请求接收到响送完成,适配多页面协同使用。
  • session(会话):浏览者与服务器保持连接期间的数据存储,适合用户数据共享。
  • application(应用程序):适用于不同浏览者间的数据共享,如站点信息。
  • JSP与Servlet职责分工

    • Servlet负责业务逻辑处理,使用转发或重定向将请求转向JSP页面。
    • JSP页面负责呈现用户界面和数据输出。

    特别是在数据流转时,转发使用requestsession,而重定向使用session,无法使用application,因为application为服务器层,用户间共享的数据不宜用于请求转换。

    转发与重定向的路径

  • 相对路径

    • Servlet(String redirectionPage):.sendRedirect("路径");
    • Request Dispatcher forwardPage: forward(request, response);
  • 绝对路径

    • 重定向中的第一个/表示服务器根目录。
    • 请求转发中的第一个/表示项目根目录。
  • 建议在开发中始终使用绝对路径以避免路径错误和维护困难。

    JSP中的绝对路径与BasePath

    为了简化资源路径管理,可以使用basePath技术:

    • 基础路径配置为项目根目录,通过<head><base href=" royalties/%BASEPATH%"></head>设置。
    • BasePath法与手写斜杠法需谨慎结合,混用会导致路径错误。

    结语

    JSP作为Java web应用的重要组成部分,与Servlet紧密结合推动了灵活高效的网页开发。熟练掌握JSP的工作原理和实用技巧,是提升开发能力的重要步骤。

    转载地址:http://noeyk.baihongyu.com/

    你可能感兴趣的文章
    EdgeX Foundry:边缘计算的创新平台
    查看>>
    EdgeX Foundry:边缘计算的未来趋势与应用
    查看>>
    Edge浏览器打开控制台后程序总是停止进入debug模式关闭教程【八仙过海之又一过海方案】
    查看>>
    Educational Codeforces Round 28
    查看>>
    Educational Codeforces Round 47 (Rated for Div. 2)F. Dominant Indices 线段树合并
    查看>>
    ed编辑器--适用于shell脚本内编辑文件的最最简单编辑器
    查看>>
    "SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名"转...
    查看>>
    EF 资料
    查看>>
    EF6.0中出现未找到具有固定名称“System.Data.SqlClient”的 ADO.NET提供程序的实体框架提供程序解决办法...
    查看>>
    EF6与MVC5系列(4):在MVC应用程序中使用弹性连接和命令拦截
    查看>>
    Effective C# 学习笔记(四十五)减少装箱拆箱行为
    查看>>
    Effective Modern C++:02auto
    查看>>
    efficientnet最合适的尺寸和最后一层的层数
    查看>>
    EF三种编程方式详细图文教程(C#+EF)之Database First
    查看>>
    Ehcache Java开源缓存框架
    查看>>
    EhCache 分布式缓存/缓存集群
    查看>>
    EHR:对人力资源信息系统的认识
    查看>>
    EJB学习笔记六(EJB中的拦截器)
    查看>>
    el-form表单重置后输入失效
    查看>>
    el-select下拉框修改背景色
    查看>>