ServletContext的一些应用
ServletContext的应用
1. 共享数据
第一步:创建一个Servlet类,用于提交数据:
通过setAttribute方法将数据赋值给一个字符串
package com.chen.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
//共享数据
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
String username = "陈锦顺作业已提交";
ServletContext context = this.getServletContext();
context.setAttribute("name",username);
PrintWriter writer = resp.getWriter();
writer.println("谢谢,已提交!");
System.out.println("执行了doGet方法!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
第二步:创建一个新的Servlet类,用来获取setAttribute方法设置的数据:
利用getAttribute方法来获取setAttribute的字符串。
package com.chen.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//共享数据
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String name = (String) context.getAttribute("name");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
resp.getWriter().print("提示:"+name);
}
@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.chen.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>get</servlet-name>
<servlet-class>com.chen.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>get</servlet-name>
<url-pattern>/get</url-pattern>
</servlet-mapping>
第四步:测试即可:
结果发现,如果在搜索框先输入get(获取数据的页面),得到的值会是null;
如果是先输入hello(发送数据的页面),再输入get(获取数据的页面),就可以的得到数据,实现数据的共享功能!
2.获取初始化参数
第一步:在web.xml文件中设置好初始化参数:
<!--配置一些web应用初始化参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>
第二步:创建一个Servlet类,用来获取刚才设置的参数:
通过getInitParameter方法获取参数值。
package com.chen.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//获取初始化参数
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String url = context.getInitParameter("url");
resp.getWriter().print(url);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
第三步:在web.xml文件中注册刚才创建的Servlet类:
<servlet>
<servlet-name>ge</servlet-name>
<servlet-class>com.chen.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ge</servlet-name>
<url-pattern>/ge</url-pattern>
</servlet-mapping>
第四步:测试服务器即可:
结果发现,当在搜索框中输入ge,可以显示出url的值!
3.请求转发
第一步:编写一个Servlet类:
利用getRequestDispatcher方法获取另一个页面的url-pattern,再用forward实现请求转发。
package com.chen.servlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//请求转发
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入了ServletDemo2!");
ServletContext context = this.getServletContext();
/* RequestDispatcher dispatcher = context.getRequestDispatcher("/ge");//转发的请求路径
dispatcher.forward(req,resp);//调用forward实现请求转发 */
context.getRequestDispatcher("/ge").forward(req,resp);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
第二步:注册Servlet类在web.xml中:
<!--请求转发-->
<servlet>
<servlet-name>sd</servlet-name>
<servlet-class>com.chen.servlet.ServletDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sd</servlet-name>
<url-pattern>/sd</url-pattern>
</servlet-mapping>
第三步:测试即可:
结果发现,我们在搜索框输入sd时,我们会显示ge页面的内容,且我们搜索框的路径不会变。
请求转发的用处在于,客户端想要请求B时,但是只知道A的地址,不知道B的地址;我们可以通过A访问B的信息!
4.读取资源文件
第一步:写一个properties文件
username=root
password=123456
第二步:写一个Servlet类:
通过getResourceAsStream方法获取一个文件流,需要注意的是路径为项目执行后资源文件在target下的路径。
package com.chen.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//读取资源文件
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
//获取流的路径是在项目执行后资源文件在target下的路径
InputStream in = context.getResourceAsStream("/WEB-INF/classes/dp.properties");
Properties prop = new Properties();
prop.load(in);//将获取的流加载
String user = prop.getProperty("username");
String pwd = prop.getProperty("password");
resp.getWriter().println("username:"+user);
resp.getWriter().println("password:"+pwd);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
第三步:在web.xml文件中注册:
<!--读取资源文件-->
<servlet>
<servlet-name>read</servlet-name>
<servlet-class>com.chen.servlet.ServletDemo3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>read</servlet-name>
<url-pattern>/read</url-pattern>
</servlet-mapping>
第四步:测试即可:
结果发现,我们在搜索框中输入read时,可以获取配置文件的值!

浙公网安备 33010602011771号