JavaWeb学习心得之Servlet(二)
来源:互联网 发布:云计算logo 编辑:程序博客网 时间:2024/05/16 19:57
一、ServletConfig说明
1.配置Servlet初始化参数
在Servlet配置文件web.xml中,可以使用一个或多个<init-param>标签配置初始化参数。
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>ServletDemo</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>ServletDemo02</servlet-name> <servlet-class>com.hanxin.ServletDemo02</servlet-class> <!-- 初始化参数 --> <init-param> <param-name>username</param-name> <param-value>hanxin</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>123456</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletDemo02</servlet-name> <url-pattern>/servletDemo02.do</url-pattern> </servlet-mapping></web-app>
2.获取Servlet初始化参数
import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo02 extends HttpServlet{private ServletConfig config;/* * 当servlet配置了初始化参数后,web容器在创建servlet实例对象时, * 会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时, * 将ServletConfig对象传递给servlet。进而,通过ServletConfig对象就可以 * 得到当前servlet的初始化参数信息。 * @see javax.servlet.GenericServlet#init(javax.servlet.ServletConfig) */@Overridepublic void init(ServletConfig config) throws ServletException {this.config = config;}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取所有初始化参数Enumeration<String> e = config.getInitParameterNames();//获取输出流PrintWriter pw = response.getWriter();//输出所有参数到浏览器while(e.hasMoreElements()){String name = e.nextElement();//获取ServletConfig对象中的初始化参数String value = config.getInitParameter(name);pw.print(name+"="+value+"\r");}pw.flush();pw.close();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}访问结果:
二、ServletContext对象
web容器在启动时,它会为每个web应用程序都创建一个对应的ServletContext对象,它代表当前web应用。由于web应用的所有servlet共享一个ServletContext对象,因此可以通过ServletContext对象来实现通讯,ServletContext也叫做context域对象。
1.多个Servlet通过ServletContext对象实现数据共享
import java.io.IOException;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo01 extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取ServletContext对象ServletContext context = this.getServletContext();//保存变量到ServletContext中context.setAttribute("data", "hanxin");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}
import java.io.IOException;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo02 extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取ServletContext对象ServletContext context = this.getServletContext();//获取ServletContext中的变量String data = String.valueOf(context.getAttribute("data"));response.getWriter().println(data);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}
配置web.xml(可以同时配置多个Servlet),参考文章。
先后访问ServletDemo01和ServletDemo02,访问结果。
2.获取web应用的初始化数据
web.xml中<web-app>根标签,使用标签<context-param>来配置初始化参数。
<!-- 配置web应用初始化参数 --> <context-param> <param-name>webAppName</param-name> <param-value>ServletDemo</param-value> </context-param>
获取web应用初始化参数
import java.io.IOException;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo03 extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取ServletContext对象ServletContext context = this.getServletContext();//获取ServletContext初始参数String data = context.getInitParameter("webAppName");response.getWriter().println(data);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}访问结果
3.实现请求转发
import java.io.IOException;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;public class ServletDemo04 extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext context = getServletContext();//获取转发对象RequestDispatcher rd = context.getRequestDispatcher("/servletDemo05.do");rd.forward(request, response);//调用forward方法实现请求转发}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}
import java.io.IOException;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo05 extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext context = getServletContext();response.getWriter().print("this is demo05");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}访问结果:
4.利用ServletContext对象读取资源文件
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.text.MessageFormat;import java.util.Properties;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 使用servletContext读取资源文件 * * @author gacl * */public class ServletDemo06 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * response.setContentType("text/html;charset=UTF-8");目的是控制浏览器用UTF-8进行解码; * 这样就不会出现中文乱码了 */ response.setHeader("content-type","text/html;charset=UTF-8"); readSrcDirPropCfgFile(response);//读取src目录下的properties配置文件 response.getWriter().println("<hr/>"); readWebRootDirPropCfgFile(response);//读取WebRoot目录下的properties配置文件 response.getWriter().println("<hr/>"); readPropCfgFile(response);//读取src目录下的db.config包中的db3.properties配置文件 response.getWriter().println("<hr/>"); readPropCfgFile2(response);//读取src目录下的gacl.servlet.study包中的db4.properties配置文件 } /** * 读取src目录下的com.hanxin包中的db4.properties配置文件 * @param response * @throws IOException */ private void readPropCfgFile2(HttpServletResponse response) throws IOException { InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/hanxin/db4.properties"); Properties prop = new Properties(); prop.load(in); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String username = prop.getProperty("username"); String password = prop.getProperty("password"); response.getWriter().println("读取src目录下的com.hanxin包中的db4.properties配置文件:"); response.getWriter().println( MessageFormat.format( "driver={0},url={1},username={2},password={3}", driver,url, username, password)); } /** * 读取src目录下的db.config包中的db3.properties配置文件 * @param response * @throws FileNotFoundException * @throws IOException */ private void readPropCfgFile(HttpServletResponse response) throws FileNotFoundException, IOException { //通过ServletContext获取web资源的绝对路径 String path = this.getServletContext().getRealPath("/WEB-INF/classes/db/config/db3.properties"); InputStream in = new FileInputStream(path); Properties prop = new Properties(); prop.load(in); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String username = prop.getProperty("username"); String password = prop.getProperty("password"); response.getWriter().println("读取src目录下的db.config包中的db3.properties配置文件:"); response.getWriter().println( MessageFormat.format( "driver={0},url={1},username={2},password={3}", driver,url, username, password)); } /** * 通过ServletContext对象读取WebRoot目录下的properties配置文件 * @param response * @throws IOException */ private void readWebRootDirPropCfgFile(HttpServletResponse response) throws IOException { /** * 通过ServletContext对象读取WebRoot目录下的properties配置文件 * “/”代表的是项目根目录 */ InputStream in = this.getServletContext().getResourceAsStream("/db2.properties"); Properties prop = new Properties(); prop.load(in); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String username = prop.getProperty("username"); String password = prop.getProperty("password"); response.getWriter().println("读取WebRoot目录下的db2.properties配置文件:"); response.getWriter().print( MessageFormat.format( "driver={0},url={1},username={2},password={3}", driver,url, username, password)); } /** * 通过ServletContext对象读取src目录下的properties配置文件 * @param response * @throws IOException */ private void readSrcDirPropCfgFile(HttpServletResponse response) throws IOException { /** * 通过ServletContext对象读取src目录下的db1.properties配置文件 */ InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db1.properties"); Properties prop = new Properties(); prop.load(in); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String username = prop.getProperty("username"); String password = prop.getProperty("password"); response.getWriter().println("读取src目录下的db1.properties配置文件:"); response.getWriter().println( MessageFormat.format( "driver={0},url={1},username={2},password={3}", driver,url, username, password)); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}
5.利用类加载器读取资源文件
import java.io.IOException;import java.io.InputStream;import java.text.MessageFormat;import java.util.Properties;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 用类装载器读取资源文件 * 通过类装载器读取资源文件的注意事项:不适合装载大文件,否则会导致jvm内存溢出 * @author gacl * */public class ServletDemo07 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * response.setContentType("text/html;charset=UTF-8");目的是控制浏览器用UTF-8进行解码; * 这样就不会出现中文乱码了 */ response.setHeader("content-type","text/html;charset=UTF-8"); test1(response); response.getWriter().println("<hr/>"); test2(response); } /** * 读取类路径下的资源文件 * @param response * @throws IOException */ private void test1(HttpServletResponse response) throws IOException { //获取到装载当前类的类装载器 ClassLoader loader = ServletDemo07.class.getClassLoader(); //用类装载器读取src目录下的db1.properties配置文件 InputStream in = loader.getResourceAsStream("db1.properties"); Properties prop = new Properties(); prop.load(in); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String username = prop.getProperty("username"); String password = prop.getProperty("password"); response.getWriter().println("用类装载器读取src目录下的db1.properties配置文件:"); response.getWriter().println( MessageFormat.format( "driver={0},url={1},username={2},password={3}", driver,url, username, password)); } /** * 读取类路径下面、包下面的资源文件 * @param response * @throws IOException */ private void test2(HttpServletResponse response) throws IOException { //获取到装载当前类的类装载器 ClassLoader loader = ServletDemo07.class.getClassLoader(); //用类装载器读取src目录下的com.hanxin包中的db4.properties配置文件 InputStream in = loader.getResourceAsStream("com/hanxin/db4.properties"); Properties prop = new Properties(); prop.load(in); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String username = prop.getProperty("username"); String password = prop.getProperty("password"); response.getWriter().println("用类装载器读取src目录下的com.hanxin包中的db4.properties配置文件:"); response.getWriter().println( MessageFormat.format( "driver={0},url={1},username={2},password={3}", driver,url, username, password)); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}
三、在客户端缓存Servlet的输出
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo08 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "hello world"; /** * 设置数据合理的缓存时间值,以避免浏览器频繁向服务器发送请求,提升服务器的性能 * 这里是将数据的缓存时间设置为1天 */ response.setDateHeader("expires",System.currentTimeMillis() + 24 * 3600 * 1000); response.getOutputStream().write(data.getBytes()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}
阅读全文
0 0
- JavaWeb学习心得之Servlet(二)
- JavaWeb学习心得之Servlet(一)
- JavaWeb学习心得之Tomcat服务器(二)
- servlet学习心得(二)
- JavaWeb学习之路----Servlet(二)
- javaWeb-Servlet之Filter(过滤器二)
- JavaWeb之Servlet(二)HttpServletResponse
- JavaWeb学习心得之自定义简单标签(二)
- JavaWeb开发之Servlet(二)
- Servlet之javaweb应用(二)
- JavaWeb学习(二):Servlet
- JavaWeb(二)Servlet编写
- JavaWeb学习之Servlet的学习(二)
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
- JavaWeb学习心得之Tomcat服务器(一)
- JavaWeb学习心得之Cookie
- JavaWeb学习心得之session
- JavaWeb之Servlet编程实例二
- 学习从来不是一件简单的事,然而。。。。
- Atom 下 Hydrogen 的安装与使用
- spring的properties问题
- Windows下搭建php7
- Python tornado 数据库操作方法
- JavaWeb学习心得之Servlet(二)
- java protected
- 模板:莫比乌斯反演
- Java_Ant详解
- 技术大牛养成指南,一篇不鸡汤的成功学实践
- 解析URL参数为对象
- C++11 学习笔记 lambda表达式
- servlet中的两个init方法
- Java设计模式--调停者模式Mediator