Spring REST not creating _method hidden element - spring-mvc

I used to have it working fine, somehow after some development I realized the HTML element _method is not created automatically on the page thus REST does not work.
Below is my web.xml which contains the HiddenHttpMethodFilter.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml,
/WEB-INF/spring/appServlet/*-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<error-page>
<error-code>403</error-code>
<location>/errors/403.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/errors/404.html</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/errors/405.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/errors/500.html</location>
</error-page>
</web-app>
what I have tried
Maven Update Project
Maven Clean > Maven Install
Clear the working directory
UPDATED
Portion of my jsp
<html:form modelAttribute="user" id="user-form" formUrl="/user">
form.tag which translate it to Spring form
<form:form modelAttribute="${modelAttribute}" id="${id}"
action="${processedFormUrl}" class="form-horizontal"
target="${target}" method="post">
<fieldset>
<jsp:doBody />
</fieldset>
</form:form>

HiddenHttpMethodFilter is required only if your form-method is other than post i.e. its PUT/DELETE, in that case spring automatically adds _method hidden field with correct form-method.
In case you want to make a put request change method="put" and spring-form will take care of rest
EDITTED
I looked at spring FormTag source code, and I found the below
if (!isMethodBrowserSupported(getMethod())) {
assertHttpMethod(getMethod());
String inputName = getMethodParameter();
String inputType = "hidden";
tagWriter.startTag(INPUT_TAG);
writeOptionalAttribute(tagWriter, TYPE_ATTRIBUTE, inputType);
writeOptionalAttribute(tagWriter, NAME_ATTRIBUTE, inputName);
writeOptionalAttribute(tagWriter, VALUE_ATTRIBUTE, processFieldValue(inputName, getMethod(), inputType));
tagWriter.endTag();
}
protected boolean isMethodBrowserSupported(String method) {
return ("get".equalsIgnoreCase(method) || "post".equalsIgnoreCase(method));
}
So _method hidden field will be added only if your form method is not get/post.
For your case, when delete button is clicked, you can add a input hidden tag for _method field using jquery before subitting,
var input = $("<input>").attr("type", "hidden").attr("name", "_method").val("DELETE");
$('form#yoorFormID').append(input).submit();

Related

Migrating JSF1.2 application from Jboss 4.2 to Wildfly 13

I am trying to migrate an existing JSF 1.2 application from Jboss 4.2 to Wildfly 13. I have also moved from jdk1.5 to jdk10. I am making an ear file with the following hierarchy:
ear
/lib ---all jars in it
/META-INF
/application.xml
/jboss-deployment-structure.xml
/MANIFEST.MF
/EOSEJB.jar
/EOSWeb.war
My jboss-deployment-structure.xml looks like:
<deployment>
<exclude-subsystems>
<subsystem name="jsf" />
</exclude-subsystems>
<exclusions>
<module name="com.sun.jsf-impl" />
<module name="javax.faces.api" />
<module name="org.jboss.as.jsf" />
<module name="org.jboss.as.jsf-injection" />
<module name="org.apache.commons.beanutils" />
<module name="org.apache.commons.cli" />
<module name="org.apache.commons.codec" />
<module name="org.apache.commons.collections" />
<module name="org.apache.commons.io" />
<module name="org.apache.commons.lang" />
<module name="org.apache.commons.lang3" />
<module name="org.apache.commons.logging" />
<module name="org.apache.commons.pool" />
<module name="org.hibernate" slot="main" />
</exclusions>
</deployment>
Same exclusions in <sub-deployment name="EOSWeb.war">
All jsf jars that I used in jboss 4.2 are in ear/lib now.
My web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.COMPRESS_STATE_IN_CLIENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsp</param-value>
</context-param>
<!-- context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param-->
<!-- context-param>
<param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
<param-value>mojarra-1.2_15</param-value>
</context-param-->
<context-param>
<param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>
/WEB-INF/faces-config.xml,
/WEB-INF/faces-config-eos.xml,
/WEB-INF/faces-config-pda.xml,
/WEB-INF/faces-config-referral.xml
</param-value>
</context-param>
<!-- SERVET DEFINITIONS -->
<servlet>
<servlet-name>PDF Servlet</servlet-name>
<servlet-class>org.ukt.common.PDFServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>EOS Faces Servlet</servlet-name>
<!-- <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> -->
<servlet-class>org.ukt.eos.util.EOSCustomFacesServlet</servlet-class>
<init-param>
<param-name>errorPage</param-name>
<param-value>/faces/jsp/ErrorPage.jsp</param-value>
</init-param>
<load-on-startup>-1</load-on-startup>
</servlet>
<!-- SERVET MAPPING DEFINITIONS -->
<servlet-mapping>
<servlet-name>PDF Servlet</servlet-name>
<url-pattern>/_donor_summary/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>EOS Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<!-- WELCOME FILE DEFINITION -->
<welcome-file-list>
<welcome-file>jsp/login.jsp</welcome-file>
</welcome-file-list>
<!-- FILTER DEFINITION -->
<filter>
<filter-name>extensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<description>Set the size limit for uploaded files. Format: 10 - 10 bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB</description>
<param-name>uploadMaxFileSize</param-name>
<param-value>100m</param-value>
</init-param>
<init-param>
<description>
Set the threshold size - files below this limit are stored in memory, files above this limit are stored on disk. Format: 10
- 10 bytes 10k - 10 KB 10m - 10 MB 1g - 1 GB
</description>
<param-name>uploadThresholdSize</param-name>
<param-value>100k</param-value>
</init-param>
</filter>
<!-- FILTER MAPPING DEFINITION -->
<filter-mapping>
<filter-name>extensionsFilter</filter-name>
<url-pattern>/faces/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SessionHandlerFilter</filter-name>
<filter-class>org.ukt.eos.security.filters.SessionHandlerFilter</filter-class>
<init-param>
<param-name>session_timeout_page</param-name>
<param-value>/faces/jsp/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionHandlerFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>PDFRendererFilter</filter-name>
<filter-class>org.ukt.eos.pdf.filter.PDFRendererFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PDFRendererFilter</filter-name>
<url-pattern>/_donor_summary/*</url-pattern>
</filter-mapping>
<!-- Filter added for security (pen test) defects
<filter>
<filter-name>CrossSiteScriptingFilter</filter-name>
<filter-class>org.ukt.eos.security.filters.CrossSiteScriptingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CrossSiteScriptingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<error-page>
<error-code>500</error-code>
<location>/EOSWeb/faces/jsp/ErrorPage.jsp</location>
</error-page>
<listener>
<listener-class>
org.ukt.eos.security.filters.EOSSessionListener
</listener-class>
</listener>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
</web-app>
When I now place my ear file in standalone/deployment folder and start wildfly, it doesn't give any error in server.log. But when I hit the application url it gives me 404.
Full server logs is available at:
server logs

My all XML configuration files of SpringMVC project show some error that they can't recognize the symbol in the files

I don't know how those error occured,the project goes no any problem just now.
I remember I renamed the index.jsp and create a new RestController.
The error say "Element param-serviceName is not allowed here".
Here are some images show the errors
web.xml:
applicationContext.xml:
and the code of the web.xml as follows,others xml files like the web.xml
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">
<!--配置Spring核心监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--指定Spring的配置文件-->
<context-param>
<param-serviceName>contextConfigLocation</param-serviceName>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!--Spring MVC的前端控制器-->
<servlet>
<servlet-serviceName>springmvc</servlet-serviceName>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-serviceName>contextConfigLocation</param-serviceName>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<!--临时文件的目录-->
<location>/tmp/</location>
<!-- 上传文件最大2M -->
<max-file-size>2097152</max-file-size>
<!-- 上传文件整个请求不超过4M -->
<max-request-size>4194304</max-request-size>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-serviceName>springmvc</servlet-serviceName>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--编码过滤器-->
<filter>
<filter-serviceName>characterEncodingFilter</filter-serviceName>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-serviceName>encoding</param-serviceName>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-serviceName>forceEncoding</param-serviceName>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-serviceName>characterEncodingFilter</filter-serviceName>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--session有效时间-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Consider this my mistake to not be able to help OP properly
The issue in your web.xml is, it is using wrong tags.
update your web.xml to this and then try.
<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">
<!--配置Spring核心监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--指定Spring的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!--Spring MVC的前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<!--临时文件的目录-->
<location>/tmp/</location>
<!-- 上传文件最大2M -->
<max-file-size>2097152</max-file-size>
<!-- 上传文件整个请求不超过4M -->
<max-request-size>4194304</max-request-size>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--编码过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--session有效时间-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>

Chaining servlet filer with jersey filter

My jersey filter is identified with the #Provider annotation. Myweb.xml defines my servlet filters alone. I notice that my servlet filters are always executed before my jersey filter. I am unable to define my jesery filter in web.xml. How do I specify the ordering of the filters?
I want my jaxrs jersey filter to be executed before AuthFilter, but it is always executed after AuthFilter.
My jax rs jersey filter class is annotated with #Provider (com.sq.filters is the package which has this jersey filter)
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<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>Sq</display-name>
<welcome-file-list>
<welcome-file>/views/index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.SqListener</listener-class>
</listener>
<servlet>
<servlet-name>ApiServlet</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.wordnik.swagger.jaxrs.json,
com.sq.api,
com.sq.filters,
com.fasterxml.jackson.jaxrs.json
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
com.wordnik.swagger.jersey.listing.ApiListingResourceJSON,
com.wordnik.swagger.jersey.listing.JerseyApiDeclarationProvider,
com.wordnik.swagger.jersey.listing.JerseyResourceListingProvider
</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>com.wordnik.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>0.0.1-SNAPSHOT</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/api</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ApiServlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Webapp</filter-name>
<filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.sq.webcommon.SqWebApp</param-value>
</init-param>
<init-param>
<param-name>jersey.config.servlet.filter.staticContentRegex</param-name>
<param-value>/sq/static/.*</param-value>
</init-param>
<!--
<init-param>
<param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
<param-value>/(decorators|scripts|styles|resources|(WEB-INF/views))/.*</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.sq.webcommon.SqWebApp</param-value>
</init-param>
pass to next filter if Jersey/App returns 404 -->
<init-param>
<param-name>jersey.config.servlet.filter.forwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Webapp</filter-name>
<url-pattern>/sq/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.sq.auth.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

404 on REST #RequestMapping

I'm trying to figure out why I'm getting a 404 error here, but I just can't see it.
Here is my web.xml:
<servlet>
<servlet-name>ep</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ep</servlet-name>
<url-pattern>/ep/*</url-pattern>
</servlet-mapping>
Here is my ep-servlet.xml (Only "beans" tags surround the following code):
<mvc:annotation-driven />
<context:component-scan base-package="server.service2">
</context:component-scan>
Here is the class itself:
package server.service2;
....
#Controller
#RequestMapping("/user")
public class LoginService
{
#RequestMapping(value = "/check/{username}", method = RequestMethod.GET)
public void checkUsername(#PathVariable("username") String username)
{
}
}
The url i'm hitting with a browser is:
http://<server>:<correct-port>/ep/user/check/username
And it comes back with a 404! Can anyone spot what I'm doing wrong here?
Hi #Amorgos you can order your files to next:
web.xml
<servlet>
<servlet-name>ep</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ep</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Add Support for Spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
ep-servlet.xml
<context:annotation-config />
<context:component-scan base-package="server.service2" />
<beans:bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<!-- Register the bean -->
<beans:bean class="server.service2.LoginService" />
I hopes these helps :)

Got Problems with Tuckey UrlRewriteFilter and Spring 3 Web MVC

I have a Spring Web MVC application and I want to use RESTful URLs. Regrettably I haven't found any configuration that works for me with Tuckey's UrlRewriteFilter.
I'm using the "DefaultAnnotationHandlerMapping" and I added "urlrewritefilter.jsp" to my classpath and copied "urlrewrite.xml" into "/WEB-INF/".
I wan't to achieve that xyz://www.domain.com/abc will be redirected (invisible for the user) to xyz://www.domain.com/app/abc to catch it with my Controller and to let xyz://www.domain.com/css untouched.
My "web.xml" is configured this way:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="xyz://java.sun.com/xml/ns/javaee" xmlns:xsi="xyz://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xyz://java.sun.com/xml/ns/javaee xyz://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- Context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
<!-- Context Loader -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Tuckey UrlRewriteFilter -->
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Dispatcher Servlet -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
<!-- All the rest... -->
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
</web-app>
My "urlrewrite.xml" is configured this way:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"xyz://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite default-match-type="wildcard">
<rule>
<from>/**</from>
<to>/app/$1</to>
</rule>
<outbound-rule>
<from>/app/**</from>
<to>/$1</to>
</outbound-rule>
</urlrewrite>
My AbcController.java for mapping xyz://www.domain.com/abc has such methods:
#RequestMapping(value = "/app/abc", method=RequestMethod.GET)
public void displayRegistration(Model model)
{
...
}
But I always receive "HTTP Status 404" when trying to access xyz://www.domain.com/ or xyz://www.domain.com/abc :-(
It would be very nice if somebody could help.
Greetings
Benny
Did you try with
#RequestMapping(value = "/abc", method=RequestMethod.GET)
Really late reply.
You need to add the grouping symbols (.*)
<urlrewrite >
<rule>
<from>^/(en|de)/(.*)$</from>
<to >/$2?lang=$1</to>
</rule>
</urlrewrite>

Resources