JavaWeb技术主要包括服务器技术(后端),如
Tomcat,Servlet,JSP
等待,以及客户端技术(前端)如HTML,CSS,JavaScript
等等
Web服务器主要负责处理客户端发出的HTTP请求,并做出相应回应
服务器软件是部署在服务器中的程序,主要有以下几种,我们主要学习Tomcat的使用
Tomcat是一个免费开源的Java Servlet(Server Applet,服务程序)容器,主要用于部署和运行基于Java的Web应用程序,是由Apache基金组织成立,属于轻量级服务器.
Servlet
,并提供Socket
与Request
和Response
相关的转化;Container
是Tomcat
处理Servlet
的核心部件,其包括Engine(引擎),Host(主机),Context(上下文),Wrapper(包装器)
Tomcat
中只有一个Server
; 一个Server
中可以包含多个Service
; 一个Service
只能包含一个Container
但可以包含多个Connector
因为一个服务可以有多个连接;示意图如下:
多个Connector
和一个Container
就可以构成一个Sevrice
,有了Service
就可以对外提供,但还需一个运行环境,Server
提供了一个运行环境,其关系可以在Tomcat
的conf
目录下的sever.xml
配置文件中查看
由上诉内容可知,一个请求发送给
Tomcat
时,会经过Service,
然后转交到我们的Connector
Connector
用于接收请求并将请求封装成Request
和Response
来具体处理,Request
和Response
封装完之后再交由Container
进行处理,Container
处理完请求之后再返回给Connector
,最后Connector
通过Socket
将处理的结果放回给客户端Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上数据库和应用程序的中间层,其本质上是用java语言编写的一个接口
下图展示了Servlet在Web应用程序中的位置:
*Servlet
的生命周期可以理解为从创建到被销毁的过程*
init()
方法service()
方法来处理客户端请求destroy()
方法现在我们开始详细讲解Servlet的生命周期方法
init()
方法被设计成只能调用一次.它在第一次创建Servlet时被调用,在后续每次用户请求时不再调用.因此其是用于一次性初始
Servlet
创建于用户第一次调用对应于该Servlet
的URL时,但也可以指定Servlet
在服务器第一次启动时被加载Servlet
时,就会创建一个Servlet
实例,每一个用户请求都会产生一个新的线程.init()
方法只要用途是简单第创建或加载一些数据,这些数据被用户Servlet的整个周期init()方法的定义如下:
public void init(ServletConfig servletConfig) throws ServletException {
//初始化代码
}
service()方法是执行实际任务的主要方法.
(GET,POST,PUT,DELETE)
并在适当时候调用doGet.doPost.doPut.doDelete
等方法下面是其方法代码
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
service()方法由容器调用,service方法在适当的时候调用doGet.doPost.doPut.doDelete
,因此你不用对service()方法进行任何操作,你只需根据用户不同请求类型来重写doGet()
或doPost()
方法即可
METHOD
的HTML
表单,它由doGet()方法进行处理public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
METHDO
为POST
的HTML
表单,它由doPost()
方法处理public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
destory()
方法和init()
方法一样也只能调用一次,在Servlet生命周期结束时被调用destroy()
方法之后,servlet
对象就被标记为垃圾回收destory()方法定义如下:
public void destroy() {
// 终止化代码...
}
<web-app>
:web.xml
的根元素,用于声明XML的版本.编码格式以及Web应用的模式文件(XSD)的位置
<servlet>
和<servlet-mapping>
<servlet>
用于定义一个Servlet的类信息,包括它的名称和实现类
<servlet-name>
:设置Servlet
实例的名字<servlet-class>
:配置类的路径,创建之前要确保有相对应的类<servlet-mapping>
:用于指定一个或多个URL模式于前面定义的Servlet
之间的映射
<servlet-name>
:用于绑定servlet
标签名字需和<servlet>
标签下的<servlet-name>
一致<url-patter>
:配置请求路径,客户端按该路径请求,可触发对应的Servlet
实例中的servlet
方法<load-on-startup>
:第一次访问时创建Servlet对象,将中间的值设为负数
<load-on-startup>
:服务器启动后创建,将中间值设为大于大于0的数
<?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">
<servlet>
<servlet-name>servlet01</servlet-name>
<servlet-class>com.mashang.web.MyServlet01</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>servlet01</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
</web-app>
使用注解可以避免在
web.xml
文件中进行显性配置,从而减少配置文件的复杂性和提高开发效率
value
或urlPatterns
:指定一个或多个URL模式,用于匹配HTTP请求并将其分发给Servletname
:为Servlet
配置一个名称loadOnStartup
:指定Servlet
在服务器启动时是否加载以及加载顺序asyncSupported
:指示Servlet是否支持异步处理initParams
:初始化参数列表urlPatterns
配置方法:配置多种属性时要写上其属性名
@WebServlet({"/demo1","/demo2",...})//配置多个请求路径对应一个Servlet
@WebServlet("/user/demo1")//配置多级路径
@WebServlet("/user/*")//匹配以user开头形式的请求
@WebServlet("/*")//匹配所有的请求
@WebServlet("/*.do")//匹配do结尾的请求
HttpServlet
是Servlet
的一个实现类,是一个抽象类.其在源有的Servlet
接口上添加了一些关于Http
协议的处理方法,其功能比Servle
t功能强大,在实际开发中,实现接口服务通常会继承这个类,而避免直接继承Servlet
类
GET请求是一种
HTTP
方法,用于从服务器请求资源.当客户端(通常是指浏览器),向服务器发起请求时,它是在请求特定的资源
?
号分隔URL和参数&
分隔https://example.com/resource?param1=value1¶m2=value2
和GET请求一致的是POST请求也是一个
HTTP
方法,用于向服务器发送数据.当客户端(浏览器)使用POST方法向服务器发送请求时,它是在提交数据交给服务器进行处理
POST的请求体
安全性
POST限制
POST一般使用场景
doGet()
方法是HttpServlet
类中的一个方法
doGet()
方法是专门用于处理HTTP GET请求的方法
doPost()
方法是HttpServlet
类中的一个方法
doPost()
方法是专门处理HTTP POST请求的方法@WebServlet("/login")
public class MyHttpServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行GET请求业务逻辑");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行POST请求业务逻辑");
}
}
MyHttpServlet01
类是HttpServlet
的继承类,重写了其中的doGet()
和doPost()
方法,我们在Postman软件可以分别去测试其GET请求和POST请求