Spring MVC (Hibernate+Maven) - 多个控制器和会话(登录/注销)

     2023-02-27     290

关键词:

【中文标题】Spring MVC (Hibernate+Maven) - 多个控制器和会话(登录/注销)【英文标题】:Spring MVC (Hibernate+Maven) - Multiple Controllers and Sessions (Login/Logouts) 【发布时间】:2017-06-21 20:30:27 【问题描述】:

我正在使用 Spring MVC、Hibernate 和 Maven 开展一个中等规模的项目。

我的应用程序有一个登录页面,该页面对用户进行身份验证,然后路由到具有菜单的主页。从菜单中,用户可以转到多个菜单选项。应用分为多个模块——员工、工资单、缺勤管理等。

在这个平台上相当新,几乎没有问题。

    控制器:我应该对整个应用程序使用单个控制器还是使用多个控制器?

    如果我应该使用多个 - 它应该是一个用于登录模块的控制器,一个用于每个模块(例如员工、工资单等)吗?我怎样才能让他们互相交谈并通过控制?

    @RequestMapping 标记的方法的返回值应该是多少?如果我只是将返回值作为'return "Employee"' 并且我的视图中确实有一个 Employee.jsp,但是与 Employee 相关的东西在 EmployeeController 中,我如何确保我的代码没有仍然停留在以前的控制器中(例如登录控制器)?

    我是否需要创建一个主控制器来管理所有这些控制器?

    为了在所有页面中保留用户凭据,我必须在登录模块中使用会话对象吗?或者 Spring MVC 会默认处理吗?

我发现很少有相关页面。它们很好,但它们解释了非常简单的场景,对我的实际问题没有用。

感谢您对上述问题的帮助。 谢谢!

【问题讨论】:

【参考方案1】:

回答这个问题的最简单方法是像对待您编写的任何其他代码一样对待控制器。在设计课程时,我们遵循以下原则:

单一责任主体 关注点分离

通常可以接受创建一个控制器,该控制器接受多个 URI 端点,这些端点操纵 CRUD 操作的特定模型,因为这些端点通常接受相同或几乎相同类型的输入。但是为不同的模型或整个应用程序创建一个控制器违反了上述两点;但是,您有权发表您的意见:)。

要了解控制器通信,您需要了解一般意义上的 HTTP 工作原理。 Web 应用程序只不过是一种设计请求-响应系统的奇特方式。你告诉你的浏览器去一个特定的 URL,它会将该请求发送到服务器。服务器解释您的请求,可能会操纵本地服务器端状态,查询数据存储(如果适用),最后回复响应。这种反应本质上可以是静态的或动态的。动态响应可以转发到视图技术以呈现您收到的最终内容。这些视图技术也可以是 JSP/JSF 之类的服务器端或 Angular 之类的客户端。

Spring MVC 控制器通过视图编排导航与每个控制器进行对话。当您在网页上放置按钮、表单或链接时,它表示从该页面转换到另一个页面的导航路径。在 Spring MVC 等基于动作的框架中,这通常意味着您通过将请求发送到另一个控制器来转换到新页面,该控制器解析请求,可能是一些动作,最后将状态传递给视图。

不需要 master 控制器,只需了解您正在处理的控制器类型即可。在 Web 2.0 革命和 AJAX 之前,我们只有一种类型的控制器,用于处理用户从一个视图到另一个视图的转换。今天,随着 AJAX 和动态内容成为主流,您通常会拥有另一种类型的控制器,其唯一目的是成为数据提供者。它不一定意味着从一个视图转换到另一个视图,因为它意味着基于某些输入呈现部分页面动态内容。

举个例子

@Controller
public class EmployeeController 
  @RequestMapping("/employee/view")
  public String viewEmployee(@RequestParam("id") Integer id, Model model) 
    // lookup the employee by the passed "?id=123" 123 value
    final Employee employee = employeeService.getEmployee( id );

    // set the employee in the model so I can render it in JSP
    model.addAttribute( "employee", employee );

    // return the name of what view to display
    return "view";
  

