HttpServlet

2019-04-24  本文已影响0人  十六只猴子王

Servlet细节


web.xml文件的继承

在${CATALINA_HOME}\conf\web.xml中的内容,相当于写到每个项目的web.xml中,他是所有web.xml的父文件
<servlet-name>default</servlet-name>:它的优先级最低,如果一个请求没有处理,那么它来处理,显示404


ServletContext

一个项目就只有一个ServletContext对象,可以在很多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据
与天地同寿:这个对象在tomcat启动是就创建,在tomcat关闭时才死去

ServletContext是javaWeb四大域之一:
pageContext
ServletRequset
HttpSession:
ServletContext
域对象就是用来在多个Servlet中传递数据:域对象必须有存取数据的功能


域对象的方法
import javax.servlet.ServletContext;
import java.io.IOException;

/**
 * 演示向ServletContext中保存数据
 */
public class AServlet extends javax.servlet.http.HttpServlet {

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        //获取ServletContext对象
        //调用其serAttribute()方法完成保存数据
        ServletContext application = this.getServletContext();
        application.setAttribute("name","zhangsan");
    }
}
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 从ServletContext中获取数据
 */
@WebServlet(name = "BServlet",urlPatterns ="/BServlet")
public class BServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext对象
        //调用getAttribute()方法完成获取数据
        ServletContext applcation = this.getServletContext();
        String name = (String) applcation.getAttribute("name");
        System.out.println(name);
    }
}

Servlet也可以获取初始化参数,一个Servlet只能获取自己的初始化参数
可以配置公共的初始化参数,为所有Servlet用需要使用ServletContext才能使用

<context-param>
  <param-name>context-param</param-name>
  <param-value>context-value</param-value>
</context-param>

获得所有资源的路径

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;

/*
使用ServletContext获取资源路径
 */
@WebServlet(name = "CServlet",urlPatterns = "/CServlet")
public class CServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
        得到的是有盘符的路径
        /Users/hxl/study/学习文件(源码)/idea/JavaWeb/JavaWebDay09_2/out/artifacts/JavaWebDay09_2_war_exploded/index.jsp
         */
        String path = this.getServletContext().getRealPath("/index.jsp");
        System.out.println(path);
/*
    获取资源的路径后,在创建输入流对象
 */
        InputStream input = this.getServletContext().getResourceAsStream("/index.jsp");
        /*
        获得当前路径下的所有资源路径
         */
        Set<String> paths = this.getServletContext().getResourcePaths("/WEB-INF");

    }
}
上一篇 下一篇

猜你喜欢

热点阅读