1. Servlet 是什么?
Java Servlet
是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
2. Servlet 生命周期
Servlet
生命周期可被定义为从创建直到毁灭的整个过程。
以下是 Servlet 遵循的过程:- Servlet 通过调用
init ()
方法进行初始化。 - Servlet 调用
service()
方法来处理客户端的请求。service()
方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写doGet()
或doPost()
即可。 - Servlet 通过调用
destroy()
方法终止(结束)。
- Servlet 通过调用
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
3. ServeletContext
- servlet上下文,共享数据
4. 重定向和请求转发
- 重定向——
sendRedirect("URL")
//重定向会将请求地址转到重定向地址,请求地址会改变,并显示重定向地址的响应结果
HttpServletResponse resp;
resp.sendRedirect("/重定向url");
- 请求转发——
getRequestDispatcher("URL").forward(req,resp)
//请求转发不会发生请求地址的改变,在当前地址得到转发地址的响应结果
ServletContext context = this.getServletContext();//servlet上下文,全局配置
context.getRequestDispatcher("/请求转发指定url").forward(req,resp);
5. 读取资源文件
InputStream
——>getResourceAsStream(String path)
读取文件流Properties
Java 的 Properties 加载属性文件后是无法保证输出的顺序与文件中一致的,因为 Properties 是继承自Hashtable
的, key/value 都是直接存在 Hashtable 中的,而 Hashtable 是不保证进出顺序的。
Properties
是继承自HashTable
的。- 直接通过
keySet()
、keys()
或entrySet()
方法对Properties中的元素进行遍历时取出来的内容顺序与properties文件中的顺序不一致
- 在java目录下新建properties
- 在resources目录下新建properties
这些配置文件都被打包到了同一类路径【classpath】:/WEB-INF/classes
- Servlet01
//创建Servlet上下文
ServletContext context = this.getServletContext();
//读取资源配置文件
InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
//加载流文件
properties.load(is);
//获取properties的key,遍历key得到对应的value
Set<Object> keys = properties.keySet();
//map存放key和value
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
for (Object key : keys) {
//遍历存放进map中
map.put(key.toString(), properties.getProperty((String) key));
}
//存入Servlet上下文的属性中
context.setAttribute("db", map);
context.getRequestDispatcher("/get").forward(req, resp);//请求转发
- Servlet02
//获取上下文
ServletContext context = this.getServletContext();
//获取上下文属性
Map<String,String> db = (Map<String, String>) context.getAttribute("db");
//写入输出到web网页
PrintWriter out = resp.getWriter();
for (Map.Entry<String,String> entry : db.entrySet()) {
out.write(entry.getKey()+":"+entry.getValue()+"<br>");
}