此处显示的此代码不会卡在“先前”控制器中,因为用户需要提交表单或单击链接或按钮以向服务器提交请求,例如 /employee/view?id=123 才能使用该控制器做它的工作。

最后,是的,HttpSession 对象对于跨多个请求跟踪状态是必需的。 HttpRequest 是一个短暂的对象,在其HttpSession 的整个生命周期中,单个用户执行了数十到数百个对象。

在 spring-world 中,您经常将 Spring Security 配置为处理身份验证。在这种情况下,该库将维护SESSIONID 和用户身份验证之间的关系,以便在每个HttpRequest 上,它知道用户是否已通过身份验证,如果没有,则将他们重定向到登录或允许他们的请求调用控制器如果有的话。

【讨论】:

感谢 Naros 为我指明了正确的方向。 :) 我已经开始进一步研究,如果我有任何其他疑问,会通知您。

Spring MVC + Hibernate:数据验证策略

】SpringMVC+Hibernate:数据验证策略【英文标题】:SpringMVC+Hibernate:datavalidationstrategies【发布时间】:2012-09-2112:49:04【问题描述】:我们都知道,SpringMVC通常与HibernateValidator和JSR-303集成得很好。但是正如有人所说,HibernateValidator只... 查看详情

从 Migrate 迁移到 Spring MVC 4 + Hibernate5

】从Migrate迁移到SpringMVC4+Hibernate5【英文标题】:MigratingfromMigratetoSpringMVC4+Hibernate5【发布时间】:2017-08-0322:39:51【问题描述】:我正在将应用程序从Jersey1.18、Spring3、Hibernate3.6、Maven迁移到全新的架构:Spring4.3(通过SpringBoot)、Hi... 查看详情

Spring MVC + Hibernate 4 + Spring Security

】SpringMVC+Hibernate4+SpringSecurity【英文标题】:【发布时间】:2012-12-0504:06:23【问题描述】:从现在开始,我一直在努力完成所有这些工作,不知道该怎么办。我相信我在SO上浏览了关于该主题的每一篇文章,并浏览了数十个教程..... 查看详情

使用 Spring Boot + Hibernate + MySql 运行 MVC 应用程序

】使用SpringBoot+Hibernate+MySql运行MVC应用程序【英文标题】:RunningaMVCappusingSpringBoot+Hibernate+MySql【发布时间】:2014-08-2207:00:11【问题描述】:我是Spring环境的新手。我试图使用SpringBoot和Hibernate作为ORM和MYSQL作为数据库来开发一个基... 查看详情

集成magnolia和spring mvc,hibernate

】集成magnolia和springmvc,hibernate【英文标题】:integratingmagnoliaandspringmvc,hibernate【发布时间】:2015-03-1814:02:50【问题描述】:我们正在使用开花插件将SpringMVC集成到Magnolia中。以下是我们集成的步骤。-创建bloom项目,然后添加一些... 查看详情

请解释spring MVC,hibernate和Spring security

】请解释springMVC,hibernate和Springsecurity【英文标题】:PleaseExplainspringMVC,hibernateandSpringsecurity【发布时间】:2017-01-0323:44:24【问题描述】:在很多指南的帮助下,我刚刚使用Spring安全性和休眠创建了我的第一个登录页面。我遇到的... 查看详情

带有 Spring、Spring MVC、Hibernate、JPA 的项目的 Maven 3 原型

】带有Spring、SpringMVC、Hibernate、JPA的项目的Maven3原型【英文标题】:Maven3ArchetypeforProjectWithSpring,SpringMVC,Hibernate,JPA【发布时间】:2013-01-1316:42:33【问题描述】:我正在尝试使用Maven3创建一个使用Spring3、SpringMVC、Hibernate4和JPA的项... 查看详情

在spring mvc中选择spring hibernate中的查询

】在springmvc中选择springhibernate中的查询【英文标题】:Selectqueryinspringhibernateinspringmvc【发布时间】:2014-07-1109:36:27【问题描述】:嗨,我正在编写一个springmvc,使用mysql数据库、hibernate注释和jsp的员工应用程序。该数据库包含一... 查看详情

Spring boot、mvc、hibernate 和 mysql 配置 - sessionFactory 错误

