2014-09-22 1 views
0

UPDATE: Похоже, что язык выражений (EL) не обрабатывается. Включение скриптлетов вроде <% System.out.println("Hello"); %> действительно работает. Так выглядит (это дикое предположение) это то, что не доволен JSP 2.1 API, что я в том числе, как зависимость Maven:Maven Simple Webapp archetype не обрабатывает страницы jsp?

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

ORIGINAL:

Это замечательно простая проблема, но я не могу найти, что ее вызывает. Надеюсь, кто-то может посмотреть на него и сказать: «О, вы забыли X!» (Все, что «X» оказывается.)

Я создал веб-проект с Maven Simple WebAPP архетипа, который дает простой проект с одной страницы JSP, index.jsp,

<%@ page contentType="text/html; charset=UTF-8" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

<html> 
<body> 
<h2>Hello World!</h2> 
<c:set var="myVar" >Some Text Here</c:set> 
${myVar} 
</body> 
</html> 

Когда сборки и запуска это приложение в Tomcat, я бы ожидать, чтобы получить веб-страницу, которая говорит

Hello World! 
Some Text Here 

, но вместо этого я получаю:

Hello World! 
${myVar} 

Итак, JSP не обрабатывается каким-то образом. Я не получаю ошибку, но я также не получаю ожидаемого результата.

Сервер Tomcat установлен и работает с другими приложениями, поэтому я не думаю проблема есть. Это приложение очень маленький и простой, вот web.xml

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
</web-app> 

Вот вся pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.sample</groupId> 
    <artifactId>myweb</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>myweb Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <compilerSource>1.6</compilerSource> 
    </properties> 


    <dependencies> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>taglibs</groupId> 
      <artifactId>standard</artifactId> 
      <version>1.1.2</version> 
     </dependency> 

     <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> 

    </dependencies> 

    <build> 
     <finalName>myweb</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>${compilerSource}</source> 
        <target>${compilerSource}</target> 
        <showDeprecation>true</showDeprecation> 
        <showWarnings>true</showWarnings> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

Is '<% System.out.println (" Hello "); %> 'работает? – 2014-09-22 18:38:00

+0

Нет, я ничего не получил от этого – user3120173

+0

Упс, да, это печатает «Привет» в системной консоли – user3120173

ответ

1

Короткий ответ оказывается, что Maven Archetype maven-archetype-webapp создает проект, который не будет работать с EL. Архетип формирует web.xml файл с этим DTD в верхней части файла:

<!DOCTYPE web-app PUBLIC 
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
     "http://java.sun.com/dtd/web-app_2_3.dtd" > 
<web-app> 

Это DTD не будет работать, если вы пытаетесь использовать Expression Language (EL), потому что EL не был поддержан до Servlet 2.4.

Я был в состоянии получить EL работает (под Tomcat 7.0.42), изменяя Maven сгенерированный web.xml заголовок следующим образом:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0" 
    metadata-complete="true"> 

Разочарование: Это, кажется, не очень четко документированный в любом месте - в поисках источника этой проблемы я попал на сайт Oracle, в блоги людей, в архивы старых списков электронной почты - кажется, что, если такие вещи могут быть настолько болезненными, они должны быть хорошо документированы. Просто говорю.

0

ли это так

<body> 
<h2>Hello World!</h2> 
<c:set var="myVar" scope="session" value="Some Text Here"/> 
<c:out value="${myVar}"/> 
</body> 
+0

Нет радости, тот же результат, я получаю '$ {myVar}' вместо 'Some Text Here' – user3120173

Смежные вопросы