2015-06-03 3 views
1

Я пытаюсь написать пользовательский тэг jsp. Но мой тег не вызывается. Вместо этого я получил ответ в текстовом виде с моими тегами html и jsp (возможно, браузер не анализирует его как html из-за тегов jsp). Мой tld-файл находится в нужном месте (/WEB-INF/custom.tld), и у меня нет ошибок или исключений в консоли, и я не понял, что не так с моим тегом. Вероятно, это связано с некоторыми зависимостями jsp или дескрипторами развертывания. Я использую Tomcat 7. Мой код:Пользовательский тег jsp не вызывается

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

    <display-name>Spring MVC Application</display-name> 

    <servlet> 
     <servlet-name>HelloWeb</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>HelloWeb</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>demo</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.0</version> 
      <scope>provided</scope> 
     </dependency> 

    </dependencies> 
</project> 

custom.tld

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
     version="2.0"> 
    <tlib-version>1.0</tlib-version> 
    <short-name>Test</short-name> 
    <tag> 
     <name>greet</name> 
     <tag-class>com.test.tag.HelloTag</tag-class> 
     <body-content>empty</body-content> 
    </tag> 
</taglib> 

hello.jsp

<%@ taglib prefix="ex" uri="/WEB-INF/custom.tld"%> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<ex:greet/> 
</body> 
</html> 

Tag

package com.test.tag; 

import javax.servlet.jsp.JspException; 
import javax.servlet.jsp.tagext.SimpleTagSupport; 
import java.io.IOException; 

public class HelloTag extends SimpleTagSupport { 

    @Override 
    public void doTag() throws JspException, IOException { 
     getJspContext().getOut().println("Hello!"); 
    } 
} 

И мой ответ выглядит точно так же, как это:

<%@ taglib prefix="ex" uri="/WEB-INF/custom.tld"%> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<ex:greet/> 
</body> 
</html> 

Не могли бы вы сказать мне, что я делаю неправильно?

+0

может попытаться изменить '/*' в '/' –

+0

вы добавляете JSTL банку и Библиотека тегов jstl? –

+0

где u размещен ur "custom.tld" файл? Уверен, что и разместил его внутри «WEB-INF»? – Bikku

ответ

1

Для сопоставления urlet сервлетов вы должны использовать <url-pattern>/</url-pattern> вместо <url-pattern>/*</url-pattern>, потому что /* переопределяет сопоставление JspServlet по умолчанию. Вы можете найти более подробную информацию о разнице между / и /* в этом answer

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