学习和掌握javaWeb

基本概念

  1. javaWeb是用java技术解决相关Web互联网领域的技术栈,准确的说是开发网站后端服务程序;

  2. 目前我们使用APP或者浏览网站应用的通信架构有两种:BS架构和CS架构;BS架构:浏览器-服务器架构,浏览器充当所有BS架构应用的客户端程序,用户操作浏览器向服务器请求数据,服务器根据请求返回响应数据。
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6ca31dee7c714f10a61fa37a57fce8e8.png

  3. 静态资源是用静态网页技术(Html,CSS,JavaScript)开发的资源,所有用户访问的效果都是一样的,例如文本,图片,音频,视频和Html,CSS,JavaScript都属于静态资源;

  4. 动态资源,不同用户或者同一个用户访问传递的请求参数不同,服务器返回来的http响应数据经浏览器解析后展现出不一样的效果,那么用户访问的就是动态资源;浏览器访问动态资源时,服务器会先执行动态资源,再将执行的结果转化为静态资源,再发送给浏览器;

从浏览器到web服务器的“一路”

在这里插入图片描述

  1. 用户点击链接或者访问指定网址
  2. 浏览器通过DNS服务器获取网站主机ip,不指定端口默认端口为80端口,委托操作系统协议栈与web服务器建立tcp链接
  3. 浏览器依据HTTP协议发送请求数据,服务器接收并解析HTTP请求数据,
  4. 服务器根据请求行访问的资源路径执行对应的动态资源,查询数据库,然后依据HTTP协议将结果转为响应数据发送给浏览器。

Tomcat服务器

  1. Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得开发人员不必直接面向协议,简化web应用的开发;简单来说,在javaWeb中,Web服务器就是负责将浏览器发送来的请求数据封装到一个对象里(request),然后把另一个对象(Response)的封装的数据“拿”出来,按照HTTP协议组成响应数据,再发送给浏览器。
  2. Tomcat是目前用的比较多的轻量级web服务器,也称为Web容器、servlet容器,Servlet(动态资源)只能依据Tomcat才能被调用执行;
  3. Tomcat默认绑定8080端口,而Http协议默认端口是80,我们可以在Tomcat配置文件中更改Tomcat绑定的端口号;
  4. 我们将javaWeb项目打包成war包,然后放到Tomcat的webapps磁盘目录下即可部署完成,Tomcat启动时会加载我们部署的war包中的字节码文件,也就是动态资源到jvm方法区,供浏览器访问执行;
  5. 我们通过idea创建maven web项目,maven会自动将我们的项目打包成war包;

Request&Response

Request

基本概念

当浏览器将http请求数据发送到Tomcat服务器后,Tomcat解析接收到的请求数据,我们知道http请求数据包含请求行、请求头、请求体数据;Tomcat会把这些数据封装到一个Request对象中,实例化绑定目标访问路径的动态资源(比如servlet),执行动态资源对象的方法(比如service),并将该对象引用传递到方法中,程序取出该对象封装的请求数据,执行相应处理;
在这里插入图片描述
java提供了request的两个接口,Tomcat实现了这两个接口的实现类。

获取请求数据

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
	  System.out.println("get......");
	  //获取请求行数据
	  req.getMethod();  // GET  获取请求方式
	  req.getContextPath();///hello_war 获取项目虚拟路径
	  req.getQueryString();// user=zs 获取get请求方式的请求参数
	  req.getRequestURI();///hello_war/demo2 获取资源路径
	  req.getRequestURL();// http://localhost/hello_war/demo2 获取资源全路径
      //获取请求头数据
      req.getHeader("user-ag")//根据键的名称获取请求头参数值
      
      //获取请求体数据,post方式请求参数会放到请求体中,request提供了字节流和字符流读取请求体数据
      BufferedReader br = req.getReader();
      String line = br.readLine();
      InputStream inputStream = req.getInputStream();
      byte[] bytes = new byte[1024];
      inputStream.read(bytes); 
//我们可以通过设定reques对象解码字符集解决post请求方式的中文乱码问题,post请求方式,
//Tomcat直接将未解码的请求体数据原封不动放到request对象的缓冲区,因此可以设定request
//对象的解码方式,当通过流的方式或者统一方式解码获取缓冲区数据时,不会出现乱码问题
//
      request.setCharacterEncoding("UTF-8");
}
  1. 因为get和post请求方式,请求参数的位置不同,get请求方式,请求参数在请求行中,post请求方式,请求参数在请求体中;
  2. Tomcat解析请求数据,根据解析到的请求方式,从请求数据中获取请求参数,将其放到request对象的不同数据结构中;我们需要根据请求方式调用不同的方法获取请求参数;
  3. request提供了统一的API获取请求参数;
//获取封装请求参数的集合对象
Map<String, String[]> map = req.getParameterMap();
//根据键值获取请求参数值数组
String[] hobbies = req.getParameterValues("hobby");
//如果我们知道当前请求参数就一个值,可以用该方法
String userName = req.getParameter("username");

请求转发

请求转发,一种在服务器内部的资源跳转方式;

  1. 浏览器发送请求数据给服务器,服务器中对应的动态资源A接收到请求;
  2. 资源A处理完后将请求转发给资源B;
  3. 资源B处理完委托Tomcat将结果响应给浏览器;
  4. 请求从资源A到资源B的过程叫请求转发;
    在这里插入图片描述
    Tomcat通过request对象进行请求转发;多个动态资源可以共享request对象封装的数据,包括封装的请求数据和前一个动态资源封装进的数据;
//请求转发,将当前request和response对象传递到下一个动态资源继续处理
req.getRequestDispatcher("资源B绑定路径").forward(req,resp);
req.getRequestDispatcher("/demo2").forward(req,resp);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值