Java中Javaweb之TomCat配置和Servlet方法和ServletConfig方法

Tomcat

    先下载apache-tomcat-9.0.0.M26
    下载完后其中有几个文件夹

    Tomcat文件夹

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

创建Servlet的几种方式

创建Servlet的方式一

    从控制台启动Tomcat服务器命令
    先去往Tomcat服务器下的 bin文件夹
    cd (apache-tomcat-9.0.0.M26文件夹的目录)
    获取文件夹权限(读写)
    sudo chmod 775*.sh
    执行打开服务器
    sudo sh ./startup.sh
    执行关闭服务器
    sudo sh./shutdown.sh
    访问服务器网址(url)
    http://localhost:8080
    协议://本地地址:端口号/项目名(应用程序名)/访问的资源

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

    完成后在Eclipse上 实现Servlet接口
    public class Demo01 implements Servlet{

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

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("我是初始化方法init");
    }

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

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

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

}
    用户如何从浏览器访问到Servlet类?
    1.用户通过浏览器,使用网址访问服务器(Tomcat)
    2.服务器通过网址可以找到对应项目的web.xml文件
    3.通过网址找到对应Servletname
    4.通过Servletname找到对应的Servlet类
    5.创建Servlet对象
    6.执行生命周期几个方法
        实例化(无参构造方法) -> init初始化方法 -> service服务方法 -> 销毁destroy方法

配置web.xml文件

    <?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>SH-web-servlet-01</display-name>
  <!-- 设置欢迎页面 -->
  <welcome-file-list>
    <welcome-file>1.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.lanou3g.Demo01</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.lanou3g.Demo02</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo02</servlet-name>
    <!-- 配置访问路径通配符 -->
    <!-- *.action 只要是以.action 结尾的访问路径 都可以访问到demo02 这个Servlet -->
    <!-- /* 项目目录下 随便 输入网址 都能访问到 demo02 -->
    <!-- 注意:上面两种方式不能连用  /*.action -->
    <url-pattern>/demo02</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>demo03</servlet-name>
    <servlet-class>com.lanou3g.Demo03</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.lanou3g.Demo04</servlet-class>
    <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>/demo04</url-pattern>
  </servlet-mapping>
</web-app>

创建Servlet方式二

/*
 * 创建Servlet的方式二(适配器模式创建)
 * 使用哪个方法就重写哪个方法 
 * 用不上的方法可以不重写
 */
public class Demo02 extends GenericServlet{

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("我是demo02");
    }
}

创建Servlet方式三

    /*
 * Servlet创建方式三(模板设计模式)
 * 常用方式(必会)
 */
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 {
        doGet(req, resp);
    }
}

创建ServletConfig方式一

    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);

        // 获取ServletConfig方式一
        // 获取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 {
        doGet(req, resp);
    }
}

获取ServletConfig方式二

    public class Demo04 extends HttpServlet{

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(req, resp);
    }
}

域对象

ServletContext

   域对象(在一定范围内 存储信息的对象)
   ServletContext范围: 整个程序中都可以访问到 并且只有一个  单例对象
   每个Servlet都可以访问到整个域对象

   如何获取ServletContext对象
   方法1:从ServletConfig对象中获取
   方法2:从父类中直接获取
   注意: 所有的域对象 都有设置/获取/删除的方法
方式一

   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", "xiaoming");
    }
    @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);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值