`

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

阅读更多

我在使用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是这个控制器中的一个方法。

 

 

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

 

 

分享到:
评论
5 楼 tigershuang 2007-11-15  
codeutil 写道
你的页面内容里出现了例如 src="" 这样的属性,就会导致浏览器再发一次请求.

比如 <img src="" />

抓一下http请求就会发现了





这个问题我在用struts的时候也碰到过,原因也没找到。
能不能具体讲讲,页面中使用<img src="" /> 这样的代码很正常啊,怎么会出问题呢?
4 楼 codeutil 2007-11-15  
你的页面内容里出现了例如 src="" 这样的属性,就会导致浏览器再发一次请求.

比如 <img src="" />

抓一下http请求就会发现了


3 楼 hf200012 2007-11-15  
我在其他地方试了一下没有问题,就是在博客中存在这个问题,可能是页面上的问题,程序是没有问题的
2 楼 hf200012 2007-11-15  
没有。我在别人那测试也是一样啊
1 楼 daquan198163 2007-11-15  
你的鼠标出了连击的bug

相关推荐

    Spring MVC+ibaties

    3. **使用注解注入Mapper**:在Service层,可以使用`@Autowired`注解注入Mapper接口,然后通过调用其方法来执行数据库操作。 4. **结果集映射**:MyBatis支持自动映射结果集到Java对象,也可以自定义ResultMap来...

    spring mvc 自學筆記

    在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java @WebFilter(urlPatterns = "/*") public class ...

    Spring MVC + hibernate 集合

    Spring MVC 和 Hibernate 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 是 Spring 框架的一部分,主要用于构建前端控制器,处理 HTTP 请求并分发到相应的业务逻辑。而 Hibernate 则是一个强大的 ORM(对象...

    spring mvc+mybatis分页

    总的来说,Spring MVC+MyBatis分页是Web开发中的一个重要技能,通过使用如PageHelper这样的插件,可以在不改动原有业务逻辑的情况下轻松实现高效、无侵入性的分页功能。对于大型项目,掌握这种技术是至关重要的,...

    Spring MVC +hibent的 空项目

    标题 "Spring MVC + Hibernate 的空项目" 暗示了一个基于Java的Web开发框架的集成应用,其中Spring MVC作为控制层,Hibernate作为持久层。这是一个基础的项目模板,用于搭建后端服务,处理HTTP请求,并与数据库进行...

    spring+mybatis+spring-mvc项目

    【标题】"spring+mybatis+spring-mvc项目"是一个基于Spring、MyBatis和Spring-MVC框架构建的Web应用程序。这个项目集成了常见的CRUD(创建、读取、更新和删除)操作,具备分页功能,支持模糊查询,并且实现了二级...

    Spring MVC + Mybatis_javalogin_paper9ev_aid9rs_

    1. **Spring MVC**:Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它遵循MVC(Model-View-Controller)设计模式,帮助开发者将业务逻辑、数据和用户界面分离。在Spring MVC中,Controller处理HTTP...

    案例9:Spring整合MyBatis与Spring MVC+EasyUI实现电子商城后台用户管理.docx

    本案例主要介绍如何整合Spring框架、MyBatis和Spring MVC...总的来说,这个案例展示了如何利用Spring、MyBatis和Spring MVC实现一个完整的后台用户管理系统,并通过EasyUI来提升用户体验,是一次很好的实践和学习机会。

    Spring3.0 mvc 定时器及多线程任务demo

    Spring提供了一个名为`@Scheduled`的注解,可以方便地将方法标记为定时任务。 1. **使用@Scheduled** - 首先,我们需要配置一个`TaskScheduler`或`ScheduledExecutorService`,并在Spring配置文件中声明。 - 然后...

    Springmvc+mybatis框架整合源码下载

    Spring MVC 和 MyBatis 是两个在 Java Web 开发中广泛使用的开源框架,它们分别负责不同的职责。Spring MVC 是一个基于模型-视图-控制器(MVC)设计模式的Web应用框架,而MyBatis则是一个优秀的持久层框架,专注于...

    Spring系列面试题129道(附答案解析)

    Spring MVC是Spring的一个模块,它提供了构建Web应用程序的MVC架构实现。它将Web层分成了模型(Model)、视图(View)和控制器(Controller),通过分离关注点来简化Web层的开发。 49、描述一下DispatcherServlet的...

    详解spring mvc 请求转发和重定向

    1. 服务器向浏览器发送一个响应,指示浏览器发起一个新的HTTP请求到指定的URL。 2. 浏览器根据这个响应,发起新的请求,并接收新请求的响应。 请求重定向的特点: 1. 重定向可以指向当前Web应用内的资源,也可以是...

    aop示例spring 的aop思想解决项目中多次出现的同一个问题

    3. **连接点(Join Point)**:程序执行过程中的一个特定点,如方法调用或异常抛出。 4. **切点(Pointcut)**:匹配连接点的规则,定义了通知将在何时何地执行。 5. **织入(Weaving)**:将切面应用到目标对象,...

    mvc2上课课件

    1. **实例化**:当服务器启动或首次请求该Servlet时,Servlet容器会创建Servlet的一个实例。 2. **初始化**:Servlet容器调用`init()`方法对Servlet进行初始化。此方法只在Servlet的整个生命周期中调用一次。 3. *...

    Spring MVC拦截器的基本使用方法

    Spring MVC拦截器是在Web应用中对请求进行拦截处理的一种方式,类似于Servlet中的过滤器。Spring MVC拦截器主要用于在控制器(Controller)执行前后进行一些处理工作,如日志记录、权限检查、性能监控等。实现拦截器...

    spring服务注册,发现及使用

    在微服务架构中,Spring Cloud是一个非常重要的框架集合,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作的...

    Spring基于线程池的定时任务线挰异常实践

    我们可以通过@Scheduled注解来定义一个方法为定时任务,例如每5秒执行一次,或者在特定时间点执行。 当涉及线程池和定时任务时,异常处理是一个不可忽视的话题。线程池中的任务可能会抛出异常,如果不进行妥善处理...

    SpringMVC+Mybatis后台管理系统开发源码(可以直接运行)

    SpringMVC是Spring框架的一部分,它是一个模型-视图-控制器(MVC)架构模式的实现。SpringMVC负责处理HTTP请求,通过DispatcherServlet分发到相应的控制器(Controller),控制器处理业务逻辑后,将数据传递给视图层...

    spring 手册

    1. **Spring Web Flow**:Spring 的一个扩展,专注于管理复杂的用户交互流程。它允许开发者定义可重用的、状态化的流程,使得用户界面的导航和状态管理更加有序。 2. **流程定义**:Web Flow 使用XML或Java来定义...

Global site tag (gtag.js) - Google Analytics