web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用
用于设置参数的Servlet类-HelloServlet
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//this.getInitParameter() 初始化参数
//this.getServletConfig() Servlet配置
//this.getServletContext() Servlet上下文
ServletContext servletContext = this.getServletContext();
servletContext.setAttribute("name","saxon");
System.out.println("hello :HelloServlet");
}
}
用于获取参数的Servlet类-GetServlet
@WebServlet("/get")
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决中文乱码
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
ServletContext servletContext = this.getServletContext();
String username = (String) servletContext.getAttribute("name");
resp.getWriter().write(username);
System.out.println("hello GetServlet");
}
}
必须先访问hello接口,然后访问get接口,才能获取name的值。
web.xml中配置
<!--配置一些web应用初始化参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</context-param>
@WebServlet("/demo01")
public class ServletDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String url = servletContext.getInitParameter("url");
resp.getWriter().print(url);
}
}
该类实现了请求的转发,转发至了/url这个映射路径
@WebServlet("/demo02")
public class DemoServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = getServletContext();
//请求转发
servletContext.getRequestDispatcher("/demo1").forward(req, resp);
// RequestDispatcher requestDispatcher = req.getRequestDispatcher("/demo1");
// requestDispatcher.forward(req,resp);
}
}
Properties
发现:都被打包到同一个路径下:classes,俗称为classpath:
思路:需要一个文件流
@WebServlet("/propertiesServlet")
public class PropertiesServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
properties.load(is);
String username = properties.getProperty("username");
String password = properties.getProperty("psw");
resp.getWriter().write("username="+username);
resp.getWriter().write("psw="+password);
}
}
properties文件(此处放置在resources目录下)
username = root
psw = 123456
然后测试访问即可。http://localhost:8080/servlet02_war/propertiesServlet
原文:https://www.cnblogs.com/saxonsong/p/14805147.html