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

Spring MVC(Hibernate+;Maven)-多个控制器和会话(登录/注销),hibernate,maven,spring-mvc,web-applications,spring-security,Hibernate,Maven,Spring Mvc,Web Applications,Spring Security,我正在使用SpringMVC、Hibernate和Maven进行一个中型项目 我的应用程序有一个登录页面,它对用户进行身份验证,然后路由到带有菜单的主页面。从菜单中,用户可以转到多个菜单选项。应用程序分为多个模块-员工、工资单、缺勤管理等 在这个平台上比较新,没有什么问题 控制器:我应该为整个应用程序使用单个控制器还是使用多个控制器 如果我应该使用多个-是否应该为登录模块设置一个控制器,为每个模块(如员工、工资单等)设置一个控制器。?我怎样才能让他们互相交谈并通过控制 用@RequestMapp

我正在使用SpringMVC、Hibernate和Maven进行一个中型项目

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

在这个平台上比较新,没有什么问题

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

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

    用@RequestMapping标记的方法的返回值应该是什么?如果我只是将返回值设置为“return”Employee“,并且我的视图中确实有一个Employee.jsp,但是EmployeeController中包含了与员工相关的内容,那么如何确保我的代码不会仍然停留在前一个控制器中(例如LoginController)

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

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

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

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

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

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

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

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

    不需要主控制器,只需要了解您正在处理的控制器类型。在Web2.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";
      }
    }
    
    此处显示的代码不会卡在“Previor”控制器中,因为用户需要提交表单或单击链接或按钮向服务器提交请求,如
    /employee/view?id=123
    ,以便该控制器完成其工作

    最后,是的,需要一个
    HttpSession
    对象来跟踪多个请求的状态。
    HttpRequest
    是一个短暂的对象,在其
    HttpSession
    的整个生命周期内,单个用户可以执行数十到数百次


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

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

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

    要理解控制器通信,您需要了解HTTP在一般意义上的工作方式。web应用程序只不过是设计请求-响应系统的一种奇特方式。你告诉你的浏览器去一个特定的URL,它会把这个请求发送给服务器。服务器解释您的请求,操纵本地服务器端状态,查询数据存储(如果适用),最后以响应进行答复。那是