【JavaWeb】JavaWeb从入门到实战(4)
前言:
本文内容:HelloServlet、Servlet原理
推荐免费JavaWeb入门到实战视频:【狂神说Java】JavaWeb入门到实战_哔哩哔哩_bilibili
HelloServlet
JavaServlet简介
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
- Servlet是Sun公司开发的动态web技术
- Sun在这些API中提供一个接口:Servlet,如果想开发Servelt程序,只需要完成以下步骤:
- 编写一个类,实现Servlet接口
- 把开发好的Java类部署到web服务器中
- 把实现了Servlet接口的Java程序叫做Servlet
创建Servlet
-
创建一个普通的Maven项目,删掉里面的src目录,我们在其中就创建Moudel
-
关于Maven父子工程的关系:
父项目中会有
1
2
3<modules>
<mouble>servlet-01</mouble>
</modules>子项目中会有
1
2
3
4
5<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.jokerdig</groupId>
<version>1.0-SNAPSHOT</version>
</parent>父项目中的java子项目可以直接使用
1
son extends father
最新的web.xml头文件
1
2
3
4
5
6
7
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> -
Maven环境优化
- 修改web.xml为最新
- 将Maven的结构完善
-
编写一个Servlet程序
-
编写一个普通类
-
实现Servlet接口(继承HttpServlet,还有另一个GenericServlet,它俩实现了Servlet接口)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29package com.jokerdig.servelt;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @author Joker大雄
* @data 2022/3/28 - 14:02
**/
public class HelloServlet extends HttpServlet {
// 由于get和post只是请求实现的方式不同,可以互相调用,业务逻辑一样
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer = resp.getWriter();// 响应流
writer.print("Hello Servlet");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
-
-
编写Servlet的映射
为什么需要映射:我们写Java程序,但需要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要再web服务中注册我们写的Servlet,还需要一个浏览器可以访问的路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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">
<!-- 注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.jokerdig.servlet.HelloServlet</servlet-class>
</servlet>
<!-- Servlet映射-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app> -
配置Tomcat
-
启动测试
博主遇到的问题:
遇到pom.xml已经配置了对应的包,但是调用后运行项目仍然报错找不到包
这是新版(博主使用2020版)IDEA会出现的问题,因为Maven配置包版本不匹配2022/7/30更新:别用IDEA2020.1的版本,否则你会变得不幸(该版本Bug超多)
解决办法:
别用IDEA2020.1的版本,就不会遇到该问题
Servlet原理
Servlet是由Web服务器调用,Web服务器收到浏览器请求
Mapping问题
一个Servlet可以指定一个映射路径
1 | <!-- Servlet映射--> |
一个Servlet可以指定多个映射路径
1 | <!-- Servlet映射--> |
一个Servlet可以指定通用映射路径
1 | <servlet-mapping> |
默认请求路径
1 | <servlet-mapping> |
优先级问题
制定了固有的映射路径,优先级最高,找不到在去默认路径