JavaWeb技术

article/2025/9/30 0:49:11

目录

  • 背景:
    • B/S架构:
    • 静态资源:
    • 动态资源:
  • Tomcat:
  • Maven创建Web项目:
    • 使用骨架:
    • Tomcat Maven插件
  • Servlet
    • Servlet 执行流程
    • Servlet 生命周期
    • urlPattern配置
    • Request
      • 请求参数
      • 中文乱码解决方案
      • 请求转发![在这里插入图片描述](https://img-blog.csdnimg.cn/643247c7764144cba0cbf432f5003ceb.png)
      • 请求重定向
      • 路径问题
      • Response响应字符数据
      • Response响应字节数据

背景:

B/S架构:

Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。
在这里插入图片描述
资源分两种:静态资源和动态资源

静态资源:

静态资源主要包含HTML、CSS、JavaScript、图片等,主要负责页面的展示。

动态资源:

动态资源主要包含Servlet、JSP等,主要用来负责逻辑处理。
在这里插入图片描述
HTTP规定了浏览器和服务器之间数据传输的规则。(现在HTTP不用编写,而是直接用web服务器)

Tomcat:

Tomcat是Web服务器,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。

Maven创建Web项目:

使用骨架:

  1. 创建Maven项目
    在这里插入图片描述
  2. 选择使用Web项目骨架
    在这里插入图片描述
  3. 输入Maven项目坐标创建项目
    在这里插入图片描述
  4. 确认Maven相关的配置信息后,完成项目创建
    在这里插入图片描述
  5. 删除pom.xml中多余内容,只留下面的这些内容,注意打包方式 jar和war的区别
    在这里插入图片描述
  6. 补齐Maven Web项目缺失的目录结构,默认没有java和resources目录,需要手动完成创建补齐,最终的目录结果如下
    在这里插入图片描述

Tomcat Maven插件

在IDEA中使用本地Tomcat进行项目部署,相对来说步骤比较繁琐,所以我们直接使用Maven中的Tomcat插件来部署项目

  1. 在pom.xml中添加Tomcat插件

    <build><plugins><!--Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version></plugin></plugins>
    </build>
    
  2. 使用Maven Helper插件快速启动项目,选中项目,右键–>Run Maven --> tomcat7:run
    在这里插入图片描述
    注意:
    如果选中项目并右键点击后,看不到Run Maven和Debug Maven,这个时候就需要在IDEA中下载Maven Helper插件,具体的操作方式为: File --> Settings --> Plugins --> Maven Helper —> Install,安装完后按照提示重启IDEA,就可以看到了。
    在这里插入图片描述

Servlet

  • Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。

  • 使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容。

  • Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

Servlet 执行流程

在这里插入图片描述

  • 浏览器发出http://localhost:8080/web-demo/demo1请求,从请求中可以解析出三部分内容,分别是localhost:8080web-demodemo1
    • 根据localhost:8080可以找到要访问的Tomcat Web服务器
    • 根据web-demo可以找到部署在Tomcat服务器上的web-demo项目
    • 根据demo1可以找到要访问的是项目中的哪个Servlet类,根据@WebServlet后面的值进行匹配
  • 找到ServletDemo1这个类后,Tomcat Web服务器就会为ServletDemo1这个类创建一个对象,然后调用对象中的service方法
    • ServletDemo1实现了Servlet接口,所以类中必然会重写service方法供Tomcat Web服务器进行调用
    • service方法中有ServletRequest和ServletResponse两个参数,ServletRequest封装的是请求数据,ServletResponse封装的是响应数据,后期我们可以通过这两个参数实现前后端的数据交互

Servlet 生命周期

  1. Servlet对象在什么时候被创建的?

默认是第一次访问的时候被创建,可以使用@WebServlet(urlPatterns = “/demo2”,loadOnStartup = 1)的loadOnStartup 修改成在服务器启动的时候创建。

  1. Servlet生命周期中涉及到的三个方法,这三个方法是什么?什么时候被调用?调用几次?

涉及到三个方法,分别是 init()、service()、destroy()

init方法在Servlet对象被创建的时候执行,只执行1次

service方法在Servlet被访问的时候调用,每访问1次就调用1次

destroy方法在Servlet对象被销毁的时候调用,只执行1次

不需要编写service()方法方法,直接继承HttpServlet,然后重写父类中的doGet和doPost方法,就可以用来处理GET和POST请求的业务逻辑。

urlPattern配置

Servlet类编写好后,要想被访问到,就需要配置其访问路径(urlPattern
一个Servlet,可以配置多个urlPattern
在这里插入图片描述

package com.itheima.web;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;/**
* urlPattern: 一个Servlet可以配置多个访问路径
*/
@WebServlet(urlPatterns = {"/demo7","/demo8"})
public class ServletDemo7 extends MyHttpServlet {@Overrideprotected void doGet(ServletRequest req, ServletResponse res) {System.out.println("demo7 get...");}@Overrideprotected void doPost(ServletRequest req, ServletResponse res) {}
}

Request

获取请求数据

  • 浏览器会发送HTTP请求到后台服务器[Tomcat]
  • HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]
  • 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中
  • 所存入的对象即为request对象,所以我们可以从request对象中获取请求的相关参数
  • 获取到数据后就可以继续后续的业务,比如获取用户名和密码就可以实现登录操作的相关业务

在学习下面内容之前,我们先提出两个问题:

  • 什么是请求参数?
  • 请求参数和请求数据的关系是什么?

1.什么是请求参数?

为了能更好的回答上述两个问题,我们拿用户登录的例子来说明

1.1 想要登录网址,需要进入登录页面

1.2 在登录页面输入用户名和密码

1.3 将用户名和密码提交到后台

1.4 后台校验用户名和密码是否正确

1.5 如果正确,则正常登录,如果不正确,则提示用户名或密码错误

上述例子中,用户名和密码其实就是我们所说的请求参数。

2.什么是请求数据?

请求数据则是包含请求行、请求头和请求体的所有数据

3.请求参数和请求数据的关系是什么?

3.1 请求参数是请求数据中的部分内容

3.2 如果是GET请求,请求参数在请求行中

3.3 如果是POST请求,请求参数一般在请求体中

请求参数

request对象已经将上述获取请求参数的方法进行了封装,并且request提供的方法实现的功能更强大,以后只需要调用request提供的方法即可,在request的方法中都实现了哪些操作?

(1)根据不同的请求方式获取请求参数,获取的内容如下:
在这里插入图片描述
(2)把获取到的内容进行分割,内容如下:
在这里插入图片描述
(3)把分割后端数据,存入到一个Map集合中:
在这里插入图片描述

注意:因为参数的值可能是一个,也可能有多个,所以Map的值的类型为String数组。

基于上述理论,request对象为我们提供了如下方法:

  • 获取所有参数Map集合
Map<String,String[]> getParameterMap()
  • 根据名称获取参数值(数组)
String[] getParameterValues(String name)
  • 根据名称获取参数值(单个值)
String getParameter(String name)

中文乱码解决方案

  • POST请求和GET请求的参数中如果有中文,后台接收数据就会出现中文乱码问题

    GET请求在Tomcat8.0以后的版本就不会出现了

  • POST请求解决方案是:设置输入流的编码

    request.setCharacterEncoding("UTF-8");
    注意:设置的字符集要和页面保持一致
    
  • 通用方式(GET/POST):需要先解码,再编码

    new String(username.getBytes("ISO-8859-1"),"UTF-8");
    
  1. URL编码实现方式:
  • 编码:

    URLEncoder.encode(str,"UTF-8");
    
  • 解码:

    URLDecoder.decode(s,"ISO-8859-1");
    

请求转发在这里插入图片描述

(1)修改RequestDemo5中的方法

@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("demo5...");//存储数据request.setAttribute("msg","hello");//请求转发request.getRequestDispatcher("/req6").forward(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

(2)修改RequestDemo6中的方法

/*** 请求转发*/
@WebServlet("/req6")
public class RequestDemo6 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("demo6...");//获取数据Object msg = request.getAttribute("msg");System.out.println(msg);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

(3)启动测试

访问http://localhost:8080/request-demo/req5,就可以在控制台看到如下内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8gWv0fmC-1646302239194)(assets/1628857213364.png)]
在这里插入图片描述

请求重定向

在这里插入图片描述
(1)创建ResponseDemo1类

@WebServlet("/resp1")
public class ResponseDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("resp1....");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

(2)创建ResponseDemo2类

@WebServlet("/resp2")
public class ResponseDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("resp2....");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

(3)在ResponseDemo1的doGet方法中给前端响应数据

@WebServlet("/resp1")
public class ResponseDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("resp1....");//重定向resposne.sendRedirect("/request-demo/resp2")}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

(4)启动测试

访问http://localhost:8080/request-demo/resp1,就可以在控制台看到如下内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fc2s41gp-1646302415773)(assets/1628861404699.png)]
说明/resp1/resp2都被访问到了。到这重定向就已经完成了。

路径问题

什么时候加/

  • 浏览器使用:需要加虚拟目录(项目访问路径)
  • 服务端使用:不需要加虚拟目录

1.超链接,从浏览器发送,需要加
2.表单,从浏览器发送,需要加
3.转发,是从服务器内部跳转,不需要加
4.重定向,是由浏览器进行跳转,需要加。

Response响应字符数据

1.返回一个简单的字符串aaa:

通过Response对象获取字符输出流: PrintWriter writer = resp.getWriter();
通过字符输出流写数据: writer.write("aaa");

在这里插入图片描述
2.返回一串html字符串,并且能被浏览器解析:

PrintWriter writer = response.getWriter();
//content-type,告诉浏览器返回的数据类型是HTML类型数据,这样浏览器才会解析HTML标签
response.setHeader("content-type","text/html");
writer.write("<h1>aaa</h1>");

在这里插入图片描述
3. 返回一个中文的字符串你好,需要注意设置响应数据的编码为utf-8:

//设置响应的数据格式及数据的编码
response.setContentType("text/html;charset=utf-8");
writer.write("你好");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-luhdIpGO-1646303068046)(assets/1628864390263.png)]

