98_JavaWeb_Servlet1

举报
alexsully 发表于 2021/07/19 16:32:27 2021/07/19
【摘要】 servlet, web.xml, mapping, servletconfig, servletcontext

Servlet
1 Servlet是JavaEE 规范之一,规范就是接口
2 Servlet就JavaWeb 三大组件之一,三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器
3 Servlet是运行在服务器上的一个java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端

实现 Servlet 程序
1 编写一个类去实现 Servlet 接口
2 实现 service 方法,处理请求,并响应数据
3 到 web.xml 中去配置 servlet 程序的访问地址


Servlet 的生命周期
第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。
1 执行 Servlet 构造器方法
2 执行 init 初始化方法
3 执行 service 方法 每次访问都会调用
4 执行 destroy 销毁方法 在 web 工程停止的时候

public class HelloServlet implements Servlet {

    public HelloServlet() {
        System.out.println("1 构造器方法");
    }

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

//        1、可以获取Servlet程序的别名servlet-name的值
        System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
//        2、获取初始化参数init-param
        System.out.println("初始化参数username的值是;" + servletConfig.getInitParameter("username"));
        System.out.println("初始化参数url的值是;" + servletConfig.getInitParameter("url"));
//        3、获取ServletContext对象
        System.out.println(servletConfig.getServletContext());
    }

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

    /**
     * service方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3 service === Hello Servlet 被访问了");
        // 类型转换(因为它有getMethod()方法)
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        // 获取请求的方式
        String method = httpServletRequest.getMethod();   //httpServletRequest是 ServletRequest 子类

        if ("GET".equals(method)) {
            doGet();
        } else if ("POST".equals(method)) {
           doPost();
        }

    }

    /**
     * 做get请求的操作
     */
    public void doGet(){
        System.out.println("get请求");
        System.out.println("get请求");
    }
    /**
     * 做post请求的操作
     */
    public void doPost(){
        System.out.println("post请求");
        System.out.println("post请求");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("4 . destroy销毁方法");
    }
}

IDEA生成

public class Servlet2Test1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("hello3doPost");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("hello3doGet");

    }
}

ServletConfig类

ServletConfig 类: Servlet程序的配置信息类。
Servlet程序和ServletConfig对象都是由Tomcat负责创建
Servlet程序默认是第一次访问的时候创建,ServletConfig 是每个Servlet程序创建时,就创建一个对应的ServletConfig对象

ServletConfig 类的三大作用
1 可以获取 Servlet程序的别名servlet-name 的值
2 获取初始化参数 init-param
3 获取 ServletContext对

@Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        // 方式1 config.getServletName() config.getInitParameter
        //   1、可以获取Servlet程序的别名servlet-name的值
        System.out.println("HelloServlet程序的别名是:" + config.getServletName());  //Servlet程序和ServletConfig对象都是由Tomcat负责创建
        //   2、获取初始化参数init-param
        System.out.println("初始化参数username的值是;"+config.getInitParameter("username"));
        System.out.println("初始化参数url的值是;" + config.getInitParameter("url"));

        //   3、获取ServletContext对象
        System.out.println(config.getServletContext());

       // 方式2  getServletConfig();
        ServletConfig servletConfig = getServletConfig();
        System.out.println("范式2初始化参数username的值是;" +  servletConfig.getInitParameter("username"));
    }

    <!-- servlet标签给Tomcat配置Servlet程序 -->
    <servlet>
        <!--servlet-name标签 Servlet程序起一个别名(一般是类名) -->
        <servlet-name>HelloServlet</servlet-name>
        <!--servlet-class是Servlet程序的全类名-->
        <servlet-class>com.alex.servlet.HelloServlet</servlet-class>
        <!--init-param是初始化参数-->
        <init-param>
            <!--是参数名-->
            <param-name>username</param-name>
            <!--是参数值-->
            <param-value>root</param-value>
        </init-param>
        <!--init-param是初始化参数-->
        <init-param>
            <!--是参数名-->
            <param-name>url</param-name>
            <!--是参数值-->
            <param-value>jdbc:mysql://localhost:3306/test</param-value>
        </init-param>

ServletContext 
1 ServletContext 是一个接口,它表示 Servlet 上下文对象
2 一个web工程,只有一个ServletContext对象实例
3 ServletContext对象是一个域对象 
4 ServletContext 是在web工程部署启动的时候创建, 在web工程停止的时候销毁。

域对象,是可以像 Map一样存取数据的对象,叫域对象 这里的域指的是存取数据的操作范围,整个 web 工程
                     存数据            取数据              删除数据
Map            put()                 get()                   remove()
域对象        setAttribute()   getAttribute()     removeAttribute();


ServletContext 类的四个作用
1 获取 web.xml 中配置的上下文参数 context-param
2 获取当前的工程路径,格式: /工程路径
3 获取工程部署后在服务器硬盘上的绝对路径
4 像 Map 一样存取数据

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 方式一 获取 context  getServletContext()
        // 获取ServletContext对象
        ServletContext context = getServletContext();
        System.out.println(context);
        System.out.println("保存之前: Context1 获取 key1的值是:"+ context.getAttribute("key1")); //读数据 
        context.setAttribute("key1", "value1");     //存数据
        System.out.println("Context1 中获取域数据key1的值是:"+ context.getAttribute("key1"));
    }


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 方式2 : 获取context  getServletConfig().getServletContext()
        // 1、获取web.xml中配置的上下文参数context-param
        ServletContext context = getServletConfig().getServletContext();

        String username = context.getInitParameter("username");
//        System.out.println("context-param参数username的值是:" + username);
//        System.out.println("context-param参数password的值是:" + context.getInitParameter("password"));
        // 2、获取当前的工程路径,格式: /工程路径
        System.out.println( "当前工程路径:" + context.getContextPath() );
        // 3、获取工程部署后在服务器硬盘上的绝对路径
        /**
         *  / 斜杠被服务器解析地址为:http://ip:port/工程名/  映射到IDEA代码的web目录<br/>
         */
        System.out.println("工程部署的路径是:" + context.getRealPath("/"));
//        System.out.println("工程下css目录的绝对路径是:" + context.getRealPath("/css"));
//        System.out.println("工程下imgs目录1.jpg的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
    }

<!--context-param是上下文参数(它属于整个web工程)-->

  <!--context-param是上下文参数(它属于整个web工程)-->
    <context-param>
        <param-name>username</param-name>
        <param-value>context</param-value>
    </context-param>
      <!--context-param是上下文参数(它属于整个web工程)-->
    <context-param>
        <param-name>password</param-name>
        <param-value>root</param-value>
    </context-param>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。