三层架构:
和MVC一样,都是为了解耦合,提高代码的复用,区别是,二者对项目的理解是不同。
三层组成:
表示层,USL: use show layer,视图层,和用户的交互,
-- 前台 界面的显示 css jsp html ...
-- 控制跳转,调用业务逻辑层 Servlet (SpringMVC Struts2)
业务逻辑层 BLL: bussness logic layer: Service 层 承上启下,逻辑操作,如删除之前,先判断数据存在,然后再删除
数据访问层 DAL, data access layer Dao 层 , 直接访问数据库的操作,原子性的操作
如上图就是三层结构,表示层负责发任务,在业务逻辑层这个任务拆成多个小任务,而这些小任务都是不可在分的,
如一个删除任务,在业务逻辑层就需要拆为查和删小任务。
上面例子中的
- 前台相当于是MVC中的View层。jsp js html css 等
- 后台相当于是MVC中的Controller 层 Servlet(Spring mvc Struct2)
- 业务逻辑层相当于是 Service 层
- 数据访问层相当于是Dao层
再三层中的实体类,是负责三层之间数据的传递,也可以归纳到MVC中的模型中去。
乱码问题:
Html页面乱码问题:或者将GB18030换为 utf-8
Servlet收到的Request的Param(即请求参数)乱码问题,需设置Request的Charset:
request.setCharacterEncoding("UTF-8");
String snum = request.getParameter("snum");
response 返回到浏览器乱码:
response.setContentType("text/html; charset=UTF-8");
数据库存储乱码:
private final String URL = "jdbc:mysql://localhost:3306/springbootdb?characterEncoding=UTF-8";
IDEA 使用tomcat sout 输出中文的时候乱码:查看编码方式
String encoding=System.getProperty("file.encoding");
System.out.println("系统编码方式: " + encoding);
tomcat 得Edit Configuration 中配置
get请求当拿到的url 中的参数的时候乱码
// 下面的方式可以解决post或者get方式的中文乱码问题
// 这里接收的name是iso8859-1的字符编码,tomcat 默认的编码方式
String name = request.getParameter("username");
// 将name字符串按照原来字符编码打散
byte[] bytes = name.getBytes("ISO8859-1");
// 将bytes字节数据按照指定字符编码字符编码进行组装,组装为String
name = new String(bytes, "UTF-8");
//真正的写法:name = new String(name.getBytes("ISO8859-1"), "UTF-8");
或者在tomcat的service.xml 配置文件中修改默认编码方式
post请求体中乱码:
request.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("utf-8"); // 请求的编码
response.setCharacterEncoding("utf-8");// 响应的编码
// 设置响应编码
// response.setContentType("text/html; charset=UTF-8");
// 需要在响应代码生成以前进行编码,如果将编码写到out 之后那么还会乱码
String snum = request.getParameter("snum");
String sname = request.getParameter("sname");
Integer sage = Integer.parseInt(request.getParameter("sage"));
String saddress = request.getParameter("saddress");
Student student = new Student(Integer.valueOf(snum), sname, sage, saddress);
StudentService studentService = new StudentService();
PrintWriter writer = response.getWriter();
try {
boolean student1 = studentService.addStudent(student);
if (student1){
/*
out response request session application 都可以在这里拿到
out:response.getWriter();
session:request.getSession()
application: request.getServletContext()
*/
writer.print("增加成功!");
// response.setContentType("text/html; charset=UTF-8");
}else {
writer.print("增加失败!");
}
分页:
以上的做法的缺点是,id 值必须是连续的,否则无法满足10条数据。