Response响应字节数据

返回一个图片文件到浏览器:

(1)pom.xml添加依赖

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>

(2)调用工具类方法

//fis:输入流
//os:输出流
IOUtils.copy(fis,os);

优化后的代码:

/*** 响应字节数据:设置字节数据的响应体*/
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 读取文件FileInputStream fis = new FileInputStream("d://a.jpg");//2. 获取response字节输出流ServletOutputStream os = response.getOutputStream();//3. 完成流的copyIOUtils.copy(fis,os);fis.close();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

在这里插入图片描述


http://chatgpt.dhexx.cn/article/7wVY6GcZ.shtml

相关文章

WEB技术与应用---概述

WEB技术与应用–概述 万维网 概述&#xff1a;万维网www&#xff08;world wide web&#xff09; 1.web模型 2.web客户端 3.web服务器 超链接&#xff1a; 超链接指向的资源可以处于lnternet的任一Web服务器之中&#xff0c; 利用超链接Web页面可以与其他Web页面进行关联。…

web各个技术

Web 知识框架 控制浏览器行为技术&#xff1a;HTML 、CSS 、JavaScript控制硬盘上数据库行为技术&#xff1a;MySql数据库服务器管理使用&#xff08;SQL重点&#xff09;、JDBC规范控制服务端Java行为技术&#xff1a;Http服务器、Servlet、JSP互联网通信流程开发规则&#…

Web技术的发展

定义&#xff1a; 本意是蜘蛛网和网的意思&#xff0c;在网页设计中我们称为网页的意思。现广泛译作网络、互联网等技术领域。表现为三种形式&#xff0c;即超文本&#xff08;hypertext&#xff09;、超媒体&#xff08;hypermedia&#xff09;、超文本传输协议&#xff08;HT…

WEB简介

WEB 一、Web简介 1、 简介 早期的web应用主要是静态页面的浏览&#xff0c;这些静态页面使用HTML语言编写&#xff0c;放在服务器上&#xff0c;用户使用浏览器通过HTTP协议请求服务器上的web页面&#xff0c;服务器上的web服务器软件接受到用户发送的请求后&#xff0c;读取…

Web开发

一、什么是Web开发? Web开发其实就是Web应用开发 在 PC&#xff08;Personal Computer&#xff0c;个人计算机&#xff09;刚兴起的年代&#xff0c;软件主要使用 C/S 架构&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09;即应用运行在桌面上&#xff0c;而…

常见Web技术之间的关系,你了解多少?

引 ------------------------------------------------------------------------------------------------------------ 如果你是一个Web开发初学者&#xff0c;那么你难免会在网上搜索HTML&#xff0c;CSS&#xff0c;XML&#xff0c;JS&#xff08;Javascript&#xff09;&…

Web技术发展史

Web技术发展史 Web开发指的是网页系统开发&#xff0c;每次在浏览器中输入网址时&#xff0c;总会先输入www&#xff0c;这里其实是World Wide Web的简称&#xff0c;现在也简称Web&#xff0c;中文译为万维网。 Web设计初衷是一个静态信息资源发布媒介&#xff0c;通过超文本…

web前端主要技术概述

web前端主要技术概述 参考资料&#xff1a; 2018 Web 开发者路线图 2017年前端框架、类库、工具大比拼 本文主要是介绍部分主流和新兴的web前端技术&#xff0c;希望能帮助想学web前端的小白&#xff0c;理清其技术学习路线。 首先有些技能是web前端需要掌握的&#xff1a…

Web技术基础

前言 当我们还没有接触Web时&#xff0c;可能处理的都是静态网页如Html,这个网页的数据都是直接写在标签里写死的&#xff0c;那么如果我们要做类似淘宝的一个网站,数据每天都会更新&#xff0c;那么静态网页就不支持了&#xff0c;就需要从数据库里去拿数据&#xff0c;来用动…

web端基本技术点整理

1 WEB端概述 1.1 前端框架演变 https://blog.csdn.net/bjweimengshu/article/details/79563440 1.2 技术概览 https://blog.csdn.net/fighting_no1/article/details/79599806 1.3 学习路线 https://blog.csdn.net/zwjweb/article/details/78704342 https://blog.csdn.net/zwjwe…

数据可视化网页内容自动抓取工具

网页内容提取支持我们对公开的网页信息数据进行提取&#xff0c;如果通过人工对网页数据采集&#xff0c;是一个繁琐的工作&#xff0c;网页内容提取工具通过可视化的操作页面&#xff0c;模拟人工进行网页内容提取&#xff0c;能快速获取整个网站的对应元素。 网页内容提取工具…

抓取网站的5种方法

来自维基百科 Web爬虫&#xff08;有时也称为蜘蛛&#xff09;是一种Internet机器人&#xff0c;通常系统地浏览Web索引&#xff0c;以进行Web索引。 Web搜寻器以要访问的URL列表&#xff08;称为种子&#xff09;开始。搜寻器访问这些URL时&#xff0c;它会识别页面中的所有超…

如何抓取网页数据

如何抓取网页数据&#xff0c;每当我们在网上找到自己想到的数据&#xff0c;都需要复制粘贴或下载然后一步一步地整理。今天教大家如何快速地免费获取网页数据信息&#xff0c;只需要输入域名点选你需要的数据&#xff0c;软件全自动抓取。支持导出各种格式并且已整理归类。详…

爬取动态网页数据的软件-抓取动态网页数据的工具

爬取动态网页数据&#xff0c;随着时代的进步&#xff0c;互联网的发展&#xff0c;不管是企业还是个人都知道了数据的重要性。今天给大家分享一款免费爬取动态网页数据的软件。只要点点鼠标就能轻松爬取到你想要的数据&#xff0c;不管是导出还是自动发布都支持&#xff01;详…

工具说明书 - 网页内容抓取工具Web Scraper(一)

Web Scraper&#xff0c;官网自称为排名第一的网页抓取/提取插件&#xff0c;可以安装在Chrome和Firefox上。 安装路径&#xff1a; https://chrome.google.com/webstore/detail/web-scraper-free-web-scra/jnhgnonknehpejjnehehllkliplmbmhn?hlenhttps://chrome.google.com/…

如何进行网页抓取数据??

最近老是做导数据&#xff0c;有时候没有旧库了&#xff0c;我们可以从老网页抓取数据 主要思路&#xff1a;通过把网页转换成doc式的html,然后进行获取元素的值 我来写个案例&#xff1a; 这是目标网页&#xff1a; http://zxjg.yn.gov.cn/zxjg/gongshi?rowIndex1&re…

网页抓取及信息提取(三)

R星校长 第3关&#xff1a;网页数据分析 任务描述 下图是2016年国防科技大学分数线的网页&#xff0c;在浏览器中我们可以看到&#xff0c;各省的最高分、最低分、平均分都整齐地排列自在表格中。一个网页的源代码时常有成百上千行&#xff0c;其中很多代码都是为了布局页面样…

爬虫入门(五)抓取网页数据

前面已经实现了获取整个网页HTML的功能&#xff0c;并且在获取HTML的基础上&#xff0c;加上一些诸如&#xff1a;下载出错自动重试、用户代理、服务器代理、爬取深度、避免重爬、id遍历、链接遍历等进阶功能。而且在处理过程中也初步使用了正则表达式。 但是前面我们获取的HT…

网页抓取数据-网页抓取数据的软件免费

在互联网络的时代&#xff0c;信息如同大海般没有边际。甚至我们获取信息的方法已经发生改变&#xff1a;从传统的翻书查字典&#xff0c;继而变成通过搜索引擎进行检索。我们从信息匮乏的时代一下子走到了信息极大丰富今天。 随着互联网的发展及普及&#xff0c;互联网用户迅速…

使用爬虫抓取网页内容

对于爬虫我们首先想到的是 python&#xff0c;但是对于前端来说我们通常是 node 来写爬虫&#xff0c;去抓取网站的数据而已。 爬虫的基本流程 1、发起请求 使用http库向目标站点发起请求&#xff0c;即发送一个Request&#xff0c;第三方请求库如 request&#xff0c;axios 等…