13

这是关于在 spring mvc 应用程序的 jsp 页面中访问资源的问题的后续问题 感谢@kmb385,我能够解决该问题,但现在我的 JSP 文件 javax.servlet.jsp.JspException 中出现以下 Eclipse 错误不能解析为一个类型和

javax.servlet.jsp.PageContext 无法解析为类型

正如 kmb385 所建议的,这是我的控制器:

@Controller
public class AdminController {

        @RequestMapping("/")
        protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception {

            ModelAndView model = new ModelAndView("index");
            model.addObject("msg", "hello world");

            return model;
        }   
    }

这是我的 index.jsp 页面以防万一:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<!-- <link type="text/css" rel="stylesheet" href="css/style.css"/> -->
<style type="text/css">
    <%@include file="css/style.css" %>
    </style>
<title>My Project - MainPage</title>
</head>
<body>
<h2 class="main_heading2">My Project - MainPage</h2>
<div style="float: right; width: 30%; text-align: center">
<p style="float:left;">an image should be here</p>
<img src="images/logo.jpg" alt="Logo"/>
<img src="${pageContext.servletContext.contextPath}/resources/images/logo.jpg" />
</div>

</body>

通过在 JSP 验证器中禁用它,我遇到了“解决方案”,但除非您能给出合理的理由,否则请不要建议这样做。我宁愿正确纠正这个问题

任何帮助表示赞赏

更新: 根据@kmb385 的要求构建路径屏幕抓取 Eclipse 构建路径

4

7 回答 7

36

尝试将servlet-apipom.xml 中的依赖项设置为提供。这个 jar 可能与 tomcat 提供的 servlet-api.jar 冲突。

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>

还要确保包含 jsp-api 依赖项,再次按照提供的方式设置:

    <!-- Servlet -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        <scope>provided</scope>
    </dependency>

通过右键单击您的项目 > 属性,确保您的所有 Maven 依赖项都用于构建项目。在部署程序集选项卡上单击添加按钮,然后单击 Java 构建路径条目,然后单击 Maven 依赖项,最后单击完成。

您可能还需要将 Maven 依赖项添加到构建路径。右键单击您的项目 > Maven > 更新项目配置。

于 2012-11-14T11:02:33.793 回答
6

如果你已经在 maven 中下载了所有的依赖项并且错误仍然没有消失,请按照以下步骤操作:

  1. 右键单击项目并转到属性
  2. 点击目标运行时间
  3. 选中您正在使用的服务器前面的框。

这应该有效。

于 2016-03-03T14:46:18.427 回答
3

尝试导入类。

修改你的jsp的第一行看起来像这样;

<%@ page language="java" import="javax.servlet.jsp.PageContext" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>

于 2012-11-14T11:14:59.857 回答
1

添加到 pom.xml 依赖项

     <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>

JSP:

确保在标记之前添加 jsp:

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

获取 JSP 的上下文:

<c:set var="contextPath" value="${pageContext.request.contextPath}"/>

导入样式 css:

<link type="text/css" rel="stylesheet" href="${contextPath}/css/yourCssFile.css"/>

调度程序-servlet:

在您的“spring-dispatcher-servlet.xml”上添加以下行:

<beans xmlns="... xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="...
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<mvc:resources mapping="/resources/**" location="/resources/css/" />

也许,您需要添加此适配器:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> [Optional]
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="order" value="0"/>
</bean>  

此处解释:如何使用 spring MVC 在 jsp 中包含 js 和 css

于 2015-04-30T11:42:12.387 回答
0

如何解决 javax.servlet.jsp.PageContext 无法解析为类型

1:- 选择您的项目并右键单击

2:- 转到属性

3:- 单击目标运行时

4:- 勾选“Apache Tomcat v8.0”

在我的情况下,我使用的是 Apache v8.0

于 2016-06-27T15:05:19.500 回答
0
This will solve the problem 

<!-- Need this to compile JSP -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
于 2017-07-24T05:17:40.023 回答
0

这种替代方法对我<%=request.getContextPath()%>有用,它可以获取应用程序上下文。

于 2019-07-24T07:53:53.200 回答