JavaEE:Servlet简介及ServletConfig、ServletContext
Servlet简介
1.Servlet是sun公司提供的一门用于开发动态web资源的技术
*静态web资源:固定数据文件
*动态web资源:通过程序动态生成数据文件
2.Servlet技术基于Request-Response编程模型 ---- HTTP协议也是基于请求响应模型
*Servlet技术用来开发基于HTTP web应用程序
3.Servlet快速入门
1)创建web project
2)编写class继承HttpServlet
3)在web.xml配置Servlet程序,虚拟访问路径
*用户在浏览器上通过这个路径访问编写Servlet程序
4)覆盖doGet或者doPost方法进行输出
eg:
package cn.lsl.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 HelloServlet extends HttpServlet{ @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("get请求");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("post请求");
} }
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 为HelloServlet配置浏览器可以访问虚拟路径 -->
<servlet>
<!-- 为Servlet程序命名 -->
<servlet-name>HelloServlet</servlet-name>
<!-- Servlet全路径:包名.类名 -->
<servlet-class>cn.lsl.servlet.HelloServlet</servlet-class>
</servlet> <servlet-mapping>
<!-- 为Servlet程序制定浏览器访问虚拟路径 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 用户在浏览器通过/hello访问Servlet -->
<url-pattern>/hello</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4.Servlet动态生成网页文件
eg:
package cn.lsl.servlet; import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet{ @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("get请求"); //设置响应流编码问题
resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter();//获得向浏览器输出流
out.println("<html>");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
out.println("</head>");
out.println("<body>");
out.println("<h1>这是一个由Servlet动态生成页面!</h1>");
out.println("</body>");
out.println("</html>");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("post请求");
}
}
Servlet生命周期
1.Servlet接口定义了Servlet生命周期
init()方法:服务器调用该方法初始化Servlet
service()方法:初始化完毕,服务器调用该方法响应客户的请求
destory()方法:服务器调用该方法消灭servlet对象
1)tomcat服务器启动时,没有创建Servlet对象
2)第一次访问时,tomcat构造Servlet对象,调用init,执行service
3)从第二次以后访问tomcat不会从新创建Servlet对象,也不会调用init ---- 每一次访问都会调用service
4)当服务器重启或正常关闭,调用destroy(正常关闭 shutdown.bat)
eg:
package cn.lsl.servlet; import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class InitServlet implements Servlet{ public InitServlet(){
System.out.println("构造了InitServlet对象...");
} @Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("初始化....");
} @Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("服务....");
} @Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("销毁....");
} @Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
} @Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
}
//第一次访问输出的结果:
//构造了InitServlet对象...
//初始化....
//服务....
//第二次访问输出的结果:
//服务....
其中,init()方法只在Servlet第一次被请求加载的时候被调用一次,当有客户再请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service方法响应客户的请求。
2.Servlet对象是tomcat创建的,每次请求调用Servlet中service方法,tomcat服务器会在每次调用Servlet的service方法时,为该方法创建Request对象和Response对象。
*JavaEE API中没有Request和Response实现类 ----- 实现类由Servlet服务器提供的,tomcat提供实现类(weblogic提供实现类)。
Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。
3.针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其他请求服务,直至web容器退出,Servlet实例对象才会销毁。
4.service方法和HttpServlet doGet/doPost关系区别?
在HttpServlet代码实现中,根据请求方式不同 调用相应doXXX方法,get方式请求--- doGet post方式 --- doPost
5.配置Servlet随tomcat服务器启动时,进行初始化 --- <load-on-startup>
*<load-on-startup>参数可以是一个数字 0-9 代表服务器加载优先级,0最高
eg:
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>cn.itcast.servlet.InitServlet</servlet-class>
<!-- 配置 Servlet在服务器启动时 进行加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
总结:
在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。
对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,
service方法再根据请求方式分别调用doXXX方法。
路径匹配
一个Servlet可以配置多个url-pattern
URL配置格式三种:
1.完全路径匹配(以/开始)例如:/hello /init
查错:
* 当前工程没有被正确发布,访问该工程所有静态资源、动态资源 发生404 ----- 工程启动时出错了
* 查看错误时 分析错误
1) 单一错误 : 从上到下 查看第一行你自己写代码 (有的错误与代码无关,查看错误信息)
2)复合错误 Caused by ---- 查看最后一个Caused by
* Invalid <url-pattern> init2 in servlet mapping
2.目录匹配(以/开始) 例如:/* /abc/*
/代表网站根目录
3.扩展名匹配(不能以/开始) 例如: *.do *.action
典型错误 /*.do
优先级:完全匹配>目录匹配>扩展名匹配
路径问题
编写九九乘法表
1、需要用户在客户端输入一个数字
2、Servlet接受客户端输入数字,打印对应乘法表
eg:
package cn.lsl.servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ChengfabiaoServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得请求提交数据number
String numberStr = request.getParameter("number");
int number = 0;
try {
number = Integer.parseInt(numberStr);
} catch (NumberFormatException e) {
throw new RuntimeException("输入的不是整数");
}
//打印九九表
PrintWriter out = response.getWriter();
for(int i=1; i<=number; i++){
for(int j=1; j<=i; j++){
out.print(j + "*" + i + "=" + j * i + " ");
}
out.print("<br>");
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }
在根目录下的chengfabiao.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>乘法表</title>
</head> <body>
<!-- 相对路径 chengfabiao -->
<form action="/ServletTest/chengfabiao" method="post">
请输入一个数字<input type="text" name="number">
<input type="submit" value="打印乘法表"/>
</form>
</body>
</html>
在aaa文件夹下的chengfabiao.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>乘法表</title>
</head> <body>
<!-- 相对路径 ../chengfabiao -->
<form action="/ServletTest/chengfabiao" method="post">
请输入一个数字<input type="text" name="number">
<input type="submit" value="打印乘法表"/>
</form>
</body>
</html>
分析:
在chengfabiao.html 通过 action 访问 ChengfabiaoServlet 路径可以用绝对路径和相对路径
相对路径:相对当前网页地址 路径 例如 chengfabiao ./chengfabiao ../chengfabiao
例如: http://localhost/ServletTest/chengfabiao.html 提交 action="chengfabiao"
* 将url最后地址换成相对路径
结果: http://localhost/ServletTest/chengfabiao ----- 服务器端 /chengfabiao
例如: http://localhost/ServletTest/aaa/chengfabiao.html 提交 action="chengfabiao"
结果: http://localhost/ServletTest/aaa/chengfabiao ----- 服务器 /chengfabiao
* /aaa/chengfabiao 与服务器 /chengfabiao 不匹配 出现404
http://localhost/ServletTest/aaa/chengfabiao.html 提供 action="../chengfabiao"
结果:http://localhost/ServletTest/aaa/../chengfabiao ---- > ..和/aaa抵消 http://localhost/ServletTest/chengfabiao 可以匹配服务器 /chengfabiao
结论:如果用相对路径提交请求,考虑当前路径, 当前访问服务器资源路径不同 ---- 相对路径写法不同
绝对路径 解决相对路径,会根据当前地址改变问题。 例如: /ServletTest/chengfabiao 、http://localhost/ServletTest/chengfabiao
绝对路径 以/开始 /访问服务器根目录
例如: 客户端访问服务器,不管当前路径是什么 --- / 服务器根目录 http://localhost
/ServletTest --- 找到虚拟目录ServletTest工程 /ServletTest/chengfabiao --- 找到 ServletTest工程下配置 虚拟路径/chengfabiao
结论: 客户端路径 /工程虚拟目录/servlet虚拟路径 例如:/ServletTest/chengfabiao
服务器端 配置web.xml 不需要写工程虚拟目录 只要直接写/servlet虚拟路径 例如:/chengfabiao
ServletConfig
1.init方法 --- init(ServletConfig) --- 通过ServletConfig获得Servlet初始化参数
2.在web.xml中<servlet>标签内通过<init-param>标签为Servlet配置初始化参数
<init-param>
<param-name>address</param-name>
<param-value>软件园</param-value>
</init-param>
3.在Servlet程序中通过ServletConfig对象获得address对应数据
getInitParameter ----- 通过name获得value
getInitParameterNames ---- 获得所有name
*思考:如何在doGet 或 doPost 方法中 获得 Servlet初始化参数
GenericServlet 已经将ServletConfig 保存成员变量 ----- 在子类中通过 getServletConfig方法 获得 初始化参数
结论:子类Servlet不需要覆盖init(ServletConfig),只需要通过GenericServlet中getServletConfig()获得ServletConfig对象
应用:在init-param 指定配置文件位置和名称,配置Servlet随服务器启动创建 load-on-startup
*ServletConfig配置初始化数据,只能在配置Servlet获得,其他Servlet无法获得 --- 每个Servlet程序都对应一个ServletConfig对象
ServletContext
ServletContext是Servlet上下文对象
每一个工程对应创建单独ServletContext对象,这个对象代表当前web工程
操作ServletContext必须通过ServletConfig获得对象
应用:
1.获得整个web应用初始化参数
<!-- 配置全局初始化参数,所有Servlet都可以访问 -->
<context-param>
<param-name>hobby</param-name>
<param-value>唱歌</param-value>
</context-param>
package cn.lsl.servlet; 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 ContextServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取hobby全局参数
//通过ServletConfig获得ServletContext
//ServletContext context = getServletConfig().getServletContext(); //上面写法可以简化一下
ServletContext context = getServletContext(); //读取全局初始化参数
System.out.println(context.getInitParameter("hobby"));
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
*ServletConfig对象配置参数,只对配置Servlet有效(ServletConfig每个Servlet对应一个)
ServletContext对象配置参数对所有Servlet都可以访问(ServletContext每个工程(web应该)对应一个)
config参数<init-param>
context参数<context-param>
2.实现全局数据共享
package cn.lsl.servlet; import java.io.IOException; import javax.servlet.ServletConfig;
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 CountServlet extends HttpServlet { @Override
public void init() throws ServletException {
//想ServletContext保存访问次数
ServletContext context = getServletContext();
//保存数据setAttribute
context.setAttribute("visittimes", 0);
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//从ServletContext中获得访问次数
ServletContext context = getServletContext();
int times = (Integer)context.getAttribute("visittimes");
//访问次数+1
times++;
//将访问次数更新回去 ServletContext
context.setAttribute("visittimes", times);
System.out.println("网站被访问了一次");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package cn.lsl.servlet; 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 CountShowServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = getServletContext();
int times = (Integer)context.getAttribute("visittimes");
response.getWriter().println("web site has been visitted:" + times + " times!");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
在ServletContext中,保存站点访问次数,每一个用户访问站点,将访问次数+1
在ServletContext初始化过程中,向ServletContext保存访问次数0,-------ServletContext setAttribute
每次访问次数+1 --- 数据存放ServletContext中,所有Servlet都可以获得该数据
*在ServletContext中保存数据,所有Servlet都可以访问
3.实现服务器端转发功能
什么是转发?转发和重定向区别?
转发:如果服务器端处理客户端请求时,如果需要多个服务器程序同时进行处理,需要采用转发操作,转发操作对客户端一次请求,在服务器端通过多个程序连续执行,进行处理
重定向:服务器进行处理后,需要通知客户端访问下一个目标程序继续处理
区别:
1)转发产生一次请求一次响应,重定向产生两次请求两次响应
2)转发对客户端不可见的(未知),重定向客户端可以察觉到(可见)
3)转发是url显示转发钱资源路径,重定向url显示定向后资源路径
使用转发还是重定向? --- 转发性能好于重定向,请求次数少
转发的例子
eg:
package cn.lsl.servlet; 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 LetterCountServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String content = request.getParameter("content");
content = content.toUpperCase(); //将内容转为大写
//分析统计 --- 忽略大小写
int times[] = new int[26];
//遍历每一个字母
for(int i=0; i<content.length(); i++){
char c = content.charAt(i);
//判断字母是不是26个字母之一
if(Character.isLetter(c)){
times[c - 'A']++;
}
}
//交个下一个Servlet显示,将统计结果保存ServletContext
ServletContext context = getServletContext();
context.setAttribute("times", times);
//转发跳转另一个Servlet
RequestDispatcher dispatcher = context.getRequestDispatcher("/servlet/result");
dispatcher.forward(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
package cn.lsl.servlet; import java.io.IOException;
import java.io.PrintWriter; 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 LetterResultServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//从ServletContext获得数据
ServletContext context = getServletContext();
int[] times = (int[])context.getAttribute("times"); response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
for(int i=0; i<times.length; i++){
char c = (char)('A' + i);
//次数
int ltimes = times[i];
out.println("字母:" + c + "出现了" + ltimes + "次!<br/>");
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
eg:
package cn.lsl.servlet; import java.io.IOException;
import java.io.PrintWriter; 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 AServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { System.out.println("AServlet 执行...");
// 转发
ServletContext context = getServletContext(); // 转发给BServlet 这里 / 当前web 工程 /day05
RequestDispatcher dispatcher = context.getRequestDispatcher("/B"); dispatcher.forward(request, response); // // 重定向 / 代表当前web服务器
// response.setStatus(302);
// response.setHeader("Location", "/ServletTest/B"); // 从客户端访问,必须含有工程路径
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request,response);
} }
package cn.lsl.servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class BServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("BServlet 执行 ...");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request,response);
} }
4.读取web工程资源文件
package cn.lsl.servlet; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
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 ReadFileServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//读取a1.txt出现WEB-INF/classes
String filename2 = "/WEB-INF/classes/a1.txt";
filename2 = getServletContext().getRealPath(filename2);
readfile(filename2); //读取a2.txt位于网站根目录
String filename = "/a2.txt";
//通过/开始路径获得绝对磁盘路径
filename = getServletContext().getRealPath(filename);
System.out.println(filename);
readfile(filename); //因为a1.txt位于/WEB-INF/classes --- 类路径中 --- 通过Class对象读取文件
Class c = ReadFileServlet.class;
//返回磁盘绝对路径
String filename3 = c.getResource("/a1.txt").getFile();
System.out.println(filename3);
readfile(filename3);
} public static void readfile(String filename) throws IOException{
BufferedReader in = new BufferedReader(new FileReader(filename));
String line;
while((line = in.readLine()) != null){
System.out.println(line);
}
in.close();
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
使用Servlet读取文件,只能读取WebRoot下所有文件 --- 必须使用绝对磁盘路径
通过站点根目录绝对路径 获得磁盘绝对路径 ------ getServletContext().getRealPath(“/WEB-INF/info.txt”)
* 因为 WEB-INF/classes 非常特殊 (存放.class文件目录),被类加载器加载,通过Class类对象读取 该目录下文件
String filename3 = c.getResource("/a1.txt").getFile(); ----- / 代表 /WEB-INF/classes
结论:在web工程中,必须将 文件路径转换绝对磁盘路径 c:\xxx e:\xxx\xxx ----- getServletContext().getRealPath("/xxx"); /代表WebRoot
如果读取文件 恰好位于 WEB-INF/classes ----- 通过 类名.class.getResource("/文件名").getFile(); 获得绝对磁盘路径 / 代表 /WEB-INF/classes
缺省Servlet
缺省Servlet功能:处理其他Servlet都不处理请求
tomcat/conf/web.xml org.apache.catalina.servlets.DefaultServlet作为缺省Servlet
package cn.lsl.servlet; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DefaultServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("缺省Servlet执行了");
//将用户访问
//1.获得用户访问目标资源路径
String path = request.getRequestURI().substring(request.getContextPath().length());
System.out.println(path); //2.判断文件是否存在 --- 读取磁盘绝对路径
String filename = getServletContext().getRealPath(path);
File file = new File(filename);
if(file.exists()){
InputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
int b;
while((b = in.read()) != -1){
out.write(b);
}
in.close();
out.close();
}else{ response.setStatus(404);
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }
JavaEE:Servlet简介及ServletConfig、ServletContext的更多相关文章
- JavaWeb -- 服务器传递给Servlet的对象 -- ServletConfig, ServletContext,Request, Response
1. ServletConfig 有一些东西不合适在程序中写死,应该写在web.xml中,比如 文字怎么显示, 访问数据库名 和 密码, servlet要读取的配置文件 等等.. l在Servle ...
- day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...
- 1、Servlet 2、ServletConfig 3、ServletContext 4、HttpUrlConnection
1.Servlet 2.ServletConfig 3.ServletContext 4.HttpUrlConnection 07. 五 / J2EE / 没有评论 一.第一个Servlet的编写 ...
- Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】
Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...
- Servlet开发(三)之ServletConfig,ServletContext
1. ServletConfig Servlet是开发动态web的技术,而web.xml是Tomcat工程中最基础也最重要的配置文件,Tomcat启动项目的时候会加载并读取这个文件,其中web.xml ...
- Server,Servlet,ServletConfig,ServletContext,Session,Request,Response
Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...
- Servlet学习笔记【1】--- 背景和基础知识(CGI、Web服务器发展史、Servlet简介、任务、继承结构)
本文主要讲Servlet的基础知识和背景知识. 1 CGI简介 CGI(Common Gateway Interface 公共网关接口)是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是 ...
- Servlet简介与Servlet和HttpServlet运行的流程
1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序. > Ser ...
- 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期
一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...
随机推荐
- [CLR via C#]5.4 对象哈希码和dynamic基元类型
原文:[CLR via C#]5.4 对象哈希码和dynamic基元类型 FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处.为此,System.Object提供了虚方 ...
- 基础总结篇之五:BroadcastReceiver应用具体解释
問渠那得清如許?為有源頭活水來.南宋.朱熹<觀書有感> 据说程序猿是最爱学习的群体,IT男都知道,这个行业日新月异,必须不断地学习新知识,不断地为自己注入新奇的血液,才干使自己跟上技术的步 ...
- 动画云创始人胥克谦&课程格子创始人李天放分享创业经历
原文地址:http://student.csdn.net/mcd/topic/163587/955044 2014年10月18日在北京科技大学成功举办了CSDN高校俱乐部全国巡讲,现场參会学生有一百余 ...
- JS读写Cookie(设置、读取、删除)
JS读写Cookie(设置.读取.删除) Cookie是客户端存放数据的一种方式,可用来做状态保持. 1.设置Cookie: a.无过期时间:(若不设置过期时间,默认为会话级Cookie,浏览器关闭就 ...
- SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法
大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...
- 3D人脸识别预处理,3D face recognition preprocess
本文由兔崩溃公布http://blog.csdn.net/smartempire/article/details/31373817. 转载请注明出处.howdeshui#163.com 近期在做三维人 ...
- php 模拟POST提交的2种方法
1.通过curl函数 $post_data = array(); $post_data['clientname'] = "test08"; $post_data['clientpa ...
- Android小应用-----画画板
public class MainActivity extends Activity { private ImageView iv; float startX = 0; float startY = ...
- Spring IOC之 使用JSR 330标准注解
从Spring 3.0开始,Spring提供了对 JSR 330标准注解的支持.这些注解可以喝Spring注解一样被扫描到.你只需要将相关的Jar包加入到你的classpath中即可. 注意:如果你使 ...
- leetcode 34 Search Insert Position
Given a sorted array and a target value, return the index if the target is found. If not, return the ...