说明

本篇记录一个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. 备份下ESP8266的AT指令集手册和用例手册中文版,准备为V7做几个ESP8266的例子

    指令集手册:https://files.cnblogs.com/files/armfly/4a-esp8266_at_instruction_set_cn.rar 用例手册: https://file ...

  2. redis集群搭建及常用操作

    前言: Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供 ...

  3. 解决video.js不兼容ie8问题

    使用视频播放器的时候,常常会让兼容一些浏览器问题,比如兼容ie8浏览器.在工作中使用的是video.js. 如果需要兼容,引入两个js库,就可以做到兼容ie8浏览器 <script src=&q ...

  4. 建造者模式-C#改良实现

    区分网上已有的一般建造者模式实现,个人觉得实现太单一了,自己google查了一些好的实现,挑了其中比较适合的,做个笔记. # region 标准Builder模式实现 // 产品 class Tele ...

  5. golang协程同步的几种方法

    目录 golang协程同步的几种方法 协程概念简要理解 为什么要做同步 协程的几种同步方法 Mutex channel WaitGroup golang协程同步的几种方法 本文简要介绍下go中协程的几 ...

  6. Penetration testing“Linux install Nessus”

    Ax_Download www.tenable.com/products/nessus-home,need sent email. Bx_Install su ls dpkg -i [filename ...

  7. 网页添加Live2D看板娘简易教程

    看板娘是一种职业和习惯称呼,也是ACGN次文化中的萌属性之一.简而言之就是小店的女服务生,也有“吸引顾客,招揽生意,提高人气”等作用类似品牌形象代言人的含义. 如果想在自己的博客上放一个呆萌的看板娘非 ...

  8. AndroidStudio集成.so遇见的问题:关于java.lang.UnsatisfiedLinkError: Native method not found

    我调试的是串口程序,程序中需要继承.so文件,AndroidStudio中集成.so文件的方法是将存放.so的文件夹(通常这个文件夹名字是:armeabi)拷贝到app的libs文件夹中,然后在app ...

  9. How do I unmute my Lenovo laptop?

    If the FN key does have a green light just press and hold down the FN button on the bottom left of t ...

  10. 简单搭建docker registry

    已知信息: 服务端IP:192.168.7.2xx 客户端IP:192.168.7.1xx 服务端: docker registry中镜像本地映射地址:/Users/dockergit/private ...