Servlet ServletContext的一些应用例子
一、共享数据
在父工程下新建一个servlet子工程,参考上一篇随笔
同样地更改web.xml以及新建一些目录

GetServlet的代码:
package com.liyu.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 j =this.getServletContext(); String username = (String) j.getAttribute("usrname"); 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); } }
SetServlet的代码:
package com.liyu.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 SetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext i= this.getServletContext(); String usrname = "liyu"; i.setAttribute("usrname",usrname); } }
然后更改tomcat的配置

在web.xml中配置servlet的路径

web.xml中的完整代码为
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>set</servlet-name> <servlet-class>com.liyu.servlet.SetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>set</servlet-name> <url-pattern>/set</url-pattern> </servlet-mapping> <servlet> <servlet-name>get</servlet-name> <servlet-class>com.liyu.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>get</servlet-name> <url-pattern>/get</url-pattern> </servlet-mapping> </web-app>
运行测试,先去http://localhost:8080/s2/set 再去http://localhost:8080/s2/get

二、获取初始化参数
新建类ServletDemo3
在web.xml配置初始化参数,例如:
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/jciju</param-value>
</context-param>
使用getInitParameter方法获取初始化参数,
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); String url=context.getInitParameter("url"); resp.getWriter().print(url); }
同理在web.xml配置ServletDemo3的路径
<servlet>
<servlet-name>gp</servlet-name>
<servlet-class>com.liyu.servlet.ServletDemo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>gp</servlet-name>
<url-pattern>/gp</url-pattern>
</servlet-mapping>
然后运行测试

三、请求转发
新建一个java类ServletDemo4,
package com.liyu.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 ServletDemo04 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); //RequestDispatcher requestDispatcher = context.getRequestDispatcher("/gp"); //转发的请求路径 // requestDispatcher.forward(req,resp); //调用forward实现请求转发 context.getRequestDispatcher("/gp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
同理在web.xml中配置它
<servlet>
<servlet-name>sd4</servlet-name>
<servlet-class>com.liyu.servlet.ServletDemo04</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sd4</servlet-name>
<url-pattern>/sd4</url-pattern>
</servlet-mapping>
运行测试后,在localhost:8080/s2/sd4中访问的到的是/gp的页面

四、读取资源文件
新建一个db.properties,运行测试后发现生成在了classes类下
username =root password=123456

然后在工程路径下配置一下导出,以防有导出失败的问题

<resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources>
新建一个java类,取名ProperitesServlet,然后使用getResourceAsStream得到文件流,路径是db.properties的导出路径
package com.liyu.servlet; 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 ProperitesServlet extends HttpServlet { @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 user = prop.getProperty("username"); String pwd = prop.getProperty("password"); resp.getWriter().print(user + ":" + pwd); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
同样在web.xml配置一下
<servlet> <servlet-name>sd5</servlet-name> <servlet-class>com.liyu.servlet.ProperitesServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sd5</servlet-name> <url-pattern>/sd5</url-pattern> </servlet-mapping>
然后运行测试


浙公网安备 33010602011771号