未来我们肯定会将JDBC的内容与JavaWeb的内容联合一起使用。而且以下几个ServletContext的使用将来要么会被Session、 Request、类加载、反射替代,要么很少使用,只是了解底层原理
1、获取初始化参数
先新建一个类叫ServletDemo,代码如下
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);
}
}
然后需要注册Servlet和用把“url”的内容写到ServletContext中,从而使得上面那个类可以创建ServletContext对象然后调用getInitParameter方法来获取“url”的值。
所以web.xml文件中增加以下代码
<!--配置一些Web应用初始化参数-->
<!--配置Jdbc-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306</param-value>
<!--如果以后用mybatis框架只要在后缀再加上mybatis就行-->
</context-param>
<servlet>
<servlet-name>getParameter</servlet-name>
<servlet-class>com.sunsplanter.Servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getParameter</servlet-name>
<url-pattern>/getParameter</url-pattern>
</servlet-mapping>
2、请求转发
再新建一个类ServletDemo04,代码如下
public class ServletDemo04 extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
RequestDispatcher requestDispatcher = context.getRequestDispatcher("/getParameter");
requestDispatcher.forward(req,resp);
//下面这句代码等价
//context.getRequestDispatcher("/getParameter").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
在注册servlet,代码如下
<servlet>
<servlet-name>ReqDispatch</servlet-name>
<servlet-class>com.sunsplanter.Servlet.ServletDemo04</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ReqDispatch</servlet-name>
<url-pattern>/ReqDispatch</url-pattern>
</servlet-mapping>
启动Tomcat后缀加上ReqDispatch后,发现实际访问的页面是第一个例子中的getParameter的Servlet,但路径并没有变化,这涉及到请求转发和重定向的区别问题。区别如下
3、读取资源文件
Properties文件编译后在target的WEB-INF->classes文件夹下,说明Java代码和Properties都被打包到了同一路径“classpath”。
我们之前谈论到一个问题,就是资源有时不能完全导出,原因就在于main函数内默认只能放java代码,如果有类似properties的文件就无法导出,需要在该工程的pom.xml文件下添加build配置resources,来防止资源导出失败的问题。