2012-03-09 174 views
0

朋友。 我不擅长英语。请理解它。弹簧servlet映射

我被要求制作一个xml文件。

当我使用浏览器访问以下地址时。我应该看到下面的XML。 的http://本地主机:8080 /更新/ update.jsp

<update_info app_name="ktp_app" version="2012031001" count=""> 
    <apache_start version="20120310011255" type="bat" reg="123123" size="423"> 
    <remote>http://192.168.0.1/ka/apache_start.bat</remote> 
    <remote>apache_start.bat</remote> 
    </apache_start> 
</update_info> 

但是,在web.xml 我有这样的设置。

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

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.byto</url-pattern> 
</servlet-mapping> 

与上面,我可以处理所有我的其他请求与弹簧控制器看起来像这样。

@Controller 
public class DownloadManageController { 

    @Autowired 
    private DownloadManageService downService; 

    @RequestMapping("/ajax/add_download_hour") 
    public void addDownloadHour(HttpServletRequest request, HttpServletResponse response) throws IllegalArgumentException, SecurityException, InvalidHourRangeException, IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
     downService.addDownloadLimit(
      request.getParameter("app_cmd"), 
      request.getParameter("start_hour"), 
      request.getParameter("end_hour"), 
      request.getParameter("limit_count")); 
    } 
    ... 
} 

但我也有这个控制器。

@Controller 
public class UpdateXmlController extends HttpServlet { 

    @Autowired 
    private UpdateXmlService updateService; 

    @RequestMapping("/update") 
    protected ModelAndView getUpdateData(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String cmd = request.getParameter("cmd"); 
     Map resultMap = null; 
     PrintWriter writer = response.getWriter(); 
     try { 
      resultMap = updateService.getUpdateData(cmd); 
      request.setAttribute("server", resultMap.get("server")); 
      request.setAttribute("package", resultMap.get("package")); 
      request.setAttribute("file", resultMap.get("file")); 
     } catch(NoCmdException ex) { 
      return new ModelAndView("error_page", "errorMsg", ex.getMessage()); 
     } catch(DownloadCountExceedException ex) { 
      return new ModelAndView("error_page", "errorMsg", ex.getMessage()); 
     } catch(Exception ex) { 
      //System.out.println(ex.getMessage()); 
      //response.getWriter().write(); 
      ex.printStackTrace(); 
     } 

     return new ModelAndView("update", "result", resultMap); 
    } 

} 

,我需要与访问http://本地主机:8080 /更新/ update.jsp

但是,我只访问控制方法是用http://localhost:8080/update/update.byto

所以,这里是我的问题

我怎么能访问与.JSP地址控制器。

非常感谢。

+0

你为什么要*以* .jsp后缀访问它? – skaffman 2012-03-09 16:32:26

+1

我看到你的控制器包含太多的* request.getParameter()** s,我相信你没有很好地利用Spring MVC。 – 2012-03-09 16:44:43

+0

我这么认为,几天前我认识了Spring,几个月前我开始编程。 – jeon 2012-03-09 16:47:36

回答

0

暂时,我解决了这个问题,JSP文件。

<%@ page language="java" contentType="text/html; charset=EUC-KR" 
    pageEncoding="EUC-KR"%> 
<% 
    getServletContext().getRequestDispatcher("/update.byto").forward(request, response); 
%> 

上面的源代码会将所有信息发送给Spring控制器。

0

更改此:

@Controller("/update") 
... 

    @RequestMapping("/update.jsp") 
+0

这不行,因为'web。xml'将URL模式定义为'* .byto',所以'.jsp'不会被导向到Spring。 – skaffman 2012-03-09 16:33:44

+0

是的,它显示我404 – jeon 2012-03-09 16:33:47

+0

任何解决方案? – jeon 2012-03-09 16:34:47

1

你可以添加其他的servlet映射?

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

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.byto</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.jsp</url-pattern> 
</servlet-mapping> 

为什么URL必须的http://本地主机:8080 /更新/ update.jsp

编辑 -正如skaffman指出的那样,这将导致无限循环。我会留下这个答案作为不是要做的一个例子!

由于Tomcat中发生的事情为例:

09-Mar-2012 16:49:11 org.apache.catalina.core.ApplicationDispatcher invoke 
SEVERE: Servlet.service() for servlet Test threw exception 
java.lang.StackOverflowError 
    at java.util.HashMap.getEntry(HashMap.java:344) 
    at java.util.HashMap.containsKey(HashMap.java:335) 
    at org.apache.catalina.connector.Request.removeAttribute(Request.java:1335) 
    at org.apache.catalina.connector.RequestFacade.removeAttribute(RequestFacade.java:514) 
    at org.apache.catalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:256) 
    at org.apache.catalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:256) 

... 

at test.Test.doGet(Test.java:27) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
at test.Test.doGet(Test.java:27) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
+0

如果你这样做了,那么当控制器转发到JSP时,它会陷入无限循环。 – skaffman 2012-03-09 16:35:06

+0

我以前试过,但它也给我404. – jeon 2012-03-09 16:38:42

+0

我的高级已经制作的一些程序有静态更新路径“http:// localhost:8080/update/update.jsp” – jeon 2012-03-09 16:40:42