JavaWeb 之 Tomcat

Tomcat

Tomcat是一个实现了JAVA EE标准的最小的WEB服务器,是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且开源免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。学习JavaWeb开发一般都使用Tomcat服务器,该服务器支持全部JSP以及Servlet规范。

Tomcat目录下的文件夹

bin:可执行文件(打开关闭服务器的文件)
conf:服务器的配置信息
lib:服务器依赖的 jar 包
logs:服务器日志
temp:产生的临时文件
work:服务器自己的工作空间
webapps:默认存放工程(应用程序)的文件夹
wtpwebapps:跟 eclipse 关联后产生的存放工程的文件夹

启动 测试 Tomcat服务器

从控制台启动 Tomcat 服务器命令:
先到 Tomact 服务器下的 bin 文件夹
sudo chmod 755 *.sh         获取文件夹权限(例如:读写)
sudo sh ./startup.sh        执行打开服务器
sudo sh ./shutdown.sh       关闭服务器

访问服务器网址(url)
http://localhost:8080
协议://本地地址:端口号/项目名(应用程序名)/访问的资源
http://localhost:8080/web/test.html

servlet 小服务程序
是个 java 类,是一个接口
注意:在浏览器上访问的每一个网页都是 servlet
每个 servlet 都需要配置一个网址,在 web.xml 中配置

Servlet

1.用户用网址访问服务器(Tomcat)
2.服务器通过网址可以找到对应项目的 web.xml 文件
3.通过网址找到对应 servlet-name
4.通过 servlet-name 找到对应的 servlet 类
5.创建 servlet 对象
6.执行生命周期方法
实例化 -> 初始化 -> service 服务-> 销毁
创建
方式一

public class Demo01 implements Servlet{
    // 生命周期方法以下4个
    // 实例化方法(无参构造方法)
    public Demo01() {
        System.out.println("实例化方法");
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        System.out.println("初始化方法 init");
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        // servlet 只创建了一个多次访问实际上就是多次调用服务的方法 service
        System.out.println("服务方法 service");
    }

    @Override
    public void destroy() {
        // 1.删除该应用程序调用
        // 2.停止服务器
        System.out.println("销毁方法 destroy");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }
}
方式二 (适配器模式)

使用哪个方法就重写哪个方法,用不上的方法,可以不重写
@SuppressWarnings("serial")
public class Demo02 extends GenericServlet{
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

    }
}
方式三 (模板设计模式)
public class Demo03 extends HttpServlet{
// 声明一个ServletConfig对象 当做成员变量
    private ServletConfig config;
    // 初始化方法(通过该方法的参数 获取ServletConfig对象)
    // ServletConfig 对象保存的是 servlet 中的配置文件
    @Override
    public void init(ServletConfig config) throws ServletException {
        // TODO Auto-generated method stub
        super.init(config);
        // 接受一下 ServletConfig
        this.config = config;

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 调用父类的doGet 怎么都会报错
        // 不是400 就是 405
        // 重写完doget方法注意不要调用父类的doget方法
        // super.doGet(req, resp);

        // 获取servlet的配置信息
        // 参数时 配置时的 name(相当于key)
        // 用key获取对应的value
        String value = this.config.getInitParameter("encoding");
        System.out.println(value);

    }
    // 接受post请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}


获取 ServletConfig 方式二
public class Demo04 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过父类中的方法,获取 ServletConfig 对象
        ServletConfig config = this.getServletConfig();
        String parameter = config.getInitParameter("encoding");
        System.out.println(parameter);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

域对象


/*
 * 域对象(在一定范围内,存储信息的对象)
 * ServletContext 范围:整个程序中都可以访问到,并且只有1个 单例对象
 * 每个 servlet 都可以访问到这个域对象
 * 
 * 如何获取 ServletContext 对象?
 * 方式一:从 ServletConfig 对象中获取
 * 方式二:从父类中直接获取
 * 
 * 注意:所有的域对象,都有设置/获取/删除的方法
 */
public class Demo05 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 从 ServletConfig 对象中获取
        ServletContext application = this.getServletConfig().getServletContext();
        // 添加一个数据到 context 域中
        // 相当于添加一个键值对 key 和 value
        application.setAttribute("username", "test");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

public class Demo06 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取域对象
        Object object = this.getServletContext().getAttribute("username");
        System.out.println(object);

        // 设置和获取全局配置信息
        // 通过 getServletContext() 获取资源真实路径
    }
}

Servlet的配置


<?xml version="1.0" encoding="UTF-8"?>
<!-- 下面是 xml 文件的头文件,限制了该 xml 文件所能书写的内容 -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <!-- 工程的名字 -->
  <display-name>Demo</display-name>
  <!-- 设置欢迎页面 -->
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- 创建一个 servlet 对象 -->
  <servlet>
    <!-- 设置 servlet 名字 -->
    <servlet-name>demo01</servlet-name>
    <!-- 设置该 servlet 使用的类,全限定类名 -->
    <servlet-class>com.Demo</servlet-class>
  </servlet>
  <!-- 给该 servlet 配置一个访问地址(映射地址) -->
  <servlet-mapping>
    <!-- 配置哪个 servlet 的映射地址 -->
    <servlet-name>demo01</servlet-name>
    <!-- 配置映射地址 -->
    <!-- 注意:这里的斜杠代表工程名后面的斜杠,必须加上! -->
    <url-pattern>/demo01</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>demo02</servlet-name>
    <servlet-class>com.Demo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo02</servlet-name>
    <!-- 配置访问路径通配符 -->
    <!-- *.action 只要是以.action 结尾的访问路径,都可以访问到 demo02 这个 servlet -->
    <!-- /* 项目目录下无论输入什么网址都可以访问到 demo02 -->
    <!-- 注意:上面两种方式不能连用 -->
    <url-pattern>/demo02</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>demo03</servlet-name>
    <servlet-class>com.Demo</servlet-class>
    <!-- 添加 servlet 的配置信息 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo03</servlet-name>
    <url-pattern>/demo03</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>demo04</servlet-name>
    <servlet-class>com.Demo</servlet-class>
    <!-- 添加 servlet 的配置信息 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo04</servlet-name>
    <url-pattern>/demo04</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>demo05</servlet-name>
    <servlet-class>com.Demo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo05</servlet-name>
    <url-pattern>/demo05</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>demo06</servlet-name>
    <servlet-class>com.Demo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo06</servlet-name>
    <url-pattern>/demo06</url-pattern>
  </servlet-mapping>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值