Servlet知识小结
来源:互联网 发布:淘宝买家用假货换真货 编辑:程序博客网 时间:2024/06/18 13:53
应用:
• Servlet 是一种 独立于平台和协议 的 服务器端的 Java 应用程序 ,可以生成 动态的 web 页面(所谓动态网页,就是在不同时刻或不同条件下访问 Web 服务器上的同一个页面时,浏览器会获得不同的内容。
• ) 。它担当 Web 浏览器或其他 http 客户程序发出请求、与 http 服务器上的数据库或应用程序之间交互的中间层。
• 主要内容 :Web 应用程序开发过程、 Servlet 的运行原理、 Servlet 的生命周期等。
开发过程:
• 开发 Java Web 应用程序的大致流程
– 设计目录结构:根据具体业务需要,遵照规范的目录结构设计好 Web 应用程序的目录结构。
– 编写 Web 应用程序代码:编写业务逻辑所需的 Java 代码。
– 编写部署描述文件:把 Servlet 、初始化参数等定义到部署描述文件 web.xml 中。
– 编译代码:把编写好的 Java 源代码编译成字节码。
– 将 Web 应用程序打包:把整个 Web 应用程序打成 War 包,以方便部署。
– 部署 Web 应用程序:把打好的 War 包部署到 Web 服务器上。
• 执行 Web 应用程序:启动 Web 服务器,利用客户端浏览器进行访问测试。
注意:在具体的开发过程中,一般都会使用 IDE 工具,使用 IDE 工具进行 Web 应用程序开发时,只需要开发人员完成前三个步骤,其他步骤 IDE 工具可以自动完成。
案例:
1. 在 web 工程下的 web-inf 目录下的 classes 目录中编写一个 FirstServlet 类,实现 GenericServlet 接口
package cn.itcast;
import java.io.*;
import javax.servlet.*;
public class FirstServlet extendsGenericServlet{
publicvoid service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException{
OutputStreamout = res.getOutputStream();
out.write("Firstservlet".getBytes());
}
}
2. 启动命令行窗口,把 servlet 开发包导入到 classpath 中
set classpath=%classpath%;C:\apache-tomcat-6.0.20\lib\servlet-api.jar
3. 编译: javac -d . FirstServlet.java
4. 在 web.xml 文件中把编译后的 servlet 配置到服务器中,并为它配置对外访问路径
<?xml version="1.0"encoding="ISO-8859-1"?>
<web-appxmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>cn.itcast.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/xxx</url-pattern>
</servlet-mapping>
</web-app>
5. 启动 tomcat 和 ie, 访问:
简介:
• Servlet 是使用 Java Servlet 应用程序设计接口及相关类和方法的 Java 程序。它在 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。 Servlet 装入 Web 服务器并在 Web 服务器内执行。
• Servlet 是以 Java 技术为基础的服务器端应用程序组件, Servlet 的客户端可以提出请求并获得该请求的响应,它可以是任何 Java 程序、浏览器或任何设备。
运行过程:
• Servlet 程序是由 WEB 服务器调用, web 服务器收到客户端的 Servlet 访问请求后:
① Web 服务器首先检查是否已经装载并创建了该 Servlet 的实例对象。如果是,则直接执行第④步,否则,执行第②步。
② 装载并创建该 Servlet 的一个实例对象。
③ 调用 Servlet 实例对象的 init() 方法。
④ 创建一个用于封装 HTTP 请求消息的 HttpServletRequest 对象和一个代表 HTTP 响应消息的 HttpServletResponse 对象,然后调用 Servlet 的 service() 方法并将请求和响应对象作为参数传递进去。
⑤ WEB 应用程序被停止或重新启动之前, Servlet 引擎将卸载 Servlet ,并在卸载之前调用 Servlet 的 destroy() 方法。
生命周期
• 在代码中, Servlet 生命周期由接口 javax.servlet.Servlet 定义。所有的 Servlet 必须直接或间接地实现 javax.servlet.Servlet 接口,这样才能在 Servlet 容器中运行。 Servlet 提供 service 方法、 init 方法和 destroy 方法等。在 Servlet 的生命周期中,运行 javax.servlet.Servlet 接口中定义的这些方法,方法会在特定时间按照一定的顺序被调用
如何被加载和实例化
• Servlet 容器负责实例化和加载 Servlet ,这个过程可以在 Servlet 容器加载时执行,可以在 Servlet 响应请求时执行,也可以在两者之间的任何时候执行。
• Servlet 容器加载完 Servlet 之后,首先必须初始化它。初始化时 Servlet 调用 init() 方法,该方法可以以一个 ServletConfig 类型的引用为参数,该参数可以让 Servlet 从部署描述符文件中读取一些键值对形式的参数值,以初始化这些数据, ServletConfig 对象的引用还可以让 Servlet 接受 ServletContext 对象。
如何处理请求
• Servlet 被初始化以后,就处于能响应请求的就绪状态。每个 Servlet 都有一个请求的 Servlet Request 对象和响应的 Servlet Response 对象。
• Servlet 还可以实现 ServletRequest 和 ServletResponse 接口。 ServletRequest 接口可以让 Servlet 获取客户端请求中的参数,如 request 信息、协议类型等。 Servlet 可以从 ServletInputStream 流中读取 request 数据。 ServletResponse 接口允许 Servlet 设置 response headers 和 status codes 。实现这个接口可以使 Servlet 能访问 ServletOutputStream 流,用来向客户端返回数据。
package cn.csdn.com;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
public class servletdemo2 extendsHttpServlet {
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
response.setContentType("text/html");
PrintWriterout = response.getWriter();
out.print("HellowServlet");
}
publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
}
<? xml version = "1.0" encoding = "UTF-8"?>
< web-app version = "2.4"
xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
< servlet >
< servlet-name > servletdemo </ servlet-name >
< servlet-class > cn.csdn.com.servletdemo </ servlet-class >
</ servlet >
< servlet >
< servlet-name > servletdemo2 </ servlet-name >
< servlet-class > cn.csdn.com.servletdemo2 </ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name > servletdemo </ servlet-name >
< url-pattern > /www </ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name > servletdemo2 </ servlet-name >
< url-pattern > servlet /servletdemo2 </ url-pattern >
</ servlet-mapping >
</ web-app >
1. 右击 new ,新建一个 Web 项目,勾选 J2EE 1.4. 继承 Genericservlet ,点击完成
2. 导入源文件, Tomcat crc 文件
3. 编写 JAVA 文件,配置 web.xml 文件,然后配置服务器,把 Tomcat 配置进去,
4. 利用配置好的服务启动程序,利用 IE 浏览器访问程序
还可以直接创建 servlet ,这样比较方便。
线程安全问题:
package cn.csdn.com;
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 servletdemo2 extends HttpServlet {
private int count=0;
public void doGet(HttpServletRequestrequest, HttpServletResponse response)
throwsServletException, IOException {
Synchronized(this){ count++;
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
response.getWriter().print(count);
}
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
}
Config 对象:
package cn.csdn.com;
import java.io.IOException;
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 servletdemo4 extends HttpServlet {
private ServletConfigconfig;
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
/*String value =config.getInitParameter("data");
response.getWriter().print(value);*/
Enumeratione=this.getServletConfig().getInitParameterNames();
while(e.hasMoreElements()){
Stringparaname=(String) e.nextElement();
Stringvalue=this.getServletConfig().getInitParameter(paraname);
response.getWriter().println(paraname+"="+value);
}
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
public voidinit(ServletConfig config) throws ServletException {
// TODOAuto-generated method stub
super.init(config);
this.config=config;
}
public void destroy() {
// TODOAuto-generated method stub
super.destroy();
}
}
线程安全问题:
package cn.csdn.com;
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 servletdemo2 extends HttpServlet {
private int count=0;
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
Synchronized(this){ count++;
try {
Thread.sleep(1000);
} catch (InterruptedExceptione) {
// TODOAuto-generated catch block
e.printStackTrace();
}
response.getWriter().print(count);
}
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
}
Config 对象:
package cn.csdn.com;
import java.io.IOException;
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 servletdemo4 extends HttpServlet {
private ServletConfigconfig;
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
/*String value =config.getInitParameter("data");
response.getWriter().print(value);*/
Enumeratione=this.getServletConfig().getInitParameterNames();
while(e.hasMoreElements()){
Stringparaname=(String) e.nextElement();
Stringvalue=this.getServletConfig().getInitParameter(paraname);
response.getWriter().println(paraname+"="+value);
}
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request,response);
}
public voidinit(ServletConfig config) throws ServletException {
// TODOAuto-generated method stub
super.init(config);
this.config=config;
}
public void destroy() {
// TODO Auto-generatedmethod stub
super.destroy();
}
}
- Servlet知识小结
- servlet知识小结
- Servlet知识小结
- Servlet小结
- Servlet小结
- servlet小结
- Servlet小结
- servlet小结
- Servlet小结
- Servlet小结
- Servlet小结
- Servlet小结
- Servlet小结
- servlet小结
- Servlet小结
- servlet小结
- Servlet小结
- Servlet小结
- android中文首字母排序、分割
- 黑马程序员之C# 学习笔记:抽象类和接口的区别
- 在myeclipse创建一个servlet,向浏览器输出“Hello servlet!!”.
- svn服务端的安装与使用方式简介(一)
- 【机器学习】K-means聚类算法初探
- Servlet知识小结
- Git 常用命令(转)
- Smarty的学习的第一课 11.5
- 第十周上机任务项目五--贪财的富翁
- 使用response处理中文乱码,实现文件下载
- C#学习之一---创建控制台应用程序
- 关于sql
- Cookies和Session
- java学习之反射机制