Servlet和MVC架构模式

什么是Servlet?

  • Servlet Applet:服务器小程序,在Java层面,提供的一个功能,接收前端请求,并对请求做出响应
  • 功能:实现页面的动态化。让页面的数据实现动态化
  • Servlet是sun公司初期为服务器程序设计的一套规范。必须实现一个接口Servlet

基于web.xml配置开发Servlet(了解)

1.创建项目,将项目转换为web项目

2.添加依赖:

        1.将tomcat的servlet-api。jar复制到WEB-INF的lib文件夹里

        2.右上角小齿轮->Modules->Dependencies->+号->添加tomcat依赖

        3.创建一个普通Java类,名为XxxServlet,继承HttpServlet

        4.重写service方法,参数为HttpXxxx

        5.在web.xml中注册servlet,为servlet映射一个请求的路径(<servlet> <serlvet -Mapping>)

        6.启动服务器,浏览器直接请求servlet

基于注解开发Servlet

  • 标记类、方法、属性,告知程序要做哪些配置,如何执行
  • @WebServlet():代替web.xml那一堆配置

Servlet的基本使用

接收数据,响应数据

@WebServlet("/data")
public class DataServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //HttpServletRequest->客户端请求对象。 包含了请求相关的所有信息。
        //1.获取客户端发送的数据。
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("username = " + username);
        System.out.println("password = " + password);

        //HttpServletResponse->客户端响应对象,包含了响应相关的所有信息。
        PrintWriter printWriter = resp.getWriter();
        printWriter.println("ok!");
    }

Servlet的继承结构

顶级接口是Servlet。

        ->有5个方法,必须要间接或直接的与Servlet接口产生关系

GenericServlet:通用Servlet

        ->帮我们过滤重写了4个不必需要的方法

        ->子类必须重写service方法。(无协议)

HttpServlet:专注与HTTP协议的Servlet。

        ->重写了GenericService的service,调用了自身重载的有HTTP协议的service方法。

        ->在方法内部对HTTP的请求方式做了不同的区分:

        doGet:专注处理get请求

        doPost:专注处理post请求

        doPut:专注处理put请求

        doDelete:专注处理deletei请求

        正常开发来说,要严格要求每个Servet处理的请求具体的方式,但现在是学习阶段,省力气只写service。

Servlet生命周期

  • 第一次请求会触发Servlet创建对象。(单例模式,懒汉式)
  • 执行init方法,做一些前置性的初始化操作。
  • 后续的每次请求执行的service方法
  • 服务器关闭或重启或重新部署,会执行destory方法。卸载掉当前运行的所有servlet方法

ServletConfig(针对单个Servlet)

ServletConfig对象是Servlet对象的配置相关的信息

this.getServletConfig() 方法调用集合。

ServletContext(针对整个项目)

Context:代表整个项目,上下文

ServletContext对象代表是整个项目,该对象也是只有一个,全局对象。

获取方式:

        ServletContext servletContext = servletConfig.getServletContext();

HttpServletRequest

HttpServletRequest代表的是Http协议的请求对象,其封装的是请求相关的所有内容(请求报文)

getRequestURL() :获取前端请求的地址(URL是统一资源定位符 //  http://localhost:8080/项目/资源)

getRequestURI():获取前端请求的地址(URI是统一资源标识符)//在当前项目下的某个资源

HttpServletResponse

HttpServletResponse代表的是响应对象,其包含的是响应相关的内容(响应报文)

转发与重定向

  • 无论是转发还是重定向,都是跳转的行为
  • 浏览器地址栏的区别
  • 数据共享的区别

转发

转发是服务器内部的行为。对于客户端而言,客户端只发送了一次请求。浏览器地址栏不发生改变。

1.创建转发的对象:

        RequestDispatcher requestDispatcher = req.getRequestDispatcher("targrt.html);

2.使用请求调度对象,调度请求转发给谁

        requestDispatcher.forword(req,resp);//浏览器请求的资源,资源将请求转发给了另一个资源,以完成一次响应。

//请求转发给另一个servlet

req.getRequestDispatcher("target1").forward(req,resp);

转发特点:

  • 请求转发通过HttpServletRequest对象获取请求转发器实现;
  • 请求转发是服务器内部的行为,对客户端是屏蔽的;
  • 客户端只发送了一次请求,客户端地址栏不变
  • 服务端只产生了一对请求和响应对象,这一对请求和响应对象会继续传递给下一个资源;
  • 因为全程只有一个HttpServletRequest对象,所以请求参数可以传递,请求域中的数据也可以传递
  • 请求转发可以转发给其他Servlet动态资源,也可以转发给一些静态资源以实现页面跳转;
  • 请求转发可以转发给WEB-INF下受保护的资源
  • 请求转发不能转发到本项目以外的外部资源

重定向

重定向是客户端发送了一次请求,得到了一个响应,该响应是新的请求路径,客户端再一次发送新请求,得到一次新响应。

//重定向去一个页面

        resp.sendRedirect("target.html");

//重定向去一个Servlet

        resp.sendRedirect("target1");

//重定向去项目以外的任意资源

        resp.sendredirect("http://www.baidu.com");

重定向的特点:

  • 响应重定向通过HttpServletResponse对象的sendRedirect方法实现
  • 响应重定向是服务端通过302响应码和路径,告诉客户端自己去找其他资源,是在服务端提示下的客户端的行为
  • 客户端至少发送了两次请求,客户端地址栏是要变化的;
  • 服务端产生了多对请求和响应对象,且请求和响应对象不会传递给下一个资源
  • 因为全程产生了多个HttpServletrequest对象,所以请求参数不可以传递,请求域中的数据也不可以传递
  • 重定向可以是其他Servlet动态资源,也可以是一些静态资源以实现页面跳转;
  • 重定向不可以到WEB-INF下受保护的资源
  • 重定向可以到本项目以外的外部资源

路径问题

VSCode中路径:

绝对路径:磁盘当中某个文件。 D:\imgs\xxx.jpg

相对路径:../img/xxx.jpg

路径

资源在网络上的路径。
相对路径:

./当前路径(可以省略)、../上一级路径

绝对路径:

资源在网络上的路径(URL统一资源定位符)

/的作用

服务器角度:

        在服务器中,/代表的是当前项目的绝对路径:

                http://localhost:8080/day6_servlet/

客户端角度:

        在客户端中,/代表的是当前访问的服务器的绝对路径

                http://localhost:8080/

无论是转发,还是重定向,一定要分清楚两个角度:

        浏览器解析/:服务器路径

        服务器解析/: 上下文路径(项目访问路径)

MVC架构模式

三层架构(不是架构模式,只是业务逻辑的分层)

DAO:数据访问层

Service:业务处理层

View:视图层

三层架构是站在了功能的逻辑角度,进行职责的划分,各司其职

MVC架构模式

  • M:Model,模型层。就是将数据库的数据转化成Java中的实体对象
  • C:Controller,控制层,接收前端请求,调用M层,响应数据或结果到V层。
  • V:View,视图层,显示给客户端的。
  • MVC是站在了一个软件/项目的层面来考虑的划分,逻辑,数据,请求响应差分成了各个独立的组件,通过高内聚的行为,组合在一起,实现一个完整的流程。

项目的MVC结构

  • DAO:
  • Service:
  • Controller
  • Web
  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值