I am trying to edit a website:
server : Jetty
framework : spring
index.html page is in ./web/
From this, mapping to webpages in ./web/WEB_INF/template using Servlet. We would like to add one more module in this index.html.. requests help on Servlet mapping.
A servlet is mapped in web.xml:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myclass.etcetera.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
It is thus accessible through http://localhost:8080/app/MyServlet
If you are using the latest version of the servlet API (3.0), you can map it using the #WebServlet annotation on the servlet itself (and of course, specify there the url-pattern on which the servlet will respond)
Related
I've Spring MVC webapplication which starts osgi container using ServletContextListener (osgi http bridge). I am trying to deploy felix webconsole along with other bundles, bundle gets started, but I am not able to access it.
In my web.xml
Spring DispatherServlet is configured for URL '/'
Felix ProxyServlet is configured for URL '/ext/*'
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>extension</servlet-name>
<url-pattern>/ext/*</url-pattern>
</servlet-mapping>
I tried to access webconsole using "http://localhost:8080/my-app/ext/system/console" (results 503) and "http://localhost:8080/my-app/system/console" (results 404) with no luck.
Upon debugging I see that for 'ext/system/console' URL, org.apache.felix.http.proxy.DispatcherTracker.DispatcherTracker#getDispatcher() method call in ProxyServlet#service() method returns NULL.
Can anybody point me, what I am missing here ?
I am developing an app with spring mvc and here is my web.xml
<servlet>
<servlet-name>admin</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
For serving static content, I added the following line in my admin-servlet.xml
<context:component-scan base-package="com.prasanna.blog.Server" />
<mvc:resources mapping="/resources/**" location="/"/>
I have 5 controllers each mapped to particular url for example adminRequests.java is mapped to /admin/*
#Controller
#RequestMapping("/admin/*")
public class AdminRequests
Then I have methods inside the class mapped to particular urls.
The problem is, I am getting 404 error when the url-pattern in web.xml is mapped as / .But when I change the url pattern in web.xml to /app or any other , my index.html is served without any issues.
I am not sure where the problem is. Please advice
When you map Url pattern / to Spring's Dispatcher Servlet, all the request to your application is forwarded to Dispatcher Servlet. Although in this case you defined the static resources using <mvc:resources> tag, but your index.html is not resolved properly because it is not rendered as /resources/index.html but /index.html.
I would suggest you to add one more <servlet-mapping> in your web.xml before spring's <servlet-mapping>. For example:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/index.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>admin</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Hope that will work for you.
No that did not resolve the issue. But I saw another thread discussing the same issue and one of the answer there worked. I removed <mvc:resources> line from spring xml and added the below lines in the web.xml
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
Now my static content is served without any issues but I don't like this method. It feels like a very dirty hack. Now if I have to serve images, I have to add mapping for each image type. I am not sure whether the spring version is a problem because I use mongodb in the backend with spring data. It took a hell of a time to set up my pom.xml because there were some issues with the spring data version and mongodb driver.
I am trying a sample spring MVC application. My web.xml has
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
so my question is how I can call my test controller if I just type in the url
http://localhost:8080/MySpringProject/test
Where do i need to make change to call exactly this type of URL so that my test controller called. I don't know what I am asking is correct or not but my requirement is that I don't want to end my UrL with "/" or "test.htm".
Please help and thanks in advance
You usually map your dispatcher servlet to /, and then you have controllers with #RequestMapping("/foo/bar"). But if you define a servlet with a more specific url, it will get picked up.
I've got a controller set up in my web.xml:
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>/console/index</url-pattern>
</servlet-mapping>
And a matching bean defined in controller-servlet.xml:
<bean name="/console/index" class="com.package.OverviewController"/>
Which works correctly - when I get "/appName/console/index" it behaves as I expect. But when I change web.xml to this:
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>/console/*</url-pattern>
</servlet-mapping>
It no longer functions, giving me the following exception:
WARN (org.springframework.web.servlet.PageNotFound) - No mapping for [/appName/console/index] in DispatcherServlet with name 'controller'
So my question is how do I use wildcards in the servlet mappings, so that different URLs all go through the single DispatcherServlet but may go to one of several controller beans?
FYI: I'm stuck on Spring 2.0, as it's an established application used in government.
When you use wildcards in <url-pattern>, controller names by default correspond to wildcard part of the pattern.
So, you can either rename your controller to /index, or set the alwaysUseFullPath property of your HandlerMapping to true.
In my application I'm using spring MVC(3.0.5) architecture along with BIRT reporting framework.
I'm trying to serve all requests including the static resources like css, js, html and image files using the spring DispatcherServlet.
For this purpose I added the following entries to my web.xml
<servlet>
<servlet-name>springapp</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
...............
...............
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
This will direct all request to the DispatcherServlet and in my context file I added
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/docs/**" location="/docs/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/themes/**" location="/themes/" />
so that these resources will be loaded from the file system.
These configurations are working fine. But I'm facing issues with my BIRT reporting engine now.
The BIRT reporting engine uses some jsp files located in a folder called webcontent which is located at the root of the application. Since we are directing all request to DispatcherServlet even the request for these jsp pages are going to the spring servlet. As I understand from some posts the jsp files are normally handled by org.apache.jasper.servlet.JspServlet which is registered in the Apache Tomcat's web.xml file and it has a servlet mapping as follows
<!-- The mapping for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
What are the changes that I should make in my servlet mapping to work in this environment? I need the jsp files to be handled by the default jsp servlet not by the spring servlet. How can I achieve this?
For this post I understood that the second priority in servlet matching is for the url prefix, so my url pattern / for spring servelt is overriding the default jsp servlet mapping, Is this assumption correct? If it is correct then how to overcome this?
Thank you.
The typical mapping of DispatcherServlet is <url-pattern>/</url-pattern>. In this case it still handles all requests except for requests handled by other servlets (in particular, requests to *.jsp), so that it should solve the problem.