前言
学习完Java基础之后开始学习JavaWeb,自己做一些笔记顺便就发在博客上,由于本人不是专业写这个的,可能会很烂,希望阅读到此文章的读者包含。如果有错误希望评论指正。文章会很长,其中包含我进行练习时候的源码,所以准备了目录方便继续阅读。
本人也在学习当中,会根据我的学习进度一直更新。通过B站UP主:遇见狂神说 学习
设备: Macbook Pro(M1)
软件: IntelliJ IDEA 2021.2.3(已激活)
- 1、概念
- 1.1 静态web
- 1.2 动态web
- 2、web服务器
- 2.1 技术
- 2.2 web服务器
- 3、Tomcat
- 3.1 文件类型
- 3.2 启动
- 3.3 配置
- 3.4 发布一个web网站
- 3.5 关闭
- 4、HTTP
- 4.1 概念
- 4.2 Http请求
- 4.2.1 请求行
- 4.2.2 消息头
- 4.3 Http响应
- 4.3.1 响应体
- 4.3.2 响应状态码
- 5、Maven
- 5.1 Maven项目架构管理工具
- 5.2 配置环境变量
- 5.3 pom文件
- 6、Servlet
- 6.1 什么是Servlet
- 6.2 测试Servlet
- 6.2.1 创建一个普通Maven项目
- 6.2.2 Maven父子工程
- 6.2.3 Maven环境优化
- 6.2.4 编写一个Servlet
- 6.2.5 编写Servlet的映射
- 6.2.6 配置Tomcat
- 6.2.7 启动测试
- 6.3 Servlet原理
- 6.4 Mapping
- 6.5 ServletContext
-
缺点
- Web无法动态更新
- 无法与数据库交互
-
缺点
- 加入服务器动态web出现错误需要重新编写后台程序重新发布,需要停机维护
-
优点
- 可以动态更新
- 可以与数据库交互(数据持久化:注册)
ASP
- 微软
- HTML嵌入VB脚本,ASP+COM
- 在ASP开发中,及本页面有几千行代码,页面混乱,维护成本高
- 使用C#语言
PHP
- 开发速度快,功能强大,跨平台,代码简单
- 缺点:无法承载大访问量
JSP/Servlet
- sun公司主推的B/S1架构
- 基于Java(大公司或者开源组件使用Java)
- 可以承载三高问题带来的影响
- 语法像ASP
Tomcat
免费软件,支持Servlet和JSP规范。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下使用,开发和调试JSP程序首选。
最新版本为10.0.
3、Tomcat 3.1 文件类型 3.2 启动启动终端进入文件夹 cd /Users/jingjiu/apache/apache-tomcat-9.0.54/bin
获取权限chmod +x *.sh
打开文件 ./startup.sh
访问测试:http://localhost:8080/
3.3 配置可以配置启动端口号
核心配置文件:server.xml
- Tomcat默认端口号:8080
- mysql:3306
- http:80
- https:443
可以配置主机名称
3.4 发布一个web网站将网站放到服务器(Tomcat)指定的应用文件夹(webapps)
3.5 关闭关闭 ./shutdown.sh
4、HTTP 4.1 概念- HTTP(超文本传输协议),通常运行于TCP之上
- 1.0:获得一个web资源,断开连接
- 1.1:获得多个web资源
- 客户端—发请求(Request)—服务器
百度:
Request URL: https://www.baidu.com/ //请求地址 Request Method: GET //get方法/post方法 Status Code: 200 OK //状态码 Remote Address: 220.181.38.150:443 //远程地址 Referrer Policy: strict-origin-when-cross-origin//协议4.2.1 请求行
- 请求行的请求方式:GET
- 请求方式:GET,POST,HEAD,DELETE,PUT…
- GET:请求携带的参数较少,大小有限制,会在浏览器的URL的地址栏显示数据内容,不安全,高效
- post:请求携带的参数没有限制,大小没有限制,不会在浏览器的URL的地址栏显示数据内容,安全,不高效
Accept: //告诉浏览器支持的数据类型 Accept-Encoding: //支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1 Accept-Language://语言环境 Cache-Control: //缓存控制 Connection: //请求完成是断开还是保持连接 HOST: //主机4.3 Http响应
- 服务器—响应(Response)—客户端
Cache-Control: private //缓存控制 Connection: keep-alive //连接:保持状态 Content-Encoding: gzip //编码 Content-Type: text/html;charset=utf-8 //类型4.3.1 响应体
Accept: //告诉浏览器支持的数据类型 Accept-Encoding: //支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1 Accept-Language://语言环境 Cache-Control: //缓存控制 Connection: //请求完成是断开还是保持连接 HOST: //主机 Refresh: //告诉客户端,多久刷新一次 Location: //让网页重新定位4.3.2 响应状态码
- 200:请求响应成功
- 3xx:请求重定向2
- 4xx:找不到资源 404
- 5xx:服务器代码错误 500 5023
用于方便导入配置jar包
核心思想:约定大于配置
规定如何编写Java代码
5.2 配置环境变量Mac(M1)配置Maven
5.3 pom文件- Maven核心配置文件
-
开发动态web的一门技术
-
是Sun在API中提供的接口。开发一个Servlet程序需要完成2步
- 写一个类实现Servlet接口
- 把开发好的Java类部署到web服务器中
删除src目录,在这个项目里建立新的Moudel。空的工程就是Maven主工程,把依赖全部导入
6.2.2 Maven父子工程javax.servlet javax.servlet-api 4.0.1 javax.servlet.jsp javax.servlet.jsp-api 2.3.3
父项目中会增加
servlet-01
子项目中会增加
javaweb-02-servlet com.jing 1.0-SNAPSHOT
父项目中的java子项目可以直接使用
son extends father
6.2.3 Maven环境优化- 修改web.xml为最新
- 将Maven结构搭建完整
- 编写一个普通类
- 实现Servlet接口,直接继承HttpServlet
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter pw = resp.getWriter();
pw.println("Hello Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
6.2.5 编写Servlet的映射
因为写的java程序,但是需要通过浏览器访问,而浏览器需要连接web服务器,所以需要在web服务中注册写的Servlet,给一个浏览器能够访问的路径
6.2.6 配置TomcatArchetype Created Web Application hello com.jing.servlet.HelloServlet hello /hello
浏览器—发送http请求—>web容器-----首次访问---->Servlet
Request<-----web容器----->Response---->Servlet
Servlet---->service方法
Request会从service(请求)拿到请求,把请求之后的响应交给Response
- 实现类重写Servlet的方法
- 接收并处理请求
- 给出响应的信息
- 一个请求可以指定一个映射也可以指定多个映射路径
- url可以使用通配符(*)请求通用路径
- 默认路径
hello /*
- 可以自定义后缀实现映射(*前面不能加项目映射路径)
hello *.jing
- 可以写一个ErrorServlet404报错页面
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");//使用html,utf-8打开,可以识别汉字
PrintWriter pw = resp.getWriter();
pw.print("网址输错了笨蛋");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
6.5 ServletContext
web容器启动的时候,它会为每一个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用
- 共享数据
- 在一个Servlet里保存数据,在另一个Servlet中获取
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//this.getInitParameter();//初始化参数
//this.getServletConfig();//Servlet配置
//this.getServletContext();//Servlet上下文
ServletContext sc = this.getServletContext();
String username = "jingjiu";//数据
sc.setAttribute("username",username);//将一个数据保存在 ServletContext中,名字username,值username
PrintWriter pw = resp.getWriter();
pw.print("Name has read!");
}
}
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext sc = this.getServletContext();
String username = (String) sc.getAttribute("username");
resp.getWriter().println("my name is" + username);
}
}
hello com.jing.servlet.HelloServlet hello /hello getc com.jing.servlet.GetServlet getc /getc
C/S:客户端和服务器,B/S:浏览器和服务器 ↩︎
重新转到新位置 ↩︎
网关错误 ↩︎