】Springboot、mvc、hibernate和mysql配置-sessionFactory错误【英文标题】:Springboot,mvc,hibernateandmysqlconfiguration-sessionFactoryerror【发布时间】:2017-02-1005:29:33【问题描述】:我是春季靴子的新手。我想用mysql、hibernate、jpa和jsp配置springboot。... 查看详情

Spring 框架 MVC - Hibernate 异常是 java.lang.NoSuchMethodError

】Spring框架MVC-Hibernate异常是java.lang.NoSuchMethodError【英文标题】:SpringframeworkMVC-Hibernateexceptionisjava.lang.NoSuchMethodError【发布时间】:2016-02-1506:41:00【问题描述】:我发布这个问题是关于我在JavaSpringFrameworkMVC-Hibernate中的一个项目。... 查看详情

spring4整合hibernate5.1

在另一篇文章hibernate5(2)初入门配置实例中,我们针对hibernate5.1版本的崭新引导配置方法,完成了对数据库的的插入实例操作,在本节内容中,我们开始引入spring4,完成spring4与hibernate5.1的整合工作,像数据库中插入一条记录。在后... 查看详情

确保 AUTHENTICATED 用户被授权访问资源的最佳实践 - Spring mvc、Spring Security、Hibernate

...TED用户被授权访问资源的最佳实践-Springmvc、SpringSecurity、Hibernate【英文标题】:BestpracticetomakesureanAUTHENTICATEDuserisAUTHORISEDtoaccessaresource-Springmvc,SpringSecurity,Hibernate【发布时间】:2016-06-1808:52:10【问题描述】:我们有一个spring 查看详情

Spring MVC“org.hibernate.PropertyAccessException”中的休眠注释映射异常

】SpringMVC“org.hibernate.PropertyAccessException”中的休眠注释映射异常【英文标题】:HibernateAnnotationMappingExceptioninSpringMVC"org.hibernate.PropertyAccessException"【发布时间】:2015-01-2017:13:18【问题描述】:我是SpringMVC和Hibernate的新手。... 查看详情

Spring MVC + Hibernate DAO:无法连接 bean

】SpringMVC+HibernateDAO:无法连接bean【英文标题】:SpringMVC+HibernateDAOs:unabletowirebeans【发布时间】:2012-06-0120:49:28【问题描述】:我目前正在开发一个集成了Hibernate的SpringMVC项目。纯SpringMVC部分(DispatcherServlet+请求映射)工作正常... 查看详情

保护spring mvc和hibernate的最佳实践

】保护springmvc和hibernate的最佳实践【英文标题】:Bestpracticetosecurespringmvcandhibernate【发布时间】:2016-10-2005:36:56【问题描述】:假设我有一个tablez包含a,b,c列。a列和b列可供任何授权用户使用,c列只能由管理员使用。我的休眠实... 查看详情

Spring Mvc Hibernate Encoding/多行导入sql

】SpringMvcHibernateEncoding/多行导入sql【英文标题】:SpringMvcHibernateEncoding/Multi-lineimportsql【发布时间】:2015-10-0516:10:11【问题描述】:我正在研究SpringMVC,在项目启动时,我已将database设置为导入默认sql使用休眠配置hibernate.hbm2ddl.imp... 查看详情

这些实体的equals和hashCode(Spring MVC + Hibernate)

】这些实体的equals和hashCode(SpringMVC+Hibernate)【英文标题】:equalsandhashCodeoftheseentities(SpringMVC+Hibernate)【发布时间】:2014-09-0409:44:07【问题描述】:有人可以建议我如何对这些实体执行equals和hashCode方法吗?这是Gara(竞赛)和Agen... 查看详情

Spring MVC (Hibernate+Maven) - 多个控制器和会话(登录/注销)

】SpringMVC(Hibernate+Maven)-多个控制器和会话(登录/注销)【英文标题】:SpringMVC(Hibernate+Maven)-MultipleControllersandSessions(Login/Logouts)【发布时间】:2017-06-2120:30:27【问题描述】:我正在使用SpringMVC、Hibernate和Maven开展一个中等规模的项... 查看详情