12.13 @RequestMapping用法
1 | package com.runsstudio.springmvc.servlet; |
1 | package com.runsstudio.springmvc.servlet; |
•Spring 为展现层****提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架****之一
•Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架
•Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
•支持 REST 风格****的 URL 请求
•采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性
https://www.cnblogs.com/wormday/p/8435617.html
用IDEA创建HELLOWORLD 的时候
要手动添加这两个包到lib下,不然怎么运行都开不起来 同时WEB-INF底下会有报错!
1 | @RequestMapping |
的作用:告诉 SPRINGMVC 这个方法 用什么方法来处理这个请求
这个/helloworld中的/可以省略 习惯了比较好
如果不指定配置文件位置,默认会找一个/WEB-INF/XXX-servlet.xml
这里的xxx是前端控制器的名字
1 | <servlet-mapping> |
/拦截所有请求 不拦截jsp页面
/* 拦截所有请求 (相当于完全覆盖了所有的资源 所以我们写/就可以了)
写/* 的话访问jsp会出现这个效果:(控制台报错)
1 | mapping found for HTTP request with URI [/index.jsp] in DispatcherServlet with name 'dispatcher' |
处理*.jsp是tomcat做的事 这是因为DefaultServlet是Tomcat中用来处理静态资源了
除了JSP 和servlet外剩下的都是静态资源
index.html:静态资源:tomcat会在服务器下找到这个资源并返回
重写了大web.xml中的资源
为什么jsp能访问?因为我们没有覆盖JspServlet的资源
一个方法只能处理一个请求
RequestMapping的属性:
method:限定请求方式 RequestMethod.GET/ POST/…….
params
1 | @RequestMapping(value = "/handle01" ,params = {"username"},method = RequestMethod.GET) |
url中必须有username,比如
http://localhost:8080/haha/handle01?username=111
才可以
@RequestMapping(value = “/handle01” ,params = {“!username”},method = RequestMethod.GET)
url中必须不包含username,比如
http://localhost:8080/haha/handle01
才可以,不然会报错
1 | handleNoSuchRequestHandlingMethod No matching handler method found for servlet request: path '/haha/handle01', method 'GET', parameters map['username' -> array<String>['111']] |
headers
consumes
produces
1 |
|
1 | @Autowired |
引入外部配置文件
扫描包
配置数据源
配置JDBCTEMPLATE,给JDBCTEMPLATE一个id,配置dataSource
配置声明式事务(上面的三步代码)
@Transactional
是注解在要事务的方法上,不是执行在test上!
@Transactional
public void checkout(String username,String isbn) throws SQLException {
bookDao.updateStock(isbn);
int price = bookDao.getPrice(isbn);
bookDao.updateBalance(username,price);
int i=10/0;
}//正确
@Test
@Transactional //错误 不应该注解在这
public void test04() throws SQLException {
BookService bookService=ioc.getBean("bookService",BookService.class);
// BookService bookService=new BookService();
bookService.checkout("Tom","ISBN-001");
System.out.println("结账完成");
}
(基于注解的AOP)
基于配置的也是同样的步骤 不过是在xml里配置
1 | 事务细节: |
事务的传播:
坐一辆车用REQUIRED
坐新车用REQUIRED_NEW:当前事务总是使用一个新事务 如果已经有事务,会将之前事务挂起
任何地方崩异常,已经执行了的REQUIRED NEW 还是一定完成,都会成功
REQUIRED 事物的属性都是继承于大事务的
REQUIRES_NEW: 这个方法直接使用新的connection
1 | <aop:config> |
Spring 专注于容器
Spring MVC 专注于模型
MyBatis 和数据库进行交互 是一个持久化层框架
什么是框架?是某个领域的整体解决方案
Mybatis 考虑:缓存、异常处理、字段映射
JDBC工具会产生什么问题?
1. 麻烦
2. sql语句是硬编码在程序中的,耦合 每写一次都要重新打包项目
Hibernate - 数据库交互的框架(ORM框架) (使用各种框架)
ORM(Object Relation Mapping)对象关系映射
创建好java bean即可,数据库里没表 ORM可以创建表,JAVA BEAN 增删字段,在数据库中可以同步增删
写到后面都不需要掌握sql
为什么Hibernate 现在不用了 ? 因为他是黑箱操作 ,没法写sql