JavaWeb-三层架构与MVC-乱码

三层架构:

          和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条数据。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值