论坛首页 Java企业应用论坛

使用Spring MVC,出现了点击一次链接,调用同一个方法两次

浏览 5301 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-15  

我在使用Spring的MVC时,出现的这种情况,例如我点击浏览文章这个链接,调用了浏览文章这个方法两次,具体的程序如下,

Spring配置:

xml 代码
  1. <!-- 抽象Controller定义 -->  
  2. <bean id="baseController" abstract="true"  
  3.     class="com.potato.core.BaseMultiActionController">  
  4.     <property name="methodNameResolver">  
  5.         <bean class="com.potato.core.URLPathMethodNameResolver" />  
  6.     </property>  
  7. </bean>  
  8.   
  9. <!-- 采用className URL Mapping -->  
  10. <bean  
  11.     class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />  
  12.   
  13.   
  14. <!-- 表现层 Resolver -->  
  15. <bean id="viewResolver"  
  16.     class="org.springframework.web.servlet.view.InternalResourceViewResolver ">  
  17.     <property name="viewClass"  
  18.         value="org.springframework.web.servlet.view.JstlView" />  
  19.     <property name="prefix" value="/" />  
  20.     <property name="suffix" value=".jsp" />  
  21. </bean>  

methodNameResolver是我自己实现的一个

具体的实现如下:

java 代码
  1. public class URLPathMethodNameResolver implements MethodNameResolver {   
  2.     /**  
  3.      * 得到解析的路径,返回操作的方法名称  
  4.      */  
  5.     @Override  
  6.     public String getHandlerMethodName(HttpServletRequest request)   
  7.             throws NoSuchRequestHandlingMethodException {   
  8.         //取得servlet Path   
  9.         String pathName = request.getServletPath();   
  10.         //去掉路径中最后一个/之前的内容   
  11.         pathName = pathName.substring(pathName.lastIndexOf("/") + 1);   
  12.         //去掉路径中.之后的内容   
  13.         pathName = pathName.substring(0,pathName.indexOf("."));   
  14.         //返回方法的名称   
  15.         return pathName;   
  16.     }   
  17.   
  18. }  

 

 

Spring Controller:

java 代码

  1. /**  
  2.  * 查看文章  
  3.  * @param req  
  4.  * @param resp  
  5.  * @return  
  6.  */  
  7. @SuppressWarnings("unchecked")   
  8. public ModelAndView viewArticle(HttpServletRequest req, HttpServletResponse resp){   
  9.     //取得文章编号   
  10.     String articleId = req.getParameter("articleId");   
  11.     //取得当前页   
  12.     int curPage = PageHelper.getCurPage(req);   
  13.     //取得文章对象和评论   
  14.     Map map = manager.findArticleAndCommentById(articleId, curPage, 10);   
  15.     //取得当前登陆用户   
  16.     User user = (User)req.getSession().getAttribute("user");   
  17.     //根据用户取得改用户的博客   
  18.     Blog blog = manager.findBlogByUser(user.getUserId());   
  19.     List cates = manager.findAllBlogCateByBlog(blog.getBlogId());   
  20.     Map result = new HashMap();   
  21.     result.put("article", map.get("article"));   
  22.     PaginationSupport page = (PaginationSupport)map.get("page");   
  23.     result.put("comments", page.getItems());   
  24.     result.put("page", PageHelper.getNumPage(page, req));   
  25.     result.put("cates", cates);   
  26.     //更新文章浏览数   
  27.     manager.updateArticleView((BlogArticle)map.get("article"));   
  28.     logger.debug("更新文章的浏览数!");   
  29.     return new ModelAndView(VIEW_ARTICLE,result);   
  30. }  

VIEW_ARTICLE这个值是JSP页面的路径

页面代码:

xml 代码
  1. <a href="../article/viewArticle.jspa?articleId=${article.articleId }"><span     
  2.                                         class="postdesc"> ${article.articleTitle } span>a>  

点击这个方法就会进到上面的那个方法中去。

这个URL路径的article是控制器ArticleController去掉controller的之后的单词小写,viewArticle是这个控制器中的一个方法。

 

 

当点击这个链接的时候回调用上面那个方法两次,不知道为什么,请大家谁知道的给予指点,谢谢

 

 

   发表时间:2007-11-15  
你的鼠标出了连击的bug
0 请登录后投票
   发表时间:2007-11-15  
没有。我在别人那测试也是一样啊
0 请登录后投票
   发表时间:2007-11-15  
我在其他地方试了一下没有问题,就是在博客中存在这个问题,可能是页面上的问题,程序是没有问题的
0 请登录后投票
   发表时间:2007-11-15  
你的页面内容里出现了例如 src="" 这样的属性,就会导致浏览器再发一次请求.

比如 <img src="" />

抓一下http请求就会发现了


0 请登录后投票
   发表时间:2007-11-15  
codeutil 写道
你的页面内容里出现了例如 src="" 这样的属性,就会导致浏览器再发一次请求.

比如 <img src="" />

抓一下http请求就会发现了





这个问题我在用struts的时候也碰到过,原因也没找到。
能不能具体讲讲,页面中使用<img src="" /> 这样的代码很正常啊,怎么会出问题呢?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics