需要搭建的环境
1.客户端--服务器开发环境
客户端:浏览器(HTML+CSS+JS)
服务器:JAVA
1.安装JDK,配置JAVA_HOME 和 PATH
2.安装Tomcat
3.安装IDE--intellij IDEA Ultimate 是旗舰版的意思。
2.TOMCAT 的下载和解压,配置,启动, 访问
tomcat 下载完成后,解压到本地计算机的任意一个地方就OK了,不用安装
D:\Ctool\JAVA\tomcat\apache-tomcat-8.5.93-windows-x64\apache-tomcat-8.5.93\bin
2.1启动tomcat
在windows 下 ,执行 startup.bat 文件
D:\Ctool\JAVA\tomcat\apache-tomcat-8.5.93-windows-x64\apache-tomcat-8.5.93\bin\startup.bat
在linux 下,执行 startup.sh 文件
当前下载的8.593 windows 版本,并没有startup.sh文件
在windows上启动后的截图
我们看到最后一行,提示 startup in 1124ms,说明正常启动了,花费了 1124ms
但是有个问题,中文是乱码
改动方法:
修改Tomcat的logging配置:
进入Tomcat的安装目录,找到conf文件夹中的logging.properties文件。
编辑该文件,找到如下一行(如果没有,可能需要手动添加):
java.util.logging.ConsoleHandler.encoding = UTF-8
将其修改为:
java.util.logging.ConsoleHandler.encoding = GBK
2.2 网络访问一个服务器上的某一个应用程序
假设在腾讯的服务器上,有两个服务器软件(一个tomcat1 ,一个tomcat2),
服务器软件1 tomcat1 占用80端口,上面有两个项目:一个qq,一个weixin
服务器软件2 tomcat2 占用8080端口,上面有两个项目:一个qq,一个wangzherongyao
假设 这台服务器的IP是:10.10.128.45
那么如果我们要访问 8080 端口的qq项目,下面的一张图片img,
访问路径应该是: http://10.10.128.45:8080/qq/img
2.3 访问自己我们刚才启动的tomcat,
首先要知道启动这台电脑的ip,cmd执行ipconfig,就能知道IP
而tomcat使用的端口是8080,因此就知道了ip+端口
在浏览器上输入 http://192.168.31.202:8080/
因为我们是在当前计算启动的tomcat,因此ip也可以使用127.0.0.1,127.0.0.1也叫做回环地址
http://127.0.0.1:8080
也可以使用localhost
http://localhost:8080
结果如下:
这里还有一个问题,我们在网页输入的时候 并没有输入 项目名字,直接 http:// ip+端口 就访问了tomcat。实际上这个是个缺省配置。
我们从tomcat的文件目录可以看到实际上有很多的 项目。tomcat 中的项目都是放在 webapps中的
那我们使用 如下的三个地址理论上就能访问 docs 这个项目了
http://192.168.31.202:8080/docs/
http://127.0.0.1:8080/docs/
http://localhost:8080/docs/
实际测试结果发现,通过真实 IP 访问的不行,其他两个都可以,失败的时候报的error是403,并不是404
关于403 (403错误是网站访问过程中,常见的错误提示。资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache设置了访问权限不当。)
在测试一个 http://127.0.0.1:8080/examples/
也是OK的
3.IDE--intellij IDEA Ultimate 的下载,安装,配置,启动, 访问
3.1.安装和破解
1. 卸载之前安装的IDEA
先删除之前安装的IDEA,如果之前安装过;则需要卸载,如果之前没有安装过,则不需要卸载
2. 将之前版本遗留的路径下的东西最好也删除了
C:\Program Files\JetBrains
C:\Users\Administrator\AppData\Local\JetBrains
C:\Users\Administrator\AppData\Roaming\JetBrains
3.运行如下的脚本,将注册表中的信息之类的删除了,然后重新注册
D:\Ctool\JAVA\IDEA\ja-netfilter-all\scripts\uninstall-all-users.vbs
D:\Ctool\JAVA\IDEA\ja-netfilter-all\scripts\install-all-users.vbs
4.安装如下版本的IDEA
D:\Ctool\JAVA\IDEA\ideaIU-2021.3.3.exe
5.激活
3.2 IDEA 的使用
新建项目
一个项目下有很多模块,这里新建一个模块
在模块下面新建一个具体的类
右键可以执行
3.3在IDEA中运行tomcat 并部署一个web 项目
3.3.1 给该项目 中的某一个模块 添加 web 应用程序,注意是要在java 模块上 “添加框架支持”
然后就会多一个web 文件夹
其中index.jsp 就是web 项目的首页,改动index.jsp中的字,方便以后检查
为了测试期间,我们还添加了两个文件 1.jpg, 和 aa.html. 注意:都是要放在 web 文件下的
3.2下一步:将tomcat集成到IDEA中,
注意:配置 Tomcat主目录是在 tomcat bin 的上一层
D:\Ctool\JAVA\tomcat\apache-tomcat-8.5.93-windows-x64\apache-tomcat-8.5.93
3.3 并 将项目部署到 tomcat
3.4 运行
http://localhost:8080/Helloworldweb/ 是首页,如果没有写,tomcat 会自动的寻找 index.jsp之类的网页
3.5 注意事项 以及测试
注意您的项目部署的时候,重命名为 Helloworldweb,那么网址也就是这样了
打开如下
http://localhost:8080/Helloworldweb/1.jpg
http://localhost:8080/Helloworldweb/aa.html
3.6重新部署
4.IDEA 中使用 servlet-api 和 jsp-api,
在学习网络抓包的过程中,我们需要和服务器进行交互,那么就需要使用到 servlet 和 jsp 。
参见 baidu 关于 servlet 的说明:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
那么如何在IDEA中将 servlet 和 jsp 库导入呢?实际上tomcat中的lib 目录下,已经提供了这两个jar包了,我们要学习的就是如何在IDEA中导入这两包
在右上角的 项目结构中,
只要把tomcat 的lib添加进去,对应的servlet 和 jsp 就也会想用的添加进去
5.那么添加这个有啥用呢?主要是使用servlet 的交互功能
这是因为我要学习的是网络协议相关的内容,一定要让 客户端 和 服务器有 交互,不然怎么知道 客户端发的啥?服务器回复的啥?那学习个寂寞。
6. 在IDEA中实现一个网页,该网页会有username 和 password,还有一个提交 按钮,点击后和服务器实现交互功能
我们在web 下新建一个html 文件夹,在这个文件夹下新建一个 login.html
根据前面的知识,我们部署后,访问该 html的路径为:
http://localhost:8080/Helloworldweb/html/login.html
Helloworldweb 为我们给该项目起的名字
那么我们在里面写了一个form ,其action 的意思是,点击了submit后,应该将 username 和password 转到哪一个界面进行处理。
可以看到,刚开始我们写了一行 action="http://127.0.0.1:8080/HelloWorldweb/login"
意思是会指向 http://127.0.0.1:8080/HelloWorldweb 这个项目下的login网址。
后面又注释了,写成了 action="/HelloWorldweb/login", 实际上这两行的意思是一样的。
<!--<form action="http://127.0.0.1:8080/HelloWorldweb/login" method="get">--> <form action="/HelloWorldweb/login" method="get"><div>用户名 <input name="username"></div><div>密码 <input name="password"></div><button type="submit"> 登陆 </button></form>
那么问题是这个login 具体是指向哪里呢?
这个login 实际上是我们新建一个 java 类,这个java 类的地址,这个类有些特殊,1.继承 HttpServlet类,2.使用@WebServlet 注解
我们当前的注解 @WebServlet("/login") 后面跟的是 "/login",表示的就是当前java 类的访问路径就是 http://127.0.0.1:8080/HelloWorldweb/login ,,如果我们省略 ip+port 就是 /HelloWorldweb/login
/*** servlet要处理http请求,有两步需要实现* 1.继承 HttpServlet类* 2.使用@WebServlet 注解,我们这个项目原本的访问路径为 http://127.0.0.1:8080/HelloWorldweb* 我们在 @WebServlet 注解 后面加上"/login" 说明 如果要访问当前的 LoginServlet.java, 访问路径 http://127.0.0.1:8080/HelloWorldweb/login* 那么可以直接在浏览器 中 输入 http://127.0.0.1:8080/HelloWorldweb/login 访问吗?* 答案是可以的,只是什么都没有。那么这个还有啥用?* 我们新建的 web下的html 文件夹下的 login.html 中的 from的action 指向 http://127.0.0.1:8080/HelloWorldweb/login* 也可以直接写成 HelloWorldweb/login*/
package com.hunandede.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** servlet要处理http请求,有两步需要实现* 1.继承 HttpServlet类* 2.使用@WebServlet 注解,我们这个项目原本的访问路径为 http://127.0.0.1:8080/HelloWorldweb* 我们在 @WebServlet 注解 后面加上"/login" 说明 如果要访问当前的 LoginServlet.java, 访问路径 http://127.0.0.1:8080/HelloWorldweb/login* 那么可以直接在浏览器 中 输入 http://127.0.0.1:8080/HelloWorldweb/login 访问吗?* 答案是可以的,只是什么都没有。那么这个还有啥用?* 我们新建的 web下的html 文件夹下的 login.html 中的 from的action 指向 http://127.0.0.1:8080/HelloWorldweb/login* 也可以直接写成 HelloWorldweb/login*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("doget");doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("dopost");String username = request.getParameter("username");String password = request.getParameter("password");System.out.println("accept value = " + username + "_" + password);if(username.equals("123") && password.equals("456")){//登陆成功response.getWriter().write("username = 123, password = 456, means login success");}else{//登陆失败response.getWriter().write("username != 123, or password != 456, means login fail");}}
}
重新部署
运行结果:
成功
网络抓包
浏览器(chrome firefox),fiddler,wireshark
模拟工具
作用是模拟交换机,路由器,计算机,一个或者多个,因为不可能真的去买个交换机,路由器吧
Xshell ,Packet Tracer,GNS3