import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.Set;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author Brittany ln
*
*/
======================Servlet代码================================
public class ContextServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/plain;charset=utf-8");
PrintWriter pw = resp.getWriter();
ServletContext sc = getServletContext();
sc.setAttribute("pwd", "12345");
pw.println("当前Servlet API版本:"+sc.getMajorVersion());
pw.println("获得名称:"+sc.getInitParameter("username"));
pw.println("获得密码:"+sc.getAttribute("pwd"));
pw.println("获得项目的真实物理路径:"+sc.getRealPath("/JustPlain"));
pw.println("==========================================================");
String resource = req.getParameter("resource");//获取源
if(resource!=null && resource.equals("")){ //判断是否为空
InputStream is = sc.getResourceAsStream(resource);//返回资源对象的输入流
if(is!=null){
resp.setContentType("text/plain;charset=utf-8");//设置编码类型
StringWriter sw = new StringWriter(); //获得字符输入流
for(int c=is.read();c!=-1;c=is.read()){ //读取资源
sw.write(c); //循环写入
}
pw.print(sw.toString()); //打印资源
}
}else{ //如果有资源
resp.setContentType("text/html"); //设置编码类型,书写html,使用下拉列表显示
pw.println("<html>");
pw.println("<head>");
pw.println("<title>Source-Code Servlet</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<form>");
pw.println("Choose a resource to see the source. <br/>");
pw.println("<select name=\"resource\">");
listFiles(sc,pw,"/"); //调用listFiles方法
pw.println("</select><br/>");
pw.println("<input toe=\"submit\" ");
pw.println("value=\"Show Source\">");
pw.println("</body>");
pw.println("</html>");
}
}
public void listFiles(ServletContext sc,PrintWriter out,String base){
Set set = sc.getResourcePaths(base); //返回指定路径下所有的web资源列表,路径必须从web应用程序下的根“/”开始
Iterator i = set.iterator(); //获得迭代器
while(i.hasNext()){
String s = (String) i.next(); //循环获得web资源列表
if(s.endsWith("/")){ //如果文件下还有子目录 则再循环获得
listFiles(sc, out, s);
}else{ //如果没有子目录 则将得到的所有web资源列表写进下拉列表
out.print("<option value=\""+s);
out.println("\">"+s+"</option>");
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
======================部署XML文件================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>conf</servlet-name>
<servlet-class>com.lovo.servlet.ConfigServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>xiaoming</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>conf</servlet-name>
<url-pattern>/conf</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>cont</servlet-name>
<servlet-class>com.lovo.servlet.ContextServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cont</servlet-name>
<url-pattern>/cont</url-pattern>
</servlet-mapping>
<context-param>
<param-name>username</param-name>
<param-value>xiaoming24dsse</param-value>
</context-param>
</web-app>
======================界面显示================================