I use Jersey and Tomcat, and every time I click the link, I get the following message:
HTTP Status 500 - The servlet context path and/or the servlet path contain characters that are percent encoded type: Exception report message: The servlet context path and/or the servlet path contain characters that are percent encoded description: The server encountered an internal error that prevented it from fulfilling this request. exception: javax.ws.rs.ProcessingException: The servlet context path and/or the servlet path contain characters that are percent encoded org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:317) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) note: The full stack trace of the root cause is available in the Apache Tomcat/7.0.56 logs.
REST service path:
http:
When I enter it in the URL bar, it works, but when I click the link somewhere in the path, the URL becomes the following:
http://localhost:8070/simple%2Dservice%2Dwebapp/rest/hello
And somehow, Jersey doesn't handle percentage URLs by default.
Can someone please help me make this work without removing the dash in the url? There was no working solution in my search.
Tag
HelloResource.java
package com.example; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriInfo; @Path("hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String sayHelloPlainText(@Context UriInfo uriInfo) { String name = uriInfo.getQueryParameters().getFirst("name"); if (name == null) { name = "unknown user"; } return "Hello " + name + "!"; } @GET @Produces(MediaType.TEXT_HTML) public String sayHelloHtml(@Context UriInfo uriInfo) { String text = sayHelloPlainText(uriInfo); String result = "<html>" + "<head>" + "<title>Hello Jersey</title>" + "</head>" + "<body>" + "<h1>" + text + "</h1>" + "</body>" + "</html>"; return result; } @GET @Produces(MediaType.TEXT_XML) public String sayHelloXml(@Context UriInfo uriInfo) { String text = sayHelloPlainText(uriInfo); String result = "<?xml version=\"1.0\"?>" + "<hello>Hello " + text + "!" + "</hello>"; return result; } }
index.jsp
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>RESTful Web Application</title> </head> <body> <h2>My RESTful Web Application!</h2> <ul> <li><a href="rest/hello">Hello from Jersey</a></li> <li><a href="rest/hello?name=Johannes">Hello using parameters</a></li> </ul> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>Jersey Web Application</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.example</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey Web Application</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </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>com.example</groupId> <artifactId>simple-service-webapp</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>simple-service-webapp</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jersey.version>2.16</jersey.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey</groupId> <artifactId>jersey-bom</artifactId> <version>${jersey.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> </dependency> </dependencies> <build> <finalName>simple-service-webapp</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <inherited>true</inherited> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>1.0.2.Final</version> <configuration> <id>WildFlyServer</id> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <server>TomcatServer</server> <url>http://localhost:8070/manager/text</url> </configuration> </plugin> </plugins> </build> </project>
source share