我在使用Spring的MVC时,出现的这种情况,例如我点击浏览文章这个链接,调用了浏览文章这个方法两次,具体的程序如下,
Spring配置:
xml 代码
-
- <bean id="baseController" abstract="true"
- class="com.potato.core.BaseMultiActionController">
- <property name="methodNameResolver">
- <bean class="com.potato.core.URLPathMethodNameResolver" />
- </property>
- </bean>
-
-
- <bean
- class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
-
-
-
- <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 {
-
- String pathName = request.getServletPath();
-
- pathName = pathName.substring(pathName.lastIndexOf("/") + 1);
-
- pathName = pathName.substring(0,pathName.indexOf("."));
-
- return pathName;
- }
-
- }
Spring Controller:
java 代码
-
-
-
-
-
-
- @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是这个控制器中的一个方法。
当点击这个链接的时候回调用上面那个方法两次,不知道为什么,请大家谁知道的给予指点,谢谢
分享到:
相关推荐
3. **使用注解注入Mapper**:在Service层,可以使用`@Autowired`注解注入Mapper接口,然后通过调用其方法来执行数据库操作。 4. **结果集映射**:MyBatis支持自动映射结果集到Java对象,也可以自定义ResultMap来...
在 Spring MVC 中处理中文乱码通常有两种方法: - **设置字符编码过滤器**:通过配置一个全局的字符编码过滤器来解决所有请求的乱码问题。 ```java @WebFilter(urlPatterns = "/*") public class ...
Spring MVC 和 Hibernate 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 是 Spring 框架的一部分,主要用于构建前端控制器,处理 HTTP 请求并分发到相应的业务逻辑。而 Hibernate 则是一个强大的 ORM(对象...
总的来说,Spring MVC+MyBatis分页是Web开发中的一个重要技能,通过使用如PageHelper这样的插件,可以在不改动原有业务逻辑的情况下轻松实现高效、无侵入性的分页功能。对于大型项目,掌握这种技术是至关重要的,...
标题 "Spring MVC + Hibernate 的空项目" 暗示了一个基于Java的Web开发框架的集成应用,其中Spring MVC作为控制层,Hibernate作为持久层。这是一个基础的项目模板,用于搭建后端服务,处理HTTP请求,并与数据库进行...
【标题】"spring+mybatis+spring-mvc项目"是一个基于Spring、MyBatis和Spring-MVC框架构建的Web应用程序。这个项目集成了常见的CRUD(创建、读取、更新和删除)操作,具备分页功能,支持模糊查询,并且实现了二级...
1. **Spring MVC**:Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它遵循MVC(Model-View-Controller)设计模式,帮助开发者将业务逻辑、数据和用户界面分离。在Spring MVC中,Controller处理HTTP...
本案例主要介绍如何整合Spring框架、MyBatis和Spring MVC...总的来说,这个案例展示了如何利用Spring、MyBatis和Spring MVC实现一个完整的后台用户管理系统,并通过EasyUI来提升用户体验,是一次很好的实践和学习机会。
Spring提供了一个名为`@Scheduled`的注解,可以方便地将方法标记为定时任务。 1. **使用@Scheduled** - 首先,我们需要配置一个`TaskScheduler`或`ScheduledExecutorService`,并在Spring配置文件中声明。 - 然后...
Spring MVC 和 MyBatis 是两个在 Java Web 开发中广泛使用的开源框架,它们分别负责不同的职责。Spring MVC 是一个基于模型-视图-控制器(MVC)设计模式的Web应用框架,而MyBatis则是一个优秀的持久层框架,专注于...
Spring MVC是Spring的一个模块,它提供了构建Web应用程序的MVC架构实现。它将Web层分成了模型(Model)、视图(View)和控制器(Controller),通过分离关注点来简化Web层的开发。 49、描述一下DispatcherServlet的...
1. 服务器向浏览器发送一个响应,指示浏览器发起一个新的HTTP请求到指定的URL。 2. 浏览器根据这个响应,发起新的请求,并接收新请求的响应。 请求重定向的特点: 1. 重定向可以指向当前Web应用内的资源,也可以是...
3. **连接点(Join Point)**:程序执行过程中的一个特定点,如方法调用或异常抛出。 4. **切点(Pointcut)**:匹配连接点的规则,定义了通知将在何时何地执行。 5. **织入(Weaving)**:将切面应用到目标对象,...
1. **实例化**:当服务器启动或首次请求该Servlet时,Servlet容器会创建Servlet的一个实例。 2. **初始化**:Servlet容器调用`init()`方法对Servlet进行初始化。此方法只在Servlet的整个生命周期中调用一次。 3. *...
Spring MVC拦截器是在Web应用中对请求进行拦截处理的一种方式,类似于Servlet中的过滤器。Spring MVC拦截器主要用于在控制器(Controller)执行前后进行一些处理工作,如日志记录、权限检查、性能监控等。实现拦截器...
在微服务架构中,Spring Cloud是一个非常重要的框架集合,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作的...
我们可以通过@Scheduled注解来定义一个方法为定时任务,例如每5秒执行一次,或者在特定时间点执行。 当涉及线程池和定时任务时,异常处理是一个不可忽视的话题。线程池中的任务可能会抛出异常,如果不进行妥善处理...
SpringMVC是Spring框架的一部分,它是一个模型-视图-控制器(MVC)架构模式的实现。SpringMVC负责处理HTTP请求,通过DispatcherServlet分发到相应的控制器(Controller),控制器处理业务逻辑后,将数据传递给视图层...
1. **Spring Web Flow**:Spring 的一个扩展,专注于管理复杂的用户交互流程。它允许开发者定义可重用的、状态化的流程,使得用户界面的导航和状态管理更加有序。 2. **流程定义**:Web Flow 使用XML或Java来定义...