JavaWeb
一. 基本概念
1.1 前言
-
技术栈 Servlet/JSP,ASP,PHP
-
java中动态web中开发统称为JavaWeb
-
web程序包括
- html、css、js
- jar
- jsp,servlet
- java程序
- 配置文件(.properties)
Web程序完成后需要给服务器统一管理后才能被外界访问
1.2 静态web
资源是死的
1.3 动态Web
与数据库连接,实现用户增删改查,
二. Web服务器
2. 主要实现
2.1 ASP:
- 微软、
- C#
- IIS
- JSP
2.2 php:
- 开发速度快,功能强大,跨平台
- 无法处理大批量访问量
2.3 JSP/Servlet
B/S:浏览/服务器
C/S:客户端/服务器
- sun公司推出
- 开源组件大多基于java
- 雨大和ASP相似
三. 服务器
被动处理用户请求、返回响应
3.1 IIS
微软自带
3.2 tomcat
轻量级应用服务器
3.3 补充
插入一个java内容
JRE中的核心在rt.jre(包含String.class等众多包)
四. Tomcat
通过ROOT文件中的index.jsp文件可以修改Tomcat默认访问页面
初始页面
修改后
修改配置文件可以改变访问端口号
修改后
改变系统配置文件hosts可以实现本机域名访问
4.1 默认端口号
Tomcat默认端口号:8080
mysql:3306
http:80
https:443
4.2 网站访问过程
- 输入域名
- 检查本机配置文件是否有域名映射
- yes 直接访问
- no 调用DNS查找(三次握手还是啥的,死去的操作系统又开始攻击我)
4.3 访问本地服务器
五. HTTP
4.1 什么是HTTP
//打电动去了 大晚上的学锤子学
超文本传输协议(Hyper Text Transfer Protocol)是一个简单的请求-响应协议,运行在TCP之上,指定客户端发送什么消息以及得到什么回复,请求和响应头以ASCII(二进制编码)形式给出
4.2 作用
规定www服务器与浏览器信息传递规范,二者共同遵守的协议
4.3 Http请求
Request URL: https://www.baidu.com/
Request Method: GET //get方法/post方法
Status Code: 200 OK //状态码
Remote Address: //远程地址(ip
Referrer Policy: strict-origin-when-cross-origin
请求行
- 请求方式 GET/POST
- GET 请求携带的参数少,大小有限制,URL栏会显示数据内容,安全性低,高效
- POST 请求携带的参数没限制,URL栏不显示数据内容,安全,低效
4.4Http响应
响应
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 04 Jan 2023 01:51:53 GMT
请求
Accept: text/html,application/xhtml+xml,application/xml;
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
HTTPS
超文本传输安全协定(英语:H yper T ext T ransfer P rotocol S ecure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种透过计算机网络进行安全通讯的传输协定。HTTPS经由HTTP进行通讯,但利用SSL/TLS来加密封包。HTTPS开发的主要目的,是提供对网站伺服器的身份认证,保护交换资料的私隐与完整性。这个协定由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。
响应状态码
200:请求成功
3xx:请求重定向
4xx:找不到资源
5xx:服务器代码错误
六. Maven
6.1 Maven项目架构管理工具
功能:自动导入和配置jar包
环境安装及配置
很奇怪,不知道什么时候配了
配置阿里云镜像
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
6.2 建立本地仓库
<localRepository>D:\jdk\apache-maven-3.8.6\maven-repo</localRepository>
6.3idea配置
这里要记得勾上,不然新建项目时还会默认idea自带的maven属性
新建maven项目
idea崩了o(╥﹏╥)o
受不了了!!!
创建成功长这样
要新建web项目的话需要打开项目结构
成功后可以看见生成web文件
这里可以将目录标记为源代码目录和测试目录
6.4 pom文件
数据库那会遇到的神秘文件,这回终于开始学了
<?xml version="1.0" encoding="UTF-8"?>
<!--版本头文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--配置的项目文件,项目组id,工件名称,版本-->
<groupId>org.example</groupId>
<artifactId>java_02_webapp</artifactId>
<version>1.0-SNAPSHOT</version>
<!--配置-->
<properties>
<!-- 编码版本 -->
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
maven导入jar包时可以自动添加此jar包所依赖的其他包
<dependencies>
<!-- maven可以自动导入导入的jar包所依赖的其他jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.0.3</version>
</dependency>
</dependencies>
6.5 解决moven导出资源失败方法
在build中配置resources
<!--在 build 中配置 resources,解决资源导出失败问题-->
<!--include 标签指定哪些文件将被匹配,以*作为通配符-->
<!--exclude 标签指定哪些文件将被忽略,以*作为通配符-->
<!--filtering 构建过程中是否对资源进行过滤,默认false-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
如果遇到maven中tomcat无法正确配置,可以将idea自动生成的web.xml文件
<?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">
</web-app>
改为和本地tomcat中的ROOT文件的配置
<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>
Maven本地仓库
项目初始没severlet文件时可以去tomcat中的lib中查看相关的jar包,然后上Maven仓库查找所需的jar包,可以选择直接下载jar包,也直接选择Maven的方式导入
<dependencies>
<!-- maven可以自动导入导入的jar包所依赖的其他jar-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<!-- <scope>provided</scope> //作用域(范围),这里保留idea会自动报错-->
</dependency>
</dependencies>
此时就可以在class文件中直接导入所需类
成功导入
修改web.xml遇到的问题
<web-app>
<filter-mapping>
<filter-name>CustomFilter</filter-name> // 错误:应定义 servlet-name 或 url-pattern 子标记
</filter-mapping>
<servlet-mapping>
<servlet-name>CustomServletName</servlet-name>
<url-pattern>/ baseUrl</url-pattern> // 错误:URI 模式不得包含空格
</servlet-mapping>
</web-app>
这里如果servlet不是自动生成的需要自己去工件中添加maven的lib包
再回到xml文件发现没爆红了
tomcat上复制的代码
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
对应的web.xml配置
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.yorha.servlet.HelloServlet</servlet-class>
</servlet>
<!-- 一个servlet对应一个映射 -->
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<!-- 请求路径 -->
<url-pattern>/yorha</url-pattern>
</servlet-mapping>
成功运行
测试输出乱码
神奇,我也乱码
解决办法,在class文件中加入
response.setCharacterEncoding("utf-8");
乱码解决
响应方式跟class文件对应
添加库
配置好moven依赖包后pom.xml文件会多出这个
七 . Servlet
这里super保留的话在url栏直接访问会报错
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
// super.doGet(req, resp);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
doGet(req, resp);
}
修改方法如上
7.1mapping
<servlet-mapping>
<servlet-name>hello</servlet-name>
//<url-pattern>/*</url-pattern>
//默认请求路径,会跳过index页面
//<url-pattern>*.do</url-pattern> 前面没/后缀可以直接修改
</servlet-mapping>
自定义404
简单的前端页面显示
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.print("<h1>404</h1>");
}
xml映射文件
<servlet>
<servlet-name>Errors</servlet-name>
<servlet-class>com.yorha.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Errors</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
就这样吧,太长看不过来,明天再赶servlet使用
下次再也不弄介么多图片辣!!!!!!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性