1.Servlet产生背景
服务器在处理客户端请求报文的时候,需要对静态网页进行一定的业务逻辑,然后将业务逻辑运算之后的结果和需要显示的HTML一起生成新的HTML代码,然后将新的带有业务逻辑的运算结果的HTML代码返回给客户端。简单来说就是随着业务的深化,静态页面已经逐渐转化到动态页面,为了更好满足业务需要,就进化出了Servlet技术。
2.Servlet运行过程
⒈ 客户端发送请求至服务器端;
⒉服务器端根据配置文件web.xml中的Servlet相关服务信息,将客户端请求转发到对应的Servlet
⒊ Servlet引擎调用Service()方法,根据request对象中封装的用户请求与数据库进行交互,返回数据之后,Servlet会将返回的数据封装到response对象
1)第一次请求Servlet的的时候,Servlet容器将会创建Servlet实例;
2)Servlet容器加载完成Servlet之后,必须进行初始化,此时,init()方法将被调用;
3)Servlet初始化之后,就处于响应请求的就绪状态,此时如有客户端请求发送,就会调用Servlet实例的service()方法,并且根据用户的请求方式,调用doPost或者doGet方法;
4)最后,Servlet容器负责将Servlet实例进行销毁,调用destroy方法实现
⒋ Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求
⒌ 服务器将响应返回给客户端
3.简单实例
首先创建一个简单的Web动态工程ServletTest,目标是实现客户端访问该Servlet,并收到响应,同时Servlet端记录该访问者IP:
Servlet端代码如下:
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
//构造函数
public ServletTest() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("没错,我就是返回!");;
} finally {
out.close();
}
//得到来访者IP地址
String ip=request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
System.out.println("收到一个请求"+new Date()+"请求访问IP为: "+ip);
}
编写代码完成之后,就需要去进行对该工程web.XML进行配置才能将编写好的Servlet进行发布:
首先,我们在webContent/WEB-INF下面找到web.xml;
其中 com.test.ServletTest为我们的包名。
<servlet>
<servlet-name >ServletTest</servlet-name>
<servlet-class> com.test.ServletTest</servlet-class >
</servlet >
<servlet-mapping >
<servlet-name >ServletTest</servlet-name>
<url-pattern >/ServletTest</url-pattern>
</servlet-mapping >
然后我们对其邮件执行,Run on Server。
现在弹出页面选择新定义一个Server,名字任意取,然后将自己的工程Add到Configred中。finish。。。。
然后我们就会看到,访问到的页面。
将Eclipse中的Url放入到浏览器进行访问,我们进会看到对应的访问者的访问时间和IP地址。