我在使用Spring的MVC时,出现的这种情况,例如我点击浏览文章这个链接,调用了浏览文章这个方法两次,具体的程序如下,
Spring配置:
xml 代码
- <!-- 抽象Controller定义 -->
- <bean id="baseController" abstract="true"
- class="com.potato.core.BaseMultiActionController">
- <property name="methodNameResolver">
- <bean class="com.potato.core.URLPathMethodNameResolver" />
- </property>
- </bean>
- <!-- 采用className URL Mapping -->
- <bean
- class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
- <!-- 表现层 Resolver -->
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view.InternalResourceViewResolver ">
- <property name="viewClass"
- value="org.springframework.web.servlet.view.JstlView" />
- <property name="prefix" value="/" />
- <property name="suffix" value=".jsp" />
- </bean>
methodNameResolver是我自己实现的一个
具体的实现如下:
java 代码
- public class URLPathMethodNameResolver implements MethodNameResolver {
- /**
- * 得到解析的路径,返回操作的方法名称
- */
- @Override
- public String getHandlerMethodName(HttpServletRequest request)
- throws NoSuchRequestHandlingMethodException {
- //取得servlet Path
- String pathName = request.getServletPath();
- //去掉路径中最后一个/之前的内容
- pathName = pathName.substring(pathName.lastIndexOf("/") + 1);
- //去掉路径中.之后的内容
- pathName = pathName.substring(0,pathName.indexOf("."));
- //返回方法的名称
- return pathName;
- }
- }
Spring Controller:
java 代码
- /**
- * 查看文章
- * @param req
- * @param resp
- * @return
- */
- @SuppressWarnings("unchecked")
- public ModelAndView viewArticle(HttpServletRequest req, HttpServletResponse resp){
- //取得文章编号
- String articleId = req.getParameter("articleId");
- //取得当前页
- int curPage = PageHelper.getCurPage(req);
- //取得文章对象和评论
- Map map = manager.findArticleAndCommentById(articleId, curPage, 10);
- //取得当前登陆用户
- User user = (User)req.getSession().getAttribute("user");
- //根据用户取得改用户的博客
- Blog blog = manager.findBlogByUser(user.getUserId());
- List cates = manager.findAllBlogCateByBlog(blog.getBlogId());
- Map result = new HashMap();
- result.put("article", map.get("article"));
- PaginationSupport page = (PaginationSupport)map.get("page");
- result.put("comments", page.getItems());
- result.put("page", PageHelper.getNumPage(page, req));
- result.put("cates", cates);
- //更新文章浏览数
- manager.updateArticleView((BlogArticle)map.get("article"));
- logger.debug("更新文章的浏览数!");
- return new ModelAndView(VIEW_ARTICLE,result);
- }
VIEW_ARTICLE这个值是JSP页面的路径
页面代码:
xml 代码
- <a href="../article/viewArticle.jspa?articleId=${article.articleId }"><span
- class="postdesc"> ${article.articleTitle } span>a>
点击这个方法就会进到上面的那个方法中去。
这个URL路径的article是控制器ArticleController去掉controller的之后的单词小写,viewArticle是这个控制器中的一个方法。
当点击这个链接的时候回调用上面那个方法两次,不知道为什么,请大家谁知道的给予指点,谢谢