[英]Custom jsp tag is not invoked
I'm trying to write custom jsp tag. 我正在尝试编写自定义jsp标记。 But my tag is not invoked. 但是我的标签没有被调用。 Instead I got response in plain text with my html and jsp tags(maybe browser doesn't parse it as html because of jsp tags). 相反,我得到了带有html和jsp标签的纯文本响应(也许由于jsp标签,浏览器无法将其解析为html)。 My tld file is in the right place(/WEB-INF/custom.tld) and I have no errors or exceptions in console and I got no clue what is wrong with my tag. 我的tld文件位于正确的位置(/WEB-INF/custom.tld),我在控制台中没有错误或异常,并且我不知道我的标签有什么问题。 Probably it's because of some jsp dependencies or deployment descriptors. 可能是由于某些jsp依赖项或部署描述符所致。 I'm using tomcat 7. My code: 我正在使用tomcat7。我的代码:
web.xml 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 的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 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 为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!");
}
}
And my response looks exactly like this: 我的回应看起来像这样:
<%@ taglib prefix="ex" uri="/WEB-INF/custom.tld"%>
<html>
<head>
<title></title>
</head>
<body>
<ex:greet/>
</body>
</html>
Could you please tell me what am I doing wrong? 你能告诉我我在做什么错吗?
For servlet url mapping, you have to use <url-pattern>/</url-pattern>
instead of <url-pattern>/*</url-pattern>
, because /*
overrides the default JspServlet mapping. 对于servlet url映射,必须使用<url-pattern>/</url-pattern>
而不是<url-pattern>/*</url-pattern>
,因为/*
会覆盖默认的JspServlet映射。 You can find more details about difference between /
and /*
at this answer 您可以在此答案中找到有关/
和/*
之间差异的更多详细信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.