个人博客网:https://wushaopei.github.io/ (你想要这里多有)
一、返回值的设置
1、返回 String
【1】返回 String 默认情况
默认情况下。如果有视图解析器。则返回的结果和视图解析器的前缀+返回值+后缀。拼接之后再转发。
如果没有视图解析器。而直接拿返回的字符串,做转发路径。
【2】显示转发
显示的转发是:
forward:
forward:后面可以是相对路径,也可以是绝对路径。(开发都是绝对)
相对路径(不要使用):
forward:pages/user/return.jsp
相对路径,在解析成为绝对路径的时候。会参照当前请求的地址。
如果当前请求地址是:http://localhost:8080/springmvc_return/return/hello2
解析之后得到的地址是:http://localhost:8080/springmvc_return/return/pages/user/return.jsp
绝对路径(开发只用绝对路径):
forward:/pages/user/return.jsp
当前请求地址是:http://localhost:8080/springmvc_return/return/hello2
绝对路径转得到最终地址后是:http://localhost:8080/springmvc_return/pages/user/return.jsp
【3】显示重定向
在SpringMVC框架中的redirect: 这个重定向。第一个斜杠表示到http://ip:port/工程名/
显示的重定向是:redirect:
重定向也可以使用相对路径(不允许使用),和绝对路径(使用)
相对路径(不允许使用):
redirect:return
相对路径在解析的时候是要参数当次请求地址的:
当前请求路径是:http://localhost:8080/springmvc_return/return/hello3
那么相对路径解析后会替换掉当前请求的资源得到:
http://localhost:8080/springmvc_return/return/return
绝对路径(使用这一种):
redirect:/return
绝对路径在解析的时候是不参数当次请求地址的:
当前请求路径是:http://localhost:8080/springmvc_return/return/hello3
解析绝对路径得到的地址是:http://localhost:8080/springmvc_return/return
2、返回ModelAndView
【1】返回modelAndView的**默认情况**
【2】显示转发
显示的转发,都不会经过视图解析器。
forward:
显示的转发也分相对路径和绝对路径:
显示的转发是:
forward:
forward:后面可以是相对路径,也可以是绝对路径。(开发都是绝对路径)而且显示的转发不会经过视图解析器
相对路径(不要使用):
forward:pages/user/return.jsp
相对路径,在解析成为绝对路径的时候。会参照当前请求的地址。
如果当前请求地址是:http://localhost:8080/springmvc_return/return/hello2
解析之后得到的地址是:http://localhost:8080/springmvc_return/return/pages/user/return.jsp
绝对路径(开发只用绝对路径):
forward:/pages/user/return.jsp
当前请求地址是:http://localhost:8080/springmvc_return/return/hello2
绝对路径转得到最终地址后是:http://localhost:8080/springmvc_return/pages/user/return.jsp
【3】显示重定向
3、返回void
【1】没有返回值的**默认情况**
一般在实际开发中。我们都是禁止使用如以上这种方式。使用默认的请求资源名做为默认转发的逻辑资源名。
如果有需要,都是使用String类型显示标明返回的逻辑名。也就是说以上代码应该写成为:
【2】显示转发
我们使用SpringMVC开发,并不推荐在Controller控制器中直接使用Requst对象进行转发操作。
【3】显示重定向
【4】直接输出响应数据
二、数据在域中的保存
1、Request对象中保存数据
- 在方法的参数上添加request域
- 在方法体内调用setAttribute方法
2、Session域中保存数据
3、ServletContext域中保存数据
在Controller中的代码。在Controller的中获取SerlvetContext对象有两种方法,一种是@Autowired注入,一种是通过Session获取。
4、Map或Model或ModelMap形式保存数据在request域中
在四个域中,我们使用最频繁的域就是request对象。往request域对象中,保存数据,还在以下的几种形式。
我们可以在Controller的方法中,添加Map类型的参数,或者是Model类型的参数。或者是ModelMap类型的参数。都可以直接用来保存域数据到Request对象中。
Map全类名是: java.util.Map
Model全类名是: org.springframework.ui.Model
ModelMap全类名是: org.springframework.ui.ModelMap
BindingAwareModelMap我们称之为隐含模型。
5、ModelAndView方式保存数据到request域中
6、@SessionAttributes保存数据到Session域中
@SessionAttributes 注解可以标注在类上。它的作用是指定哪些数据可以保存到Session域中。
@SessionAttributes(value = { "key1","key2" }, types = { String.class, Book.class })
value属性,它表示把request域中key为key1,key2的键值对信息,也保存到Session中
types属性,它表示把request域中value类型为String.class或Book.class类型的键值对,也保存到Session中
7、@ModelAttribute注解
@ModelAttribute这个注解可以标注在方法和参数上。
@ModelAttribute三个常见作用:
- 被标注了@ModelAttribute的方法都会在Controller的目标方法之前执行。
- 目标方法的参数(JavaBean对象)会先从隐含模型中获取值传入。
- 被标注在参数上,参数值会按照指定的key从隐含模型中获取值。
三、传统的增删改查
1、准备单表的数据库
2、创建一个web工程
3、创建配置
jdbc.properties配置文件内容:
applicationContext.xml配置文件:
4、创建JavaBean对象
5、BookDao的编写和测试
BookDao接口
BookDaoImpl实现
BookDao的测试
6、创建BookService以及测试
BookService的接口
BookServiceImpl实现
BookService的测试
7、拷贝CRUD页面到WebContent目录下
到web.xml中去配置SpringMVC的前端控制器:
配置视图解析器在applicationContext配置文件中
8、图书列表功能的实现
不要忘了导入两个jar包 JSTL标签库
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
BookController的代码:
index.jsp添加一个进入功能的连接:
修改book/bookList.jsp页面的内容:
9、图书添加功能的实现
修改bookList.jsp页面中的添加图书地址:
<div class="menu"><a href="${ pageContext.request.contextPath }/book/bookEdit.jsp">添加图书</a></div>
添加BookController中添加的方法:
修改bookEdit.jsp页面的请求地址:
<form action="${ pageContext.request.contextPath }/book/add" method="post">
在web.xml中配置解决POST乱码的Filter过滤器:
10、图书删除功能的实现
我们需要导入js静态资源:
<script type="text/javascript" src="${ pageContext.request.contextPath }/script/jquery-1.7.2.js"></script>
解决SpringMVC无法加载静态资源问题:
我们配置的前端控制器。的拦截地址是<url-pattern>/</url-pattern>。
SpringMVC的前端控制器的拦截地址和Tomcat服务器中的一个默认的Servlet程序相冲突了
现在解决请求地址冲突的方案是,添加springMVC的标配:
修改bookList.jsp页面,添加删除的提示事件,
BookController控制器的代码:
11、图书更新功能的实现
第一步:点击【修改】连接,把需要更新的图书信息,填充到bookEdit.jsp页面
bookList.jsp页面中修改的连接地址:
<a href="${ pageContext.request.contextPath }/book/getBook?id=${book.id}">修改</a>
BookController控制器的代码:
bookEdit.jsp页面输出数据:
第二步:提交数据给服务器确认修改
BookController中的代码:
bookEdit.jsp修改页面: