org.springframework.web.servlet.view.InternalResourceViewResolver
时间: 2023-09-19 17:10:36 AIGC 浏览: 116
org.springframework.web.servlet.view.InternalResourceViewResolver是Spring MVC框架中的一个视图解析器。它用于将逻辑视图名称解析为实际的视图对象。该解析器使用JSP作为默认的视图技术,可以将JSP文件转换为实际的视图对象。此外,它还支持其他视图技术,例如FreeMarker,Velocity等。它还可以配置前缀和后缀来确定视图的物理路径。例如,如果前缀为“/WEB-INF/views/”,后缀为“.jsp”,则逻辑视图名称“home”将解析为“/WEB-INF/views/home.jsp”。使用InternalResourceViewResolver可以简化Spring MVC应用程序中的视图解析过程。
相关问题
org.springframework.web.servlet.view.internalresourceviewresolver
org.springframework.web.servlet.view.internalresourceviewresolver是Spring框架中的一个视图解析器,用于将逻辑视图名称解析为实际的视图资源。它会根据配置的前缀和后缀,将逻辑视图名称转换为实际的视图资源路径,并返回一个InternalResourceView对象,用于渲染视图。它是Spring MVC框架中的一个重要组件,用于实现视图解析和渲染。
org.springframework.web.servlet.view.InternalResourceViewResolver爆红
这通常意味着在使用Spring MVC时,Spring框架无法找到指定的视图解析器。 可能的原因是你没有正确配置视图解析器。
要解决此问题,你可以检查以下几个方面:
1. 确认你已在Spring配置文件中配置了视图解析器。例如:
```xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
```
2. 确认视图文件存在于指定的位置。例如,如果视图解析器的前缀为“/WEB-INF/views/”,则视图文件应该位于这个目录下。
3. 如果你使用的是Spring Boot,则可能需要添加以下依赖项:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
如果以上步骤都已经检查过了,但问题仍然存在,你可以在你的代码中添加日志记录来查看更详细的错误信息,或者在相关论坛上寻求帮助。
阅读全文
相关推荐













<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.itheihei" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> </bean> <mvc:resources mapping="/js/**" location="/js/"/> <mvc:resources mapping="/images/**" location="/images/"/> <mvc:resources mapping="/css/**" location="/css/"/> <mvc:annotation-driven/> </beans><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.itheihei"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> </beans>@Controller public class AccountController { @Autowired AccountService accountService; @RequestMapping("findAllAccounts") public String findAllAccounts() { System.out.println("方法成功执行"); return "list"; } } <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>首页</title> </head> <body> 查看所有用户信息 </body> </html><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> contextConfigLocation classpath:spring-mvc.xml </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>为什么会404



(一)项目构建
使用 Maven 构建项目,在pom.xml中引入 Spring MVC 相关依赖,如spring - webmvc,配置 Servlet、JSP 等相关依赖,确保项目具备 Spring MVC 运行环境 。示例关键依赖配置:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring - webmvc</artifactId>
<version>5.3.18</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet - api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp - api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
(二)Spring MVC 配置
DispatcherServlet 配置:在 Web.xml(或 Servlet 3.0 + 环境下用 Java 配置)中配置 DispatcherServlet,指定 Spring MVC 配置文件位置,使其能拦截处理请求 。示例 Web.xml 配置:
<servlet>
<servlet - name>springmvc</servlet - name>
<servlet - class>org.springframework.web.servlet.DispatcherServlet</servlet - class>
<init - param>
contextConfigLocation
classpath:springmvc - servlet.xml
</init - param>
<load - on - startup>1</load - on - startup>
</servlet>
<servlet - mapping>
<servlet - name>springmvc</servlet - name>
<url - pattern>/</url - pattern>
</servlet - mapping>
Spring MVC 配置文件(springmvc - servlet.xml):开启组件扫描(扫描控制器等组件)、视图解析器(配置前缀后缀,解析 JSP 视图)、开启注解驱动等 。示例:
<context:component - scan base - package="com.example.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
<mvc:annotation - driven/>
三)功能模块实现
1. 用户登录验证
o 控制器(Controller):创建LoginController,编写方法处理/login请求(对应login.jsp表单提交),接收用户名、密码参数(可通过@RequestParam注解),进行简单验证(如硬编码用户名 “admin”、密码 “123” 模拟,实际可连数据库查询),验证成功用return "redirect:/main";重定向到主页控制器方法,失败则带错误信息(通过model.addAttribute)返回login视图(即login.jsp )。示例代码:
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LoginController {
@RequestMapping("/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Model model) {
if ("admin".equals(username) && "123".equals(password)) {
return "redirect:/main";
} else {
model.addAttribute("error", "用户名或密码错误");
return "login";
}
}
2. 登录页面(login.jsp):使用 Spring 表单标签库(需引入相关标签库)或普通 HTML 表单,提交到/login,显示错误信息(通过 EL 表达式${error} )。示例关键代码:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<body>
<form:form action="/https/wenku.csdn.net/login" method="post">
用户名:<form:input path="username"/>
密码:<form:password path="password"/>
<input type="submit" value="登录">
</form:form>
<c:if test="${not empty error}">
${error}
</c:if>
</body>
</html>
3. 访问控制(拦截器实现)
o 创建拦截器类:实现HandlerInterceptor接口,在preHandle方法中检查会话是否有用户登录标识(如session.getAttribute("user") ,假设登录成功时在会话存user对象),无则redirect到/login并返回false拦截,有则返回true放行 。示例:
package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
Object user = request.getSession().getAttribute("user");
if (user == null) {
response.sendRedirect(request.getContextPath() + "/login");
return false;
}
return true;
}
}
4. 配置拦截器:在 Spring MVC 配置文件(springmvc - servlet.xml)中注册拦截器,指定拦截路径(如/main )。示例:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/main"/>
<bean class="com.example.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
5. 会话管理(登出功能)
o 控制器方法:在MainController中编写处理登出的方法,调用session.invalidate()销毁会话,然后redirect到登录页 。示例:
package com.example.controller;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MainController {
@RequestMapping("/main")
public String main() {
return "main";
}
@RequestMapping("/logout")
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/login";
}
}
6. 主页(main.jsp):添加 “退出” 链接, href 指向/logout 。示例:
<html>
<body>
欢迎访问主页
退出
</body>
</html>

