SSM项目书写顺序
前提:
在main文件夹下创建一个java的蓝色文件夹和一个resourse的资源文件夹
1、pojo层
book.java里面填写实体
2、Dao层(Mapper层)
写一个BookMapper.java的接口
resource里面写一个BookMapper.xml,里面写入SQL语句
3、Service层
先写一个BookService.java的接口文件
再写一个BookServiceiml.java的接口实现文件
4、添加Controller层
写一个BookController.java文件
jsp: add.jsp
controller:跳转添加页面
页面通用跳转方法
我们在mapper层的配置文件中填写添加的sql语句,添加的具体字段需要获取前端的参数,我们使用的格式为#{} 在传统的jdbc的获取方式中也可以使用
获取,但是不推荐。因为
{}获取,但是不推荐。 因为
获取,但是不推荐。因为{}的取值方式有可能引起sql的注入。
Jdbc的获取数据的方式:
1.加载驱动
2.创建链接对象
3.使用链接对象获取statment对象 利用statement对象向数据库发送sql
4.定义sql
5.调用statement的查询方法,参数传递定义的sql
6.得到查询结果,处理结果
我们可以通过字符串的拼接改变原有的sql语义。
例如:
登录的sql
Select * from user where username=参数1 and password =参数2
假如前端页面如下
用户名:
密码:
用户名:admin 密码:111 or 1=1
最终的sql拼接为Select * from user where username=admin and password =111 or 1=1
那么就可以跳过登录验证,直接进入后续的操作
Jdbc是使用了statement对象的子对象prepareStatement来解决sql注入的问题
使用prepareStatement对象的流程是:
- 加载驱动
2.创建链接对象
3.应该定义sql 模板 select * from user where username=? And password=?
4.使用链接对象获取prepareStatement对象参数中必须传入sql模板
5.给?赋值
6.得到结果 处理结果
了解以上,KaTeX parse error: Expected 'EOF', got '#' at position 4: {}与#̲{}的区别就是{}的取值方式是第一种使用的statement对象
而#{}的取值方式是第二种防止了sql的注入。
后台跳转分为两种方式:
1.转发
2.重定向
转发示意图:
转发会共享request作用域,里面的数据是可以获取的,是服务器的行为,而重定向是浏览器行为,并没有共享request作用域。