javacontextparam简明教程.docx
《javacontextparam简明教程.docx》由会员分享,可在线阅读,更多相关《javacontextparam简明教程.docx(13页珍藏版)》请在冰豆网上搜索。
javacontextparam简明教程
java-context-param简明教程
1.加载顺序
分别对应方法:
contextInitialized(ServletContextEventsce)-》init(FilterConfigconfig)-》init()throwsServletException
都是在tomcat容器启动之前完成的
必须充分理解这一句话:
2.相关源码
SysListener.java
packagecom;
importjavax.servlet.ServletContextEvent;
importjavax.servlet.ServletContextListener;
publicclassSysListenerimplementsServletContextListener{
publicvoidcontextDestroyed(ServletContextEventsce){
//用于在容器关闭时,操作
System.out.println("SysListenercontextDestroyed");
}
//用于在容器开启时,操作
publicvoidcontextInitialized(ServletContextEventsce){
Stringrootpath=sce.getServletContext().getRealPath("/");
System.out.println("-------------rootPath:
"+rootpath);
if(rootpath!
=null){
rootpath=rootpath.replaceAll("\\\\","/");
}else{
rootpath="/";
}
if(!
rootpath.endsWith("/")){
rootpath=rootpath+"/";
}
System.out.println("ApplicationRunPath:
"+rootpath);
Stringurlrewrtie=sce.getServletContext().getInitParameter("urlrewrite");
booleanburlrewrtie=false;
if(urlrewrtie!
=null){
burlrewrtie=Boolean.parseBoolean(urlrewrtie);
}
System.out.println("Usecluster:
"+sce.getServletContext().getInitParameter("cluster"));
System.out.println("Useservletmapping:
"+sce.getServletContext().getInitParameter("servletmapping"));
System.out.println("Usepoststoragemode:
"+sce.getServletContext().getInitParameter("poststoragemode"));
System.out.println("UseUrlrewrite:
"+urlrewrtie);
}
}
Testcontextparam.java
packagecom;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.ServletConfig;
importjava.io.IOException;
/**
*Createdbyliuswkon2015/8/19.
*/
publicclassTestcontextparamextendsHttpServlet{
publicvoidinit()throwsServletException{
System.out.println("下面的两个参数param1是在servlet中存放的");
System.out.println(this.getInitParameter("param1"));
ServletConfigconfig=getServletConfig();
System.out.println("另外一种获取servletinit-param方法"+config.getInitParameter("param1"));
System.out.println("下面的参数是存放在servletcontext中的");
System.out.println(getServletContext().getInitParameter("urlrewrite"));
System.out.println("另外一种获取servletcontext方法"+config.getServletContext().getInitParameter("urlrewrite"));
}
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
System.out.println("Testcontextparamdoget...");
System.out.println("doGet中得到context-param"+getServletContext().getInitParameter("urlrewrite"));
doPost(req,resp);
}
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)
throwsServletException,IOException{
System.out.println("Testcontextparamdopost...");
}
}
login.jsp:
<%@pagecontentType="text/html;charset=GBK"%>
<%@pageimport="java.util.Enumeration"%>
testsometestpage!
A请登录先,跳转到login.jsp
<%
out.println("
");
Enumerationenema=application.getInitParameterNames();
while(enema.hasMoreElements()){
Stringname=(String)enema.nextElement();
Stringvalue=application.getInitParameter(name);
out.println("name="+name+"value="+value+"
");
}
//Stringaa="";
//for(inti=10;i<1000;i++){
//aa+="user"+i+",";
//}
//out.println(aa);
out.println("
");
out.println("
");
ServletContextsc=getServletContext();
Enumerationenema1=sc.getInitParameterNames();
while(enema1.hasMoreElements()){
Stringname=(String)enema1.nextElement();
Stringvalue=sc.getInitParameter(name);
out.println("name="+name+"value="+value+"
");
}
%>
3.web.xml配置
Testcontextparam
com.Testcontextparam
param1
avalibleinservletinit()
0
Testcontextparam
/testcontextparam
urlrewrite
false
cluster
false
servletmapping
*.bbscs
poststoragemode
1
com.SysListener
4.在监听中使用context-prarm
在监听中得到context-param参数,首先实现ServletContextListener接口,这个接口有2个方法
源码在2.相关源码中,可以看到SysListener
在启动web应用的过程中就执行初始方法了,如下
5.在jsp中使用context-prarm
具体见2相关源码中的login.jsp
源码中使用了jsp内置对象application或者getServletContext 都ok
得到结果:
6.在servlet中使用context-param
见2相关源码:
Testcontextparam.java
分别取得servlet中的init-param
和context-param中的参数
7.servlet的init方法加载时间
具体源码查看2.相关源码:
Testcontextparam.java
是在加载webapp的时候初始化的,在容器完成启动前
如下图:
补充:
查看网上的
8.context-param的说明及作用
验证3、4、5的顺序
具体源码查看2.相关源码中的SysListener.java
在tomcat发布filter项目的时候,接着就调用了监听的contextInitialized方法了,而这个方法能获取到值,说明context-param的参数读取先以SysListener
9.参考
一个web项目web.xml的配置中配置作用