Tomcat和Servlet
01 Web服务器介绍
-
1.服务器:安装了服务器软件的计算机。
-
2.服务器软件:接收用户的请求,处理请求,做出响应
-
3.在web服务器软件中,可以部署web项目,让用户浏览器来访问这些项目。
02 Web服务器软件介绍
常见的java相关的web服务器软件有以下几个
-
1.weblogic:oracle公司,大型的javaEE服务器,支持所有的JavaEE规范,收费的。
-
2.websphere:IBM公司,大型的javaEE服务器,支持所有的ovaTE规范,收费的。
-
3.JBOSS:JBOSS公司,大型的javaEE服务器,支持所有的JavaIL规范,收费的。
-
4.Tomcat:Apache基金组织,中小型的javaEE服务器,开源的,免费的。
03 Tomcat
-
1.启动:双击bin目录下的startup.bat;或通过浏览器输入 http://localhost:8080 访问,如果打开以下页面代表产成功。
-
( http://localhost:8080是本地电脑的服务器域名,127.0.0.1就是通常说的ip地址,通过127.0.0.1也可以正常访问,在C:\Windows\System32\Drivers\etc下的hosts文件中,做了映射,让localhost指向了127.0.0.1,所以端口号8080是可以修改的)
-
Tomcat启动可能出现的问题:
-
1.黑窗口一闪而过:正确配置JAVA_HOME环境变量。
-
2.启动报错,端口被占用:关闭占用的8080端口的程序,或者到conf/server.xml里面修改端口号。
-
-
2.Tomcat的关闭:直接关闭窗口或者双击bin目录下的shutdown.bat
04 Servlet
-
概念:Tomcat里面配置资源的类
-
特点:可以通过(本地端口+Tomcat根目录+Servlet类设置的类)来访问
创建类实现Servlet接口
-
流程:创建类MyServlet01实现Servlet接口,重写5个方法。 一个Servlet实例就是一个功能,不同的功能我们可以创建不同的Servlet实现。
public class MyServlet01 implements Servlet { // 销毁:当Servlet实例被销毁时,自动调用的方法。 @Override public void destroy() { System.out.println("MyServlet01 destroy 销毁了"); } // 获取Servlet实例配置信息。 @Override public ServletConfig getServletConfig() { return null; } // 获取Servlet实例信息。 @Override public String getServletInfo() { return null; } // Servlet实例被创建时自动执行的方法。 @Override public void init(ServletConfig config) throws ServletException { System.out.println("MyServlet01 init 初始化了"); } // 服务:请求服务,匹配到当前Servlet实例执行的方法。 @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("MyServlet01 service"); } }
-
init(初始化)和service,都是比较常用的功能
配置web.xml
-
实现路径与Servlet实例的绑定。
-
当我们发起请求的时候,Tomcat根据请求路径找到对应的Servlet实例,然后调用里面的service方法
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Web</display-name> <!-- servlet标签:配置Servlet实例名字和实例创建类。 servlet-name标签:Servlet实例名字,自己取的。 servlet-class标签:创建实例的前提是要有对应的类,配置类的路径。 --> <servlet> <servlet-name>servlet01</servlet-name> <servlet-class>com.test.web.MyServlet01</servlet-class> </servlet> <!-- servlet-mapping标签:绑定对应的servlet标签、设置请求路径。 servlet-name标签:用于绑定servlet标签,找到名字一样的servlet,它们就是一对的。 url-pattern标签:配置请求路径,客户端就按这个路径请求,触发对应的Servlet实例中的service 方法。 --> <servlet-mapping> <servlet-name>servlet01</servlet-name> <url-pattern>/a</url-pattern> </servlet-mapping> </web-app>
测试
-
浏览器访问 http://localhost:8080/web/a。 如果在tomcat控制台打印了【MyServlet01 service】代表成功
解析执行过程
-
1.当服务器接收到客户端浏览器的请求后,会解析URL路径,获取访问的servlet的资源路径。
-
2.查找web.xml文件,判断是否有对应的标签体内容。
-
3.如果有,则再找对应的类名。
-
4.Tomcat会将字节码文件加进内存,并且创建对应的对象。
-
5.调用对象方法
Servlet生命周期
-
1.创建:调用init,只执行一次 默认情况下,第一次被访问的时候,servlet被创建。 也可以配置执行servlet的创建时机,在内配置。 第一次被访问时创建: 的值为负数。 在服务器启动后创建: 的值为正数或者0。 init只执行一次,说明servlet是一个单例对象。
-
2.提供服务:执行service方法,执行多次 每次访问servlet时,service都会执行一次。
-
3.销毁:执行destroy方法,只执行一次 服务正常关闭时,才会执行destroy方法。 destroy在servlet销毁之前执行,用于释放资源
Servlet注解
-
使用web.xml配置文件实现路径绑定Servlet实例是一种方式,还有一种方式就是使用注解实现。 格式:@WebServlet(value = “资源路径”),类内部实现方法无须重写
// @WebServlet(value = "/b") // 客户端请求/b路径就会执行MyServlet里面的service方法。 // @WebServlet("/b") // 当我们只有一个值并且是赋值给value属性的时候,value = 可以省略不 写。即只有一个值的时候默认是赋值给value属性。 @WebServlet(value = "/b", name = "myservlet") // 当注解有多个属性的时候,键值必须写全, 不能省略。 public class MyServlet implements Servlet { System.out.println("MyServlet success"); }
urlPatterns配置(注解配置)
@WebServlet({"/demo1", "/demo2", ...}) // 配置多个请求路径对应一个Servlet @WebServlet("/user/demo1") // 多级路径 @WebServlet("/user/*") // 匹配以user开头形式的请求 @WebServlet("/*") // 匹配所有的请求 @WebServlet("/*.do") // 匹配.do结尾的请求
HttpServlet
-
HttpServlet是Servlet接口的一个实现类,是一个抽象类。它在原有 Servlet 接口上添加了一些与 HTTP协议处理方法,它比 Servlet 接口的功能更为强大。因此我们实现接口服务通常会继承(extends)这个类,而避免直接去实现Servlet接口。
-
创建类继承HttpServlet,重写doGet方法。浏览器访问对应的路径,指定对应HttpServlet的doGet方法。
05 GET请求与POST请求
GET请求
-
1.GET 请求有长度限制。
-
2.GET一般用于请求数据。
-
3.GET请求参数是直接放在url上,使用?号拼接,多个参数使用&符号隔开,如:http://xxx.xxx.xx.xx/a/b?name=张三&age=18
POST请求
-
1.POST 请求对数据长度没有要求。
-
2.POST请求一般用来做数据添加、修改或删除。
-
3.POST请求参数是放在请求体中
区别
-
1.post比get安全 ,因为post参数在请求体中。get参数在url上面。
-
2.get传输速度比post快 根据传参决定的。(post通过请求体传参,后台通过数据流接收。速度稍微慢一些。而get通过url传参可以直接获取)。
-
3.post一般用于修改服务器上的资源,传输文件大理论没有限制; get一般用于信息获取,使用 URL传递参数,有大小限制
06 postman软件
-
postman和tomcat、servlet没有任何关系,是一个测试工具