视图解析器完成响应

88 阅读2分钟
  • 需求:

    • 程序启动,不能报 404 错误 ,需要指定默认访问 login.jsp
    • 用户登录成功,跳转到用户列表页面
    • 用户登录失败,仍然回到登录首页。

步骤1:书写pom.xml文件,web.xml文件、springmvc.xml文件,然后书写entity和db。db是数据库连接相关的消息。

步骤2:书写login.jsp和userList.jsp

login.jsp主体是一个form表单,action是login方法,里面主要是登录和注册的输入框。

userList.jsp里面暂时就是一个h1标签。

其次编写控制器方法,写完前端请求后我们开发控制器类 UserController,在 UserController 类准备好的基础上添加代码如下:

image.png

然后在WEB—INF下面的pages目录下面新建jsp文件(比如addUser,showUser等)

当前大多数 JSP 页面都放置在 WEB-INF 目录下,通过以上的方式在代码中就会出现大量的 "return /WEB-INF/pages/*.jsp" 的情况。存在一定的代码冗余,可以通过在 springmvc.xml 中设置 InternalResourceViewResolver 视图解析器的前缀 prefix 和后缀 suffix 的方式来简化程序中的代码 。InternalResourceViewResolver 视图解析器会在渲染视图时将地址名按 prefix + 返回的视图名 + suffix 的顺序进行拼接形成视图名。

把代码做修改

image.png

并且在springmvc里面新配置一个视图解析器(其实就是bean配置啦)

image.png

此时又会产生新的问题,就是访问默认首页和登录失败时都会报 404 的错误。那么如何处理呢?要解决这个问题首先要明白问题产生的原因。当登录失败时返回 login.jsp 这个字符串,视图解析器会按 prefix + 返回的视图名 + suffix 的形式进行拼接,最终的结果就变成了 /WEB-INF/pages/login.jsp.jsp,而这个页面不存在的,所以报了 404 。明白了这个原因后就知道怎么解决了。只要让请求地址不经过 InternalResourceViewResolver 就可以了。在 SpringMVC 中转发和重定向不需要经过视图解析器渲染的。控制器代码做如下修改:

image.png