ServletContext
servletContxt是Web的四大作用域中最大的,他的范围为整个web项目,ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。


1.共享数据
HelloServlet:放数据
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context=this.getServletContext();
String username="卡卡";
context.setAttribute("username",username);//将一个数据保存在ServletContext中
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
GetServlet:取数据
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context=this.getServletContext();
String username= (String)context.getAttribute("username");
//解决中文乱码问题
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().print("名字:"+username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
web.xml的配置:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kakafa.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getc</servlet-name>
<servlet-class>com.kakafa.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getc</servlet-name>
<url-pattern>/getc</url-pattern>
</servlet-mapping>
2.获取初始化参数
web.xml:
<!--配置一些web应用的初始化参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>
ServletDemon03:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context=this.getServletContext();
String url=context.getInitParameter("url");
resp.getWriter().println(url);
}
3.请求转发
ServletContext context=this.getServletContext();
//RequestDispatcher requestDispatcher = context.getRequestDispatcher("/demo03");得到请求转发
//requestDispatcher.forward(req,resp);实现请求转发
//以上两句可以简化为:
context.getRequestDispatcher("/demo03").forward(req,resp);

4.读取资源文件
properties类
-
在Java里创建一个.properties文件
-
在resources里面创建一个.properties文件
发现:运行过后,都被打打包到了同一个路径下:classes,我们俗称这个路径为classpath(target文件夹里,即传统的out文件夹,maven里面为target)

(maven的约定大于配置会使Java里的.properties文件在target中无法生成,因此需要在pom.xml的build里配置,具体可参考https://www.cnblogs.com/kakafa/p/15562263.html里面的最后一点)

ServletDemo06
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");//把资源变成一个流
Properties prop=new Properties();
prop.load(is);
String username=prop.getProperty("username");
String pwd=prop.getProperty("password");
resp.getWriter().println(username+pwd);
}


浙公网安备 33010602011771号