maven项目下jsp文件中el表达式失效问题

本文记录了在使用Maven创建Web项目时遇到的EL表达式无法解析的问题及解决方案,包括修改web.xml配置和JSP文件设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来是为了写个springmvc的小demo,雏形搭建起来后想起来做成maven的好了,就重新建的maven项目,坑就从这里开始了...

maven创建web项目默认使用的是web 2.3版本,web.xml文件头中也是2.3的版本..说实话之前没怎么用maven创建过项目,后来觉得maven项目看源码太方便了才更偏向于用maven的,所以这里也根本没在意..引入的javax-servlet-api 2.5的版本.然后发现jsp文件中的el表达式都原样输出了,看起来el表达式根本没解析..这就怪了,还好之前有个非maven创建的一模一样的demo,运行一遍无任何问题..基本锁定maven问题,而差异化的根源也确定在了web 2.3这个版本上..

然后百度,基本是这样的答案:2.5之前web.xml文件中的头定义中,el表达式默认是忽略不解析的,故需要显示声明解析el表达式,3种方案:

方案1,在jsp文件头上添加如下:

<%@ page isELIgnored="false" %>

方案2,在web.xml文件中如下定义:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>false</el-ignored>
        <scripting-invalid>true</scripting-invalid>
    </jsp-property-group>
</jsp-config>

方案3,改变web.xml中的头为2.5之上的版本..

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
 

这3种方案都是确实有效的,我改了web.xml的头为3.0的版本,再次运行ok了...

转载于:https://www.cnblogs.com/chyu/p/4921904.html

<think>我们正在处理用户关于JSP网页开发的教程和实践的请求。根据提供的引用资料,我们可以整合以下关键点:引用[1]:介绍了JSP基础知识,包括创建静态网页、JSP生命周期、元素使用,以及如何将静态与动态内容分离(MVC模式)。提到了开发工具如Eclipse和Maven。引用[2]:详细说明了JSP的核心概念、生命周期、指令、脚本元素、内置对象、动作标签、自定义标签库(JSTL),以及与Servlet的关系,并强调使用MVC设计模式。引用[3]:提到JSP-Presentation目教程,建议使用JSTL简化编写,避免在JSP中嵌入过多Java代码,使用MVC模式,并提到典型生态目ApacheTomcat。用户需求:JSP网页开发教程和实践。因此,回答应涵盖:1.JSP基础(概念、生命周期)2.开发环境搭建(工具:Eclipse,Tomcat,Maven)3.创建JSP页面(结合HTML/CSS/JS)4.JSP元素(指令、脚本、动作标签)5.使用JSTL和EL表达式简化代码6.MVC模式的应用7.最佳实践(代码分离、错误处理、性能优化)8.示例目结构我们将按照以下结构组织回答:-JSP简介与基础-开发环境配置-创建第一个JSP页面-JSP核心语法与内置对象-使用JSTL和EL表达式-MVC模式在JSP中的应用-最佳实践与性能优化-示例目结构最后,生成相关问题。</think>### JSP网页开发教程与实践指南 #### 1. JSP基础概念 JSPJavaServer Pages)是一种服务器端动态网页技术,允许在HTML中嵌入Java代码(脚本元素)。其核心优势在于: - **生命周期**:JSP页面会被编译成Servlet执行,包含`jspInit()`、`_jspService()`和`jspDestroy()`三个阶段[^2] - **与静态网页结合**:可通过HTML/CSS/JavaScript构建静态界面,用JSP标签添加动态功能 - **动态内容生成**:如根据数据库数据显示用户列表:`<%= userDao.getAllUsers() %>` #### 2. 开发环境搭建 ```xml <!-- Maven依赖示例 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> ``` - **必备工具**: - 服务器:Apache Tomcat(推荐9.0+)[^3] - IDE:Eclipse/IntelliJ with Java EE支持 - 构建工具:Maven/Gradle #### 3. 核心语法实践 ```jsp <%@ page contentType="text/html;charset=UTF-8" %> <!-- 页面指令 --> <!DOCTYPE html> <html> <head> <title>用户页面</title> </head> <body> <%-- 声明变量 --%> <%! int visitCount = 0; %> <%-- 脚本片段 --%> <% visitCount++; String username = request.getParameter("user"); // 使用内置request对象 %> <!-- EL表达式简化输出 --> <p>欢迎您, ${not empty username ? username : "游客"}!</p> <!-- JSTL标签库 --> <c:if test="${visitCount > 5}"> <div>您是活跃用户!</div> </c:if> </body> </html> ``` #### 4. MVC模式最佳实践 1. **结构分层**: - **Model**:JavaBean/DAO处理数据 - **View**:JSP页面只负责显示 - **Controller**:Servlet处理请求转发 2. **代码分离原则**: - 避免在JSP中编写复杂Java逻辑 - 使用JSTL代替`<% %>`脚本片段 - EL表达式替代`<%= %>`输出 3. **性能优化**: - 启用页面缓存:`<%@ page buffer="16kb" %>` - 预编译JSP:部署时生成Servlet类 - 连接池管理数据库连接 #### 5. 目示例结构 ``` /project ├── src/main/java │ ├── com/example/controller (Servlet) │ ├── com/example/service (业务逻辑) │ └── com/example/dao (数据访问) ├── src/main/webapp │ ├── WEB-INF │ │ ├── web.xml │ │ └── lib (JAR库) │ ├── index.jsp │ └── assets (CSS/JS) └── pom.xml (Maven配置) ``` #### 6. 调试与错误处理 - **常见错误**: - 500错误:检查JSP编译日志`$TOMCAT_HOME/logs` - EL表达式失效:确保已导入JSTL - **调试技巧**: - 使用`<c:out>`防止XSS攻击:`<c:out value="${userInput}"/>` - 错误页面配置:`<%@ page errorPage="error.jsp" %>` [^1]: JSP基础概念与静态网页整合方法 [^2]: JSP生命周期与内置对象解析 [^3]: Tomcat部署与MVC模式实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值