一、介绍

是Apache组织的一个开源免费的容器,用来管理Web项目。

二、下载安装

官网:https://tomcat.apache.org/

三、Tomcat各文件夹的作用

bin Tomcat启动相关
conf 配置文件
lib jar包
logs 日志
temp 临时文件
webapps 存放部署的项目资源
work 存放解析JSP后形成的Java文件

四、Servlet(控制层)初识

1.控制层类的书写
1.定义一个类(修饰符protected、public,返回值void)
2.让这个类继承HttpServlet规则
3.重写service(doGet doPost)
4.方法内部的两个参数(HttpServletRequest HttpServletResponse)
5.异常:ServletException IOException

  1. package controller;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.ServletRequest;
  4. import javax.servlet.ServletResponse;
  5. import javax.servlet.http.HttpServlet;
  6. import java.io.IOException;
  7. public class helloController extends HttpServlet {
  8. public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
  9. response.setCharacterEncoding("UTF-8"); // 设置字符集
  10. PrintWriter out = response.getWriter();
  11. out.write("HTML标签");
  12. .......
  13. out.flush();
  14. }
  15. }

6.填写配置文件(web.xml) 请求名字<—->对应类名

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <servlet>
  7. <servlet-name>helloController</servlet-name>
  8. <servlet-class>controller.helloController</servlet-class>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>helloController</servlet-name>
  12. <url-pattern>/test</url-pattern>
  13. </servlet-mapping>
  14. </web-app>

五、Servlet管理机制

引申:

  1. package controller;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.ServletRequest;
  4. import javax.servlet.ServletResponse;
  5. import javax.servlet.http.HttpServlet;
  6. import java.io.IOException;
  7. public class TestController extends HttpServlet {
  8. private int count = 1;
  9. public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
  10. System.out.println("我被点击了" + count++ + "次");
  11. }
  12. }
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>test</title>
  6. </head>
  7. <body>
  8. <a href="test">点我访问</a>
  9. </body>
  10. </html>

效果展示:

  1. 我被点击了1
  2. 我被点击了2
  3. 我被点击了3

通过以上示例反应出,浏览器访问资源,点击的时候会发送一个新的请求,但是count属性是唯一的,没有创建新的,说明对象是唯一的,由此得出,Servlet的管理机制属于单例模式(对象唯一),以生命周期形式展示。
Servlet生命周期 init(); service(); destory();
Servlet对象在创建的时候采用了延迟加载的方式,但是在Tomcat启动的时候,会读取web.xml文件
若想将延迟加载转变为立即加载:
在web.xml配置0,示例如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <servlet>
  7. <servlet-name>helloController</servlet-name>
  8. <servlet-class>controller.helloController</servlet-class>
  9. <load-on-startup>0</load-on-startup>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>helloController</servlet-name>
  13. <url-pattern>/test</url-pattern>
  14. </servlet-mapping>
  15. </web-app>

当对象需要立即加载时,可以携带一些信息(因为对象需要立即加载,说明该对象对整个项目很重要),通过配置信息(web.xml)携带,由控制层获取

  1. package controller;
  2. import javax.servlet.ServletConfig;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.ServletRequest;
  5. import javax.servlet.ServletResponse;
  6. import javax.servlet.http.HttpServlet;
  7. import java.io.IOException;
  8. public class TestController extends HttpServlet {
  9. public void init(ServletConfig config){
  10. // 1.获取单个key
  11. String result = config.getInitParameter("key");
  12. System.out.println(result);
  13. // 2.获取多个key
  14. Enumeration<String> initParameterNames = config.getInitParameterNames();
  15. while(initParameterNames.hasMoreElements()){
  16. String key = initParameterNames.nextElement();
  17. String value = config.getInitParameter(key);
  18. System.out.println(key + "----" + value);
  19. }
  20. // 3.获取上下文对象
  21. ServletContext servletContext = config.getServletContext();
  22. // 4.获取当前Servlet类名
  23. String servletName = config.getServletName();
  24. }
  25. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <servlet>
  7. <servlet-name>TestController</servlet-name>
  8. <servlet-class>controller.TestController</servlet-class>
  9. <init-param>
  10. <param-name>key</param-name>
  11. <param-value>value</param-value>
  12. </init-param>
  13. <load-on-startup>0</load-on-startup>
  14. </servlet>
  15. <servlet-mapping>
  16. <servlet-name>TestController</servlet-name>
  17. <url-pattern>/test</url-pattern>
  18. </servlet-mapping>
  19. </web-app>

Servlet类的继承关系
自己的写的类继承了HttpServlet抽象类
HttpServlet继承了GenericServlet抽象类
GenericServlet实现了Servlet, ServletConfig, Serializable接口