이 글은 주로 서블릿의 ServletContext에 대한 소개입니다. 편집자는 이것이 꽤 좋다고 생각합니다. 이제 여러분과 공유하고 참고할 것입니다. 편집기를 따라가서 살펴보겠습니다.
웹에서는 대신 web.xml 파일과 같은 외부 세계를 통과하여 수정하기 쉽습니다.
Traverse 및 서블릿 출력:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig config = this.getServletConfig(); String initValue = config.getInitParameter("love"); System.out.println(initValue); }
ServletContext 객체를 반환하는데, 이는 매우 중요한 클래스입니다. 서블릿
. 물론 ServletContext 객체는 상위 클래스의 메소드에서 직접 얻을 수도 있습니다.public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig config = this.getServletConfig(); Enumeration initParams = config.getInitParameterNames(); while(initParams.hasMoreElements()) { String paramName = (String)initParams.nextElement(); String paramValue = config.getInitParameter(paramName); System.out.println(paramName+" = "+paramValue ); } }
ServletDemo1은 ServletContext에 매개변수 키-값 쌍을 설정합니다. 코드는 다음과 같습니다.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //两种获取ServletContext对象的方法: ServletContext context1 = this.getServletConfig().getServletContext(); ServletContext context2 = this.getServletContext(); //System.out.println(context1 == context2); //ture }
ServletDemo2는 ServletContext에서 키-값 쌍을 가져옵니다. . 코드는 :
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext(); System.out.println(context.getAttribute("lover")); }
在浏览器先访问ServletDemo1后(先执行ServletDemo1才能使ServletContext设置参数),再访问ServletDemo2后,MyEclipse的控制台就输出了ServletContext中设置的参数,这就达到了从一个Servlet传递数据给另一个Servlet。当然这只是ServletContext的一个小小应用。
在ServletContext类中还有getInitParameter(String name)方法或者getInitParameterNames()方法,这两个方法获取的是web应用所配置的参数(毕竟ServletContext代表web应用),就像ServletConfig中类似的方法获取的是某个Servlet中的
而对于配置web应用的参数是在web.xml文件中使用
例:在【myservlet】web工程下建立了名为ServletDemo3的Servlet,并在该web工程下的web.xml文件中添加
在ServletDemo3中的代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext(); String username = context.getInitParameter("username"); String password = context.getInitParameter("password"); System.out.println(username +":"+ password); }
在浏览器中访问该Servlet,如果MyEclipse的控制台能打印该信息,说明每个Servlet可以通过ServletContext对象来获取web应用的配置信息,也从侧面说明了ServletContext代表了这个web应用:
ServletContext类中的getMimeType(String file)方法用于返回该文件的MIME类型:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filename = "1.html"; ServletContext context = this.getServletContext(); System.out.println(context.getMimeType(filename)); }
输出:text/html。
ServletContext中的转发方法(重要)
在ServletContext对象中还有这么两个方法:getNameDispatcher(String name)(不常用)和getRequestDispatcher(String path),返回的是RequestDispatcher对象。转发有什么作用呢,举个例子,比如一个Servlet中的数据交个另一个Servlet来处理,或者Servlet将某个实时数据交给JSP来显示,虽然我们在浏览器中访问的是最开始的Servlet,但是进行转发后看到的其他web资源,而浏览器的地址栏不会改变。
注:在请求对象request对象中也有这么一个getRequestDispatcher(String path)方法,功能与ServletContext对象的这个方法一样,也可以实现转发,因此用哪个对象都行,没有区别。
例:在【myservlet】web工程下创建一个名为ServletDemo1的Servlet和一个show.jsp,
在ServletDemo1中将数据转发给show.jsp,代码为:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "Ding love LRR"; this.getServletContext().setAttribute("data", data); //将数据存至web应用的配置中 ServletContext context = this.getServletContext(); RequestDispatcher dispathcer = context.getRequestDispatcher("/show.jsp"); //通过要转发的目的地来获取转发对象 dispathcer.forward(request, response); //通过forward方法将请求对象和响应对象转发给别人处理 }
而在show.jsp中接收这个数据,并封装在HTML中:
<font size="100px" color="red"> ${data } </font>
接着我们去浏览器里访问ServletDemo1,就会看到:
虽然我们请求的ServletDemo1资源,但是由于在ServletDemo1中将请求进行了转发,所以其实服务器返回的是show.jsp的资源,但是我们浏览器地址依然会是ServletDemo1,这也是转发和重定向的区别之一。
위 내용은 Java 서블릿의 ServletContext에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!