ServletContext与ServletConfig
ServletContext
- 整个JavaWeb工程可以用一个对象表示,这个对象就是ServletContext
ServletConfig
- 我们在web.xml中给某一个Servler配置一些配置信息,当服务器被启动的时候,这些配置信息就会被封装到某一个ServletConfig对象中去,因此ServletConfig表示的某一个Servlrt的配置文件
首先在eclipse中创建一个默认的Servlet文件
这个表示的就是Servlet对外访问的虚拟路径
package com.kilig.servlet;
import java.io.IOException;
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;
@WebServlet("/Demo1Servelt")
public class Demo1Servelt extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取代表某一个JavaWeb工程的ServletContext对象
// Context对象是一个域对象,可以往某一个域对象中存放数据,并且还可以取出存放的数据
ServletContext context =this.getServletContext();
// 在context中存放数据
context.setAttribute("username", "张三");
// 取出数据
Object result =context.getAttribute("username");
// 打印输出结果
System.out.println(result);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
此外,在同一个工程目录下的其他Servlet的文件也可以获取Context中定义的数据
package com.kilig.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
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;
@WebServlet("/Demo2Servlet")
public class Demo2Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取ServletConfig对象
ServletConfig sc =this.getServletConfig();
// 获取sc对象中的参数信息
String encoding =sc.getInitParameter("encoding");
System.out.println(encoding);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
转发与重定向
- 实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
- 转发时浏览器的url地址栏不会发生改变,重定向时浏览器中的url地址会发生改变
- 转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器