Javaweb
1、基础概念
1.1web开发:
- web
- 静态web
- html、css
- 动态web
- 技术栈:servlet/JSP、ASP、PHP
1.2web应用程序
web应用程序:可以提供浏览器访问的程序
-
URL
-
tomcat
1.3静态web
- 静态web缺点:
- Web页面无法动态更新
- 轮播图,点击特效:伪动态
- JavaScript
- 无法和数据库交互
- Web页面无法动态更新
1.4动态Web
可以与数据库交互:数据持久化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1qrTkK1n-1650442133241)(01 基础.assets/image-20220302125908749.png)]
缺点:
- 假如服务器的动态web资源出现错误,需要重新编写后台程序,重新发布
- 停机维护
2、web服务器
2.1技术
ASP:微软的
php:
- 开发速度快,功能强大,挂平台,代码简单
- 无法承载大访问量的情况(局限性)
JSP/Servlet:
B/S:浏览和服务器
C/S:客户端和服务器
- 基于Java
- 可以承载三高问题
2.2web服务器
IIS(微软)
Tomcat
面向百度编程
2.3Tomcat
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHwiluOt-1650442133243)(01 基础.assets/image-20220302132420348.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S0UVqI5p-1650442133244)(01 基础.assets/image-20220302132658775.png)]
可以配置端口号、主机的名称
tomcat默认端口号:8080
mysql:3306
http:80
https:443
默认主机名为:lacalhost->127.0.0.1
默认网站应用存放位置:webapps
面试题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RnhsksIj-1650442133244)(01 基础.assets/image-20220302134042192.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9LutLcU6-1650442133245)(01 基础.assets/image-20220302134057916.png)]
3.4 发布一个网站
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rwGA8Ip-1650442133247)(01 基础.assets/image-20220302135113942.png)]
4 HTTP
4.1、什么是HTTP
HTTP (超文本传输一个简单的请求-响应协议,它TCP之上。
HTTPS:安全的(443
4.2两个时代
- http1.0
- http/1.0:客户端可以与web服务器连接局,只能获得一个web资源,断开链接
- http2.0
- http/1.1:客户端可以与web服务器连接局,可以获得多个web资源
4.3http请求
- 客户端—发请求—服务器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PmAUrL1F-1650442133248)(01 基础.assets/image-20220302140739481.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3TmNQDnC-1650442133250)(01 基础.assets/image-20220302141022779.png)]
- 请求行
- get、post
- 消息头
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qcxUdJV-1650442133251)(01 基础.assets/image-20220302141454515.png)]
4.4http响应
- 服务器—响应—客户端
//百度:
Cache-Control:private //缓存控制
Connection:Keep-Alive //连接
Content-Encoding:gzip //编码
Content-Type:text/html //类型
-
响应体
Accept:告诉浏览器,它所支持的数据类型 Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 ISO8859-1 Accept-Language:告诉浏览器,它的语言环境 Cache-Control:缓存控制 Connection:告诉浏览器,请求完成是断开还是保持连接 HOST:主机..../. Refresh:告诉客户端,多久刷新一次; Location:让网页重新定位;
-
响应状态码
200:请求响应成功 200 3xx:请求重定向 重定向:你重新到我给你新位置去; 4xx:找不到资源 404 资源不存在; 5xx:服务器代码错误 500 502:网关错误
-
面试题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QG1JSLlc-1650442133252)(01 基础.assets/image-20220302142124447.png)]
5、Maven
5.2 配置
打开maven安装目录下的conf\settings.xml 添加如下信息
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
添加本地仓库路径:
<localRepository>E:\Environment\apache-maven-3.6.3\maven-repo</localRepository>
5.3 pom.xml的结构
5.4 web.xml中webapp版本问题
自动生成的webapp是2.6版本的,最新版的版本在tomcat中可以找到
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
5.5 maven其他
6、Servlet
6.1 HelloServlet
servlet接口sun公司提供了两个默认的实现类: httpServlet,genericServlet
- 构建一个普通的Maven项目,删掉里面的src目录,在这个项目里面建立Moudel(模块),这个空的工程就是Maven主工程;
- 在Maven父子工程中
- 父项目的pom.xml中自动生成
<!--读pom文件时,要去读modules下的子pom文件-->
<modules>
<module>HelloServlet</module>
</modules>
-
子类项目的pom.xml自动生成
<!--使子项目继承父项目的设置,避免导入重复依赖 eg:son extends parent--> <parent> <artifactId>javaweb-02-servlet</artifactId> <groupId>com.iandf</groupId> <version>1.0-SNAPSHOT</version> </parent>
-
编写一个Servlet程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6eNllxou-1650442133254)(01 基础.assets/image-20220324225842712.png)]
-
编写一个普通类,实现Servlet接口,这里我们直接继承HttpServlet(
HttpServlet实现了Servlet接口
)public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter();//获取响应流 //响应流输出信息 writer.print("hello servlet"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
-
编写servlet映射
我们编写的java程序需要被浏览器访问,而浏览器需要访问web服务器,所以我们需要在web服务器中部署servlet,给他一个访问的具体路径。所以我们在web.xml中注册servlet和servlet-mapping
<!--注册servlet--> <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.kuang.HelloServlet</servlet-class> </servlet> <!--每一个servlet对应一个映射--> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
-
配置tomcat
6.2 Servlet原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRPz7AkP-1650442133255)(01 基础.assets/image-20220324230616836.png)]
6.3 ServletContext
当web容器启动时,会创建一个servletContext对象,可以通过这个对象让servlet之间进行通信,代表当前的web应用
1. 共享数据
我们在一个Servlet中通过servlerContext对象保存(set)的数据,可以在另一个servlet通过servlerContext对象get到
public class SetServletContext extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String name = "狂神";
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
servletContext.setAttribute("username",name);
}
}
public class GetServletContext extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String username = (String) servletContext.getAttribute("username");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8")