web容器在启动时,它会为每个web程序创建对应的ServletContext对象,它代表了当前的web应用
一个web工程(servlet)只有唯一一个全局的ServletContext对象,这里可以存储一些数据并取出
在ServletContext中存储数据的方法
ServletContext context = this.getServletContext(); String username = "mjj"; //将一个数据保存在ServletContext中,名字:username,值:username变量(即“mjj”) context.setAttribute("username",username);
从ServletContext获取数据的方法
ServletContext context = this.getServletContext(); //这里传入ServletContext中一个数据的名字name(实为键key),获取到这个名字的值(实为值value) String username = (String) context.getAttribute("username");
我们可以把这个获取到的数据显示在我们的web页面上去
resp.getWriter().print(username);
在web.xml注册servlet后即可实现请求和响应
<servlet> <servlet-name>getServlet</servlet-name> <servlet-class>com.mjj.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>getServlet</servlet-name> <url-pattern>/get</url-pattern> </servlet-mapping>
不但可以获取此类中的String类型的数据
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String s = "xxx"; servletContext.getInitParameter(s); }
还可以获取web.xml里的一些配置web应用的初始化参数
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String url = servletContext.getInitParameter("url"); resp.getWriter().print(url); }
在class中写好后,记得在web.xml中注册servlet
<servlet> <servlet-name>demo</servlet-name> <servlet-class>com.mjj.servlet.ServletDemo3</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo</servlet-name> <url-pattern>/demo</url-pattern> </servlet-mapping>
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("进入了demo04,这里面的内容是从/demo中转发过来的"); ServletContext servletContext = this.getServletContext(); //RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/demo"); //requestDispatcher.forward(req,resp); servletContext.getRequestDispatcher("/demo").forward(req,resp);
同样要在web.xml中注册这个class
<servlet> <servlet-name>demo04</servlet-name> <servlet-class>com.mjj.servlet.ServletDemo04</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo04</servlet-name> <url-pattern>/demo04</url-pattern> </servlet-mapping>
转发与重定向:
在maven配置时,有时会出现配置文件失败的情况
Properties:
发现:都被打包到了同一路径下classes,我们俗称这个路径为classpath
新建ServletDemo05用来读取资源:
思路:使用一个文件流来读取数据
要找的不是IDEA中的文件,而是导出的web应用的文件,最上面的classes是编译产生的,打包的时候只打包了servlet-02-1.0-SNAPOSHOT
public class ServletDemo05 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //把资源变成一个流,传入的即为路径 InputStream resourceAsStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/dp.properties"); Properties properties = new Properties(); //加载这个流 properties.load(resourceAsStream); String un = properties.getProperty("username"); String pw = properties.getProperty("password"); resp.getWriter().print(un+":"+pw); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
依旧去web.xml做一个servlet映射
<servlet> <servlet-name>demo05</servlet-name> <servlet-class>com.mjj.servlet.ServletDemo05</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo05</servlet-name> <url-pattern>/demo05</url-pattern> </servlet-mapping>
启动测试
如果文章对你有帮助,一键三连支持一下哦~