我已经建立了一个非常基本的spring mvc Web应用程序,这是我的控制器类中有问题的开头/部分
@Controller
public class MainController {
@Autowired
AssetDAO assetDAO;
@RequestMapping("/")
public String home() {
System.out.println("HERE!");
return "index";
}
和我的index.jsp文件
<%@page language="java" contentType="text/html; charset=UTF-8" paegeEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "~//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org.TR.html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title> Welcome Page </title>
</head>
<body>
<div>
<h1> Asset Tracking Web App Test </h1>
<a href="EmployeeList">Get Employee Records</a>
</div>
</body>
</html>
但是访问localhost:8080/
时出现404
错误。但是消息HERE
被打印
编辑:我在我的src / main / resources文件夹中添加了一个application.properties文件,该文件解决了该问题...现在我的问题是,这与使用InternalViewResolver有何不同?还是我对此的理解是错误的??
EDIT2:项目的文件结构如下
.
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── assetTracking
│ │ ├── App.java
│ │ ├── AssetDAO.java
│ │ ├── Employee.java
│ │ └── MainController.java
│ ├── resources
│ │ └── application.properties
│ └── webapp
│ └── WEB-INF
│ ├── jsp
│ │ ├── employeeList.jsp
│ │ └── index.jsp
│ └── views.xml
├── tableCreatiosn.sql
├── tableEntries
为了简洁起见,省略了所有依赖项目录。由耶茨(Yates)建议使用这些文件并不能解决问题。但是,将它们替换为application.properties
application.properties
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
welcome.message: Hello Test
答案 0 :(得分:2)
可能您尚未配置InternalViewResolver。如果是,那么它将index.jsp
定位在某个错误的位置。
以下是InternalViewResolver
XML:
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
Java
@EnableWebMvc
@Configuration
@ComponentScan("<package_fully_qualified_name>")
public class WebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver internalResourceViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/view/");
bean.setSuffix(".jsp");
return bean;
}
}
答案 1 :(得分:0)
如果您的servlet上没有带属性前缀和后缀的viewResolver bean,spring将不知道“ index”的后缀是什么,因此找不到它。您可以对所有jsp文件使用viewResolver。
这是XML配置:
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
希望有帮助。
编辑
要配置servlet,请将其添加到web.xml(在您的情况下可能是views.xml?):
<servlet>
<servlet-name>servletname</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servletname</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
并且不要忘记创建servlet“ servletname-servlet.xml”,您可以使用应用程序名称代替servlet名称。然后将上面的bean添加到您的servlet中,它应该可以工作。
选中this,如果我忘记了其他任何内容,它可能会对您有所帮助。
答案 2 :(得分:0)
这是无法呈现的jsp页面。
尝试在pom.xml中添加以下依赖项。
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
如果使用Intellij IDE运行,则可能需要将jasper范围更改为“默认”。