spring mvc 前端页面显示不出数据
自己排除的问题
1.jsp页面isELIgnored设置默认是false
我的默认是true
2.wabapp版本过低
已经提升至4.0问题依然存在
3.数据未存入list
控制台输出书的id说明里面有数据
可能原因springmvc的配置问题个人认为
源码book.java
package cn.sjxy.chapter08.domain;
public class Book {
private String bookId;//图书编号
private String bookName;//图书名称
private String author;//图书作者
private int price;//图书价格
public String getBookId() {
return bookId;
}
public void setBookId(String bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public Book(String bookId, String bookName, String author, int price) {
this.bookId = bookId;
this.bookName = bookName;
this.author = author;
this.price = price;
}
}
BookController.java
package cn.sjxy.chapter08.web.controller;
import cn.sjxy.chapter08.domain.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Controller//使用@Controller注解标注的类是一个控制器
@RequestMapping("/book")//@RequestMapping注解用来映射对外的访问路径,该注解可以添加在类和方法上
public class BookController {
/**
* 功能:模拟获取库中所有图书信息,并保存在请求域中(这里保存在map中),然后请求转发到一个显示视图页面
* @param map:Spring MVC会把保存在map中的key-value键值对自动设置到HttpServletRequest请求域中
* @return: 返回的字符串是一个逻辑视图名称,Spring MVC会调用视图解析器把逻辑视图解析为具体的物理视图,
* 具体的解析规则为springmvc.xml中配置的视图解析器InternalResourceViewResolver
* <property name="prefix" value="/WEB-INF/jsp/"/>
* <property name="suffix" value=".jsp"/>
* 逻辑视图 -> 物理视图(prefix+逻辑视图名称+suffix)
* shows -> /WEB-INF/jsp/shows.jsp
*/
@RequestMapping("/shows")//当用户要访问该类中的此方法时,则访问路径为/book/shows
public String showBooks(Map<String,Object> map){
//模拟从数据库查询所有的图书信息并储存到List集合中来
List<Book> list=new ArrayList<Book>();
list.add(new Book("10001","Java面向对象编程","吴德",50));
list.add(new Book("10002","基于Java技术的Web应用开发","圣文顿",45));
list.add(new Book("10003","SSM框架整合从入门到精通","李晓明",50));
list.add(new Book("10004","Hadoop开发与应用","应毅",55));
list.add(new Book("10005","SpringBoot从入门到实战","李晓明",50));
for (Book m:list){
System.out.println(m.getBookId());
}
//类似于Servlet类中的request.setAttribute("books",list);
map.put("books",list);
//类似于Servlet类中的request.setAttribute("message","要保存的字符串信息");
map.put("message","使用@Controller注解方式来演示SpringMVC开发环境的搭建过程");
//返回一个逻辑视图名称
return "shows";
}
}
springmvc.xml
<?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">
<!--开启类扫描的注解解析器,对cn.sjxy.chapter08及其子包下的所有类上标注的@Controller、@Service、@Repository、@Component等注进行扫描,并交给Spring容器来进行Bean对象的创建与生命周期管理-->
<context:component-scan base-package="cn.sjxy.chapter08"/>
<!-- 开启自动注册基于注解的处理器映射器和处理器适配器-->
<mvc:annotation-driven/>
<!-- 配置视图解析器,目的是把逻辑视图转换为物理视图,如本例中逻辑视图(shows)到物理视图(WEB-INF/jsp/shows.jsp)-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前缀属性prefix的值-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 配置后缀属性suffix的值-->
<property name="suffix" value=".jsp"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- <bean name="/shows" class="cn.sjxy.chapter08.web.controller.ShowBooksController"/>-->
<!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>-->
<!-- <bean class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter"/>-->
</beans>
web.xml
<?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">
<!-- 注册前端控制器DispatcherServlet,该类在spring-webmvc.jar中-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过配置初始化参数来改变Spring MVC应用的核心配置文件路径及名称,如果没有配置该初始化参数,则该Spring MVC应用的核心配置文件位置必须为/WEB_INF/springmvc-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 表示容器在启动时立即加载该Servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 把前面注册的前端控制器映射为对外可以访问的请求路径-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 把所有的用户请求都交给Spring MVC框架来处理配置的url-pattern为”/“,注意不要使用”/*“-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
show.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: 26316
Date: 2023/10/1
Time: 16:09
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1" width="550px">
<caption style="font-weight: bold;color: red;">${message}</caption>
<tr>
<th>图书编号</th>
<th>图书名称</th>
<th>图书作者</th>
<th>图书价格</th>
</tr>
<c:forEach items="${books}" var="book">
<tr>
<td>${book.bookId}</td>
<td>${book.bookName}</td>
<td>${book.author}</td>
<td>${book.price}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
目录结构