JSP&Servlet 学习笔记(五)

16,使用ServletConfig

ServletConfig相当于个别Servlet的设置信息代表对象,这意味着可以从ServletConfig中取得Servlet设置信息。

ServletConfig定义了getInitParameter(),getInitParameterNames()方法,可以取得设置Servlet时的初始参数。

使用注解设置个别Servlet的初始参数,可以在@WebServlet中使用@WebInitParam设置initParams属性。

@WebServlet(name="ServletConfigDemo",urlPatterns={"/conf"},
initParams={
@WebInitParam(name="PARAM1",value="VALUE1"),
@WebInitParam(name="PARAM2",value="VALUE2")

}
)
public class ServletConfigDemo extends HttpServlet{
private String PARAM1;
private String PARAM2;
public void init() throws ServletException{
PARAM1=getServletConfig().getInitParameter("PARAM1");
PARAM2=getServletConfig().getINitParameter("PARAM2");
}
}

由于ServletConfig必须在Web容器将Servlet实例化后,调用有参数的init()方法再将之传入,是与Web应用程序资源相关的对象,所以在继承HttpServlet后,

通常会重新定义无参数的init方法以进行Servlet初始参数的取得。

Servlet初始参数通常作为常数设置,可以将一些Servlet程序默认值使用注解设置为初始参数,之后若想变更那些信息,可以创建web.xml进行设置,

以覆盖注解设置,而不用修改源代码,重新编译,部署的操作。

17,使用ServletContext

ServletContext接口定义了运行Servlet的应用程序环境的一些行为与观点,可以使用ServletContext实现对象来取得所请求资源的URL,设置与存储属性,

应用程序初始参数,甚至动态设置Servlet实例。通过ServletConfig的getServletContext()方法可以取得ServletContext对象。以下为需要注意的几个方法:

(1)getRequestDispatcher()

取得RequestDispatcher实例。使用时路径的指定必须以"/"作为开头,这个斜杠代表应用程序环境根目录。

context.getRequestDispatcher("/pages/some.jsp").forward(request,response);

以"/"作为开头有时称为环境相对路径,没有"/"作为开头则称为请求相对路径。实际上HttpServletREquest的getRequestDispatcher()方法在实现时,

若是环境相对路径,则直接委托给ServetContext的getRequestDispatcher();若是请求相对路径,则转换为环境相对路径,在委托给ServletContext的getRequestDispatcher()来取得RequestDispatcher。

(2) getResourcePaths()

如果想要知道Web应用程序的某个目录中有哪些文件,则可以使用getResourcePath()方法;

such as: for(String avatar:getServletContext().getResourcePaths("/")){}

(3)getResourceAsStream()

如过想在Web应用程序中读取某个文件的内容,则可以使用getResourceAsStream()方法,使用时指定路径必须以"/"作为开头,表示相对于应用程序环境根目录,

运行结果返回InputStream实例,接着运用其读取文件内容。

当使用java.io下的与文件读取相关的类时,必须注意,使用相对路径指定时,此时路径不是相对于Web应用程序根目录,而是相对于启动Web容器时的命令执行

目录,这是许多初学者都会由的误解。以Tomcat为例,若在Servlet中执行以下语句:

out.println(new File("filename").getAbsolutePath());

其会显示filename是位于Tomcat目录下的bin目录中。

每个Web容器都会由一个相对应的ServletContext,由于ServletContext以Servlet名称作为开头,容易被误认为仅是单一Servlet的代表对象。

In fact,当整个Web应用程序加载Web容器之后,容器会生成一个ServletContext作为整个应用程序的代表,并设置给ServletConfig。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章