说明

本篇记录一个Servlet的创建过程和基本使用.由于,Servlet是基于Http协议使用的,所以,可以在http协议的基础上作一些改变,来修改适用我自己的servlet.

Servlet使用

接下来实现一个简单的Servlet创建和通信,服务端创建一个Servlet来接受Post、get请求,为了便于测试客户端,我使用一个python文件模拟客户端请求。

Servlet创建

  • 创建ServletDemo工程

    ServletDemo工程选用Eclipse通用动态网页工程结构,目录如下:

    ServletDemo
    --src
    --cn.enjoytoday
    --Servlet_one.java
    --WebContent
    --META_INF
    --MANIFEST.MF
    --WEB_INF
    --lib
    --web.xml
    --index.xml
  • 创建Servlet类

    Servlet选择继承HttpServlet,便于直接重写doGet和doPost方法,代码如下:

package cn.enjoytoday;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.Enumeration;
import java.util.logging.Logger; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
*
* @author hfcai
*@date 2017/8/7
*继承HttpServlet实现Servlet
*
*/
public class Servlet_one extends HttpServlet { /**
* get方法回调
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doGet,and request url:"+req.getRemoteAddr());
readString(req.getReader());
getInitParmas();
response(resp.getWriter(), "Servlet_one doGet"); } /**
* post 方法回调
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost,and request url:"+req.getRemoteAddr());
readString(req.getReader());
getInitParmas();
response(resp.getWriter(), "Servlet_one doPost");
} private void getInitParmas() {
Enumeration<String>names= getInitParameterNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
System.out.println("initParam name:"+name+",and value is:"+getInitParameter(name)); } } private void readString(BufferedReader bufferedReader) throws IOException { String line=null;
StringBuffer stringBuffer=new StringBuffer();
System.out.println("one line:"+bufferedReader.readLine());
while( (line=bufferedReader.readLine())!=null) {
stringBuffer.append(line+"\n");
}
System.out.println("get request String:"+stringBuffer.toString());
} private void response(PrintWriter writer,String content) {
writer.append(content).flush();
} }
  • 创建web.xml文件

    配置web.xml文件,让serlvet可以被解析访问,配置信息如下:


    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0"> <display-name>ServletDemo</display-name> <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    </welcome-file-list> <servlet>
    <servlet-name>one</servlet-name>
    <servlet-class>cn.enjoytoday.Servlet_one</servlet-class> <!-- 初始化参数 -->
    <init-param>
    <param-name>info</param-name>
    <param-value>basic httpServlet demo.</param-value>
    </init-param>
    <!-- servlet加载启动设置,当其大于等于0时表示应用启动时加载,否则则表示访问时加载,初始加载时的数值设置越小加载优先级越高. -->
    <load-on-startup>1</load-on-startup>
    </servlet> <servlet-mapping>
    <servlet-name>one</servlet-name>
    <url-pattern>/one</url-pattern>
    </servlet-mapping>
    </web-app>

    需要注意的是load-on-startup标签位加载启动设置,init-param为启动传入参数.url开始为当前项目定位url.

    • Tomcat 启动

      可以通过eclipse 将web应用发布在tomcat中。

Servlet_Client创建

为了方便,访问客户端,采用python完成,代码如下:

#!/usr/bin/env python
# -*-encoding:utf-8 -*-
import socket IP_ADDRESS="127.0.0.1"
IP_PORT=8080 def main(data):
'''
default test method to Servlet.such as use xmpp protocol to request .
:return:
''' socket_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket_client.connect((IP_ADDRESS,IP_PORT))
socket_client.send(data+"\n")
response=socket_client.recv(1024)
socket_client.close()
print "get response %s" % response def doHttp(method,url):
data='''%s /ServletDemo/%s HTTP/1.1
Host: %s:%s
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 this is a test about %s
test of servlet
''' % (method,url,IP_ADDRESS,IP_PORT,method)
return data if __name__ == '__main__':
print "begin socket conneted."
main(doHttp("GET","one"))
# main(doHttp("POST","one"))

如上,可以通过控制访问方法对servlet进行响应的调整。可通过如下命令发起访问:

# python servlet_client.py

返回结果如下:


begin socket conneted.
get response HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
Date: Tue, 08 Aug 2017 00:09:49 GMT 11
Servlet_one doGet

测试成功.

源码地址:https://github.com/fishly/JavaWeb/tree/master/ServeltDemo

Enjoytoday,Enjoycoding

Servlet 使用介绍(3)的更多相关文章

  1. servlet简单介绍

    什么是Servlet? servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能.尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服 ...

  2. Servlet过滤器介绍之原理分析

    zhangjunhd 的BLOG     写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...

  3. Introducation of Servlet filter(servlet过滤器介绍 )

    本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换 ...

  4. Servlet 使用介绍(2)

    说明 本篇由于介绍Servlet容器回传请求方法service(ServletRequest req, ServletResponse res);传入参数用户请求参数request和请求返回参数res ...

  5. Servlet 使用介绍(1)

    说明 本篇介绍java web中比较重要的一个技术:servlet.servlet是一种对用户请求动态响应的一个技术,是java web的核心一环.对于一般服务性质的纯后台服务应用而言,或许整个应用是 ...

  6. 10.Servlet简单介绍

    1.什么是Servlet * Servlet是javaweb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet种通常需要: ...

  7. J2EE的13个规范之(三) Servlet简单介绍

    Servlet是一种server端脚本,它是一个特殊的Java类,继承自HttpServlet.开发中主要用于处理和响应client的请求. Servlet在容器中执行,事实上例的和销毁创建由容器进行 ...

  8. Servlet基本介绍和使用

    基本概念 Servlet又称为Java Servlet是一个基于java技术的web组件,运行在服务器端,用于生成动态的内容.Servlet是平台独立的java类,编写一个Servlet实际上就是按照 ...

  9. Servlet 简单介绍

    来源于菜鸟教程http://www.runoob.com/servlet/servlet-intro.html Servlet 简介 Servlet 是什么? Servlet(Server Apple ...

  10. 一、动态网络编程的概念 二、Tomcat服务器搭建 三、Servlet组件介绍

    一.动态网络编程的概念 动态网页:结合了HTML以外的高级程序编程语言和数据库技术生成的页面. 动态网页编程技术: ASP,PHP,JSP HTTP协议:规范浏览器和服务器之间通信的数据格式. 浏览器 ...

随机推荐

  1. 办公达人私藏的EXCEL辅助工具,一人抵十人,高效办公就靠它了!

    有很多小伙伴在日常工作中都离不开EXCEL的使用,但EXCEL实在是有太多困难.又复杂的操作,时间紧任务重这一天又废柴了,哎! 别担心,今天将为您分享个逆天强大的EXCEL辅助工具,帮大家快速搞定—— ...

  2. 「SAP技术」SAP MM 明明有维护源清单,还是不能下PO?

    SAP MM 明明有维护源清单,还是不能下PO? 下午收到用户报错说,创建采购订单失败,报错 :Material ### not included in source list despite sou ...

  3. Java面试题_第三阶段(Spring、MVC、IOC、AOP、DI、MyBatis、SSM、struts2)

    1.1 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗? 答:1)用于创建bean对象,管理bean对象的那个容器. 2)Spring IOC 容器 ...

  4. 28.web8

    file_get_contents()文件包含漏洞,根据题目提示txt?尝试flag.txt payload:  ?ac=flags&fn=flag.txt

  5. Maven发布封装到中央仓库时候报错:no default secret key: No secret key

    今天因为发布swagger-spring-boot-starter做一个问题的修复,然后碰到了下面这个问题,记录一下解决过程,帮助后续碰到类似问题的童鞋: *gpg: WARNING: "- ...

  6. 深度好文:PHP写时拷贝与垃圾回收机制(转)

    原文地址:http://www.php100.com/9/20/87255.html 写入拷贝(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略.其核心思想是,如果有多个调用 ...

  7. DevExpress MVVM<1>

    DevExpress MVVM 概念 模型 -定义数据和您的业务逻辑. 视图 -指定UI,包括绑定到ViewModel中的属性和命令的所有可视元素(按钮,标签,编辑器等). ViewModel-连接模 ...

  8. 2.Ansible Playbook剧本

    1.playbook?playbook翻译过来就是"剧本",那playbook组成如下 play: 定义的是主机的角色 task: 定义的是具体执行的任务 playbook: 由一 ...

  9. MySQL的数据库定义语法

    创建数据库 在MySQL中,使用 CREATE DATABASE 或 CREATE SCHEMA 语句创建数据库 语法结构: CREATE {DATABASE|SCHEMA}[IF NOT EXIST ...

  10. C#报Lc.exe已退出 代码为-1 错误解决方法

    解决方法一:用记事本打开*.licx,里面写的全是第三方插件的指定DLL,删除错误信息,保存,关闭,重新生成解决方案. 解决方法二:把项目文件夹下Properties文件夹下的licenses.lic ...