JspSourceDependent.getDependants()

本文探讨了JSP编译成Servlet的过程,包括继承HttpJspBase类及实现JspSourceDependent接口的方法。详细介绍了_jspService方法用于处理HTTP请求及getDependants方法跟踪依赖源文件的功能。

1. JSP编译成的servlet

继承 org.apache.jasper.runtime.HttpJspBase

实现 org.apache.jasper.runtime.JspSourceDependent

 

2. 继承 org.apache.jasper.runtime.HttpJspBase 实现方法 public void _jspService(HttpServletRequest request, HttpServletResponse response)

 

3. 实现 org.apache.jasper.runtime.JspSourceDependent 实现方法  public java.util.List getDependants()

 

该方法 英文描述如下

public interface JspSourceDependent

Interface for tracking the source files dependencies, for the purpose of compiling out of date pages. This is used for

1) files that are included by page directives

2) files that are included by include-prelude and include-coda in jsp:config

3) files that are tag files and referenced

4) TLDs referenced

 

跟踪原始文件的依赖,为以下4个目的使用

 

1)使用page指令包含的页面文件 例如<%@include file="xxx.html"%>

2) files that are included by include-prelude and include-coda in jsp:config

3) 文件是标签或者引用

4) TLDs 引用

 

<think>好的,我现在需要帮助用户解决如何正确使用jsp-api.jar编写JSP应用程序的问题。首先,用户之前的问题是关于servlet-api和jsp-api依赖冲突导致的404错误,现在他想了解如何正确使用jsp-api.jar来编写JSP应用。结合之前的引用,特别是引用[1]提到冲突会导致方法未定义错误,引用[4]讨论了项目与Tomcat的jar包冲突问题,我需要确保用户正确配置依赖,避免冲突。首先,用户可能不太清楚在开发JSP时是否需要显式引入jsp-api.jar。根据引用[2]和[3],这两个jar包是开发JSPServlet必需的,但实际使用中,Tomcat等服务器已经提供了这些API,所以依赖范围应该设置为provided,避免打包到WAR中。接下来,我需要指导用户如何正确配置构建工具,比如Maven或Gradle,确保依赖范围正确。同时,需要提醒用户不要将jsp-api.jar放在WEB-INF/lib目录下,否则会引起类冲突,如引用[4]所述。然后,用户可能需要编写JSP的基本示例,展示如何利用JSP的内置对象和标签库。这里要提到正确导入类,但根据引用[1],如果配置错误,可能会遇到方法未定义的错误,所以需要确保服务器提供的API版本匹配。 还要注意版本兼容性,如引用[6]提到的Tomcat版本与Servlet/JSP版本的对应关系,用户需要根据服务器版本选择合适的依赖版本,避免NoSuchMethodError等问题。 最后,生成相关问题,帮助用户深入理解,比如如何检查服务器使用的JSP版本,或者处理JSP编译错误。这些相关问题需要基于用户之前的疑问和常见问题来设计,确保连贯性和实用性。</think>### 如何正确使用jsp-api.jar开发JSP应用程序 #### 1. 理解依赖关系本质 - **运行时环境支持**:JSP规范实现由Web容器(如Tomcat)提供,因此开发时只需声明编译依赖,部署时不应包含jsp-api.jar到WAR包中[^1] - **Maven正确配置**: ```xml <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> <!-- 确保不打包 --> </dependency> ``` $$ \text{scope=provided} \Rightarrow \text{编译时可见,运行时由容器提供} $$ #### 2. 基础开发步骤 **创建JSP文件**: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>基础示例</title> </head> <body> <% // 使用JSP隐含对象 out.println("当前时间:" + new java.util.Date()); %> <%= "JSP表达式语法示例" %> </body> </html> ``` #### 3. 核心API使用要点 | 类/接口 | 作用域 | 典型用法 | |--------------------|-------------------|----------------------------| | PageContext | 页面上下文 | 获取其他隐含对象 | | JspWriter | 输出流 | 替代ServletResponse.getWriter() | | HttpJspPage | JSP页面契约 | 实现_jspService()方法 | #### 4. 版本匹配验证方法 ```bash # 查看Tomcat的JSP实现版本 find $CATALINA_HOME/lib -name "jasper*.jar" -exec unzip -p {} META-INF/MANIFEST.MF \; ``` 输出示例: $$ \text{Implementation-Version: 9.0.64} $$ #### 5. 开发环境配置清单 1. IDE中设置Tomcat为运行时环境 2. 检查项目属性中的"Deployment Assembly"配置 3. 验证.classpath文件中无jsp-api.jar的显式引用 #### 6. 常见错误处理 **问题现象**:编译时报错`无法解析JspSourceDependent` ```xml <!-- 错误配置示例 --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <!-- 缺少scope配置 --> </dependency> ``` **解决方法**:添加`<scope>provided</scope>`并清理Maven依赖: ```bash mvn dependency:purge-local-repository ``` #### 7. 高级功能开发 **自定义标签库开发**: 1. 创建标签处理器: ```java public class HelloTag extends TagSupport { public int doStartTag() throws JspException { try { pageContext.getOut().write("Hello Custom Tag!"); } catch (IOException e) { throw new JspException(e); } return SKIP_BODY; } } ``` 2. 配置TLD文件: ```xml <tag> <name>hello</name> <tag-class>com.example.HelloTag</tag-class> <body-content>empty</body-content> </tag> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值