一、介绍
是Apache组织的一个开源免费的容器,用来管理Web项目。
二、下载安装
三、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
package controller;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;import java.io.IOException;public class helloController extends HttpServlet {public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8"); // 设置字符集PrintWriter out = response.getWriter();out.write("HTML标签");.......out.flush();}}
6.填写配置文件(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"><servlet><servlet-name>helloController</servlet-name><servlet-class>controller.helloController</servlet-class></servlet><servlet-mapping><servlet-name>helloController</servlet-name><url-pattern>/test</url-pattern></servlet-mapping></web-app>
五、Servlet管理机制
引申:
package controller;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;import java.io.IOException;public class TestController extends HttpServlet {private int count = 1;public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {System.out.println("我被点击了" + count++ + "次");}}
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>test</title></head><body><a href="test">点我访问</a></body></html>
效果展示:
我被点击了1次我被点击了2次我被点击了3次
通过以上示例反应出,浏览器访问资源,点击的时候会发送一个新的请求,但是count属性是唯一的,没有创建新的,说明对象是唯一的,由此得出,Servlet的管理机制属于单例模式(对象唯一),以生命周期形式展示。
Servlet生命周期 init(); service(); destory();
Servlet对象在创建的时候采用了延迟加载的方式,但是在Tomcat启动的时候,会读取web.xml文件
若想将延迟加载转变为立即加载:
在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"><servlet><servlet-name>helloController</servlet-name><servlet-class>controller.helloController</servlet-class><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>helloController</servlet-name><url-pattern>/test</url-pattern></servlet-mapping></web-app>
当对象需要立即加载时,可以携带一些信息(因为对象需要立即加载,说明该对象对整个项目很重要),通过配置信息(web.xml)携带,由控制层获取
package controller;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;import java.io.IOException;public class TestController extends HttpServlet {public void init(ServletConfig config){// 1.获取单个keyString result = config.getInitParameter("key");System.out.println(result);// 2.获取多个keyEnumeration<String> initParameterNames = config.getInitParameterNames();while(initParameterNames.hasMoreElements()){String key = initParameterNames.nextElement();String value = config.getInitParameter(key);System.out.println(key + "----" + value);}// 3.获取上下文对象ServletContext servletContext = config.getServletContext();// 4.获取当前Servlet类名String servletName = config.getServletName();}}
<?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>TestController</servlet-name><servlet-class>controller.TestController</servlet-class><init-param><param-name>key</param-name><param-value>value</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>TestController</servlet-name><url-pattern>/test</url-pattern></servlet-mapping></web-app>
Servlet类的继承关系
自己的写的类继承了HttpServlet抽象类
HttpServlet继承了GenericServlet抽象类
GenericServlet实现了Servlet, ServletConfig, Serializable接口
