Servlet创建、编译、部署、运行
最近在做一个通过Servlet实现后台批量接收上传文件的东西,现将Servlet的开发、运行配置、调用记录下来。我们以最简单的FileUpload为例,目前所有的http协议相关的Servlet均继承于HttpServlet。
- Servlet开发
Servlet的开发都必须将Servlet-api.jar引用到项目的lib目录中,具体如何引用,不详细描述。开发HttpServer必须扩展HttpServer类。HttpServlet 类包含
init():在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init() 。缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法来覆盖它。
destroy():destroy() 方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。
service() :service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。
Servlet的响应可以是下列几种类型:一个输出流,浏览器根据它的内容类型(如text/HTML)进行解释。一个HTTP错误响应, 重定向到另一个URL、servlet、JSP。
doGet():当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用doGet()方法。
doPost():当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。
getServletConfig():GetServletConfig()方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和ServletContext。ServletContext 接口提供有关servlet 的环境信息。
getServletInfo():它提供有关servlet 的信息,如作者、版本、版权。
serlet代码简单示例
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*; public class UploadFiles extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter(); String title = "Using GET Method to Read Form Data";
String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">\n"; out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor=\"#f0f0f0\">\n" +
"<h1 align=\"center\">" + title + "</h1>\n" +
"<ul>\n" +
" <li><b>First Name</b>: "+ request.getParameter("first_name") + "\n" +
" <li><b>Last Name</b>: "+ request.getParameter("last_name") + "\n" +
"</ul>\n" +
"</body></html>");
} @Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
} @Override
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
processRequest(request, response);
} @Override
public String getServletInfo() {
return "Hellow welcome!";
}// }
- Servlet运行配置
在项目中的创建一个web.xml配置文件,存放在webcontent/WEB-INF/web.xml下。web.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>FileUpLoad</servlet-name>
<servlet-class>cn/com/Convert/Document/FileUpLoad</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileUpLoad</servlet-name>
<url-pattern>/FileUpLoad</url-pattern>
</servlet-mapping>
</web-app>
配置说明:
1、servlet-name 节点为Servlet名称,可以自行任意定义,但必须保持<servlet>和<servlet-mapping>两个节点中的子节点<servlet-name>的节点值保持一致。
2、<servlet-class>节点中是配置servlet类的路径,即包 + 类名,如cn.com.Convert.Document/FileUpLoad 。
3、<url-pattern>节点中是配置servlet的虚拟路径,一般保持与servlet名称一致,在实际访问的地址为http://localhost:8080/项目名称/servlet名称
4、要使servlet生效必须重启tomcat,所有web.xml的修改都必须重启tomcat
- Servlet3新特性
在Servlet3的新特性中,我们配置Servlet更加简单方便,只需要在Servlet类代码前面加上注解就可以,无需在进行web.xml配置。注解示例
@WebServlet(name="FileUpLoad", urlPatterns="/FileUpLoad") 其中name为servlet名称, urlPatterns为servlet访问路径
servlet还可以进行其他参数配置,诸如异步返回、设置
- Servlet调用
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form id="frmPost" name="frmPost" action="http://localhost:8080/DocumentConvert/FileUpLoad" method="post" enctype="multipart/form-data" >
<input type="file" id="file1" name="file">
<input type="file" id="file2" name="file">
<input type="file" id="file3" name="file">
<input type="file" id="file4" name="file">
<input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
- Servlet参考资料
1·、https://www.ibm.com/developerworks/cn/java/j-lo-servlet/
2、http://www.yiibai.com/servlets/servlets_form_data.html
3、http://www.oschina.net/question/12_52027
4、http://baike.baidu.com/view/25169.htm
Servlet创建、编译、部署、运行的更多相关文章
- Phonegap项目创建 编译 安装 运行
一.创建 Phonegap项目 1. cd workspace 2.创建phonegap项目 cordova create 目录 识别符 显示名 例如:cordova create hello com ...
- 创建用于编译和运行Java程序的批处理文件
创建用于编译和运行Java程序的批处理文件 每次编译或运行Java程序时,都要在DOS命令行中输入很长的javac或java命令,悟空觉得太麻烦,就编写了一个适用于Windows操作系统的批处理文件b ...
- Jenkins+Ant/maven+Svn实现自动化部署,编译,运行,测试结果自动邮件通知
Jenkins+Ant+Svn实现自动化部署,编译,运行,测试结果自动邮件通知
- 在终端上创建Java项目及编译和运行
一:实践一次这样的操作有助于理解Tomcat/Eclipse的启动原理,包括classpath的设置,option的配置等等: 二:通过Bash终端创建一个简单的Java项目(单项目单Module,如 ...
- CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...
- 手动编译并运行Java项目的过程
现在Java开发基本上就是IDE调试,如果跨平台打个jar包过去运行一般就可以了,但是有些情况比如需要引入外部依赖的时候,这个时候是不能直接运行的,还需要引入一些外部的参数,并不是简单的javac和j ...
- .NET程序的编译和运行
程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行. 下图为传统代码编译运行过程: .NET的编译和运行过程与之类似,首先编写好的源代码,然 ...
- .NET概念:.NET程序编译和运行
.NET概念:.NET程序编译和运行 分类: c#程序设计 2012-02-29 15:46 3001人阅读 评论(2) 收藏 举报 .net编译器语言microsoftassemblyvb.net ...
- OFBiz进阶之HelloWorld(一)创建热部署模块
创建热部署模块 参考文档 https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Tutorial+-+A+Beginners+Developm ...
随机推荐
- The Perfect Stall
poj1274:http://poj.org/problem?id=1274 题意:有n个奶牛和m个谷仓,现在每个奶牛有自己喜欢去的谷仓,并且它们只会去自己喜欢的谷仓吃东西,问最多有多少奶牛能够吃到东 ...
- zoj 3841 Cards
题意:给你52张牌,已知一个牌的序列,然后利用剩余的牌,能排成多少个序列,这个序列比已知的序列字典序小. 思路:从左到右尽可能放比已知序列相应位置小,找不到就放一样,然后求组合数就可以.多重集排列定理 ...
- 算术编码JM实现
h.264标准中,CABAC的算术编码部分(9.3.4)只是一个参考,实际编码器中并不一定会按照它来实现,像JM中就有自己的算术编码实现方案. 在上篇文章CABAC中有详细的算术编码描述,在了解算术编 ...
- QImage与QPixmap加载图片效果(QImage不能拉伸图片,QPixmap默认拉伸图片)
QImage与QPixmap加载图片 效果 . 分类: QT开发 qtQtQT PixmapTest::PixmapTest(QWidget *parent) : QDialog(parent) {t ...
- javascript中神奇的(+)加操作符
javascript是一门神奇的语言,这没神奇的语言中有一个神奇的加操作符. 常用的加操作符我们可以用来做: 加法运算,例如:alert(1+2); ==>3 字符串连接,例如:alert(“a ...
- 14.8.1 Creating InnoDB Tables 创建InnoDB 表
14.8.1 Creating InnoDB Tables 创建InnoDB 表 创建一个InnoDB表,使用CREATE TABLE 语句,你不需要指定ENGINE=InnoDB 子句 如果Inno ...
- bzoj2743
其实和bzoj1878类似只不过要求的是区间内数量多于1个的数字种数其实还是按照bzoj1878做只不过我们是把每一种数字下一个出现的位置+1,并把这个位置置为0 ..] of longint; ma ...
- PuTTY 私钥'putty/sshdss.c' 多个信息泄露漏洞
漏洞版本: PuTTY 0.52 - 0.63 漏洞描述: BUGTRAQ ID: 61644 CVE(CAN) ID: CVE-2013-4208 PuTTY是Windows和Unix平台上的PuT ...
- netstat 命令state值
1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. State显示是LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接.就像你房子的 ...
- Atmospheric Scattering in Unity5
本次实践效果仅有Atmospheric Scattering和AA,并无其他post-processing,看到类似depth of field等的效果全部是Atmospheric Scatterin ...