Servlet 使用介绍(3)
说明
本篇记录一个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中。
- 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)的更多相关文章
- servlet简单介绍
什么是Servlet? servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能.尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服 ...
- Servlet过滤器介绍之原理分析
zhangjunhd 的BLOG 写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...
- Introducation of Servlet filter(servlet过滤器介绍 )
本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换 ...
- Servlet 使用介绍(2)
说明 本篇由于介绍Servlet容器回传请求方法service(ServletRequest req, ServletResponse res);传入参数用户请求参数request和请求返回参数res ...
- Servlet 使用介绍(1)
说明 本篇介绍java web中比较重要的一个技术:servlet.servlet是一种对用户请求动态响应的一个技术,是java web的核心一环.对于一般服务性质的纯后台服务应用而言,或许整个应用是 ...
- 10.Servlet简单介绍
1.什么是Servlet * Servlet是javaweb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet种通常需要: ...
- J2EE的13个规范之(三) Servlet简单介绍
Servlet是一种server端脚本,它是一个特殊的Java类,继承自HttpServlet.开发中主要用于处理和响应client的请求. Servlet在容器中执行,事实上例的和销毁创建由容器进行 ...
- Servlet基本介绍和使用
基本概念 Servlet又称为Java Servlet是一个基于java技术的web组件,运行在服务器端,用于生成动态的内容.Servlet是平台独立的java类,编写一个Servlet实际上就是按照 ...
- Servlet 简单介绍
来源于菜鸟教程http://www.runoob.com/servlet/servlet-intro.html Servlet 简介 Servlet 是什么? Servlet(Server Apple ...
- 一、动态网络编程的概念 二、Tomcat服务器搭建 三、Servlet组件介绍
一.动态网络编程的概念 动态网页:结合了HTML以外的高级程序编程语言和数据库技术生成的页面. 动态网页编程技术: ASP,PHP,JSP HTTP协议:规范浏览器和服务器之间通信的数据格式. 浏览器 ...
随机推荐
- 生命周期感知 Lifecycle
奉上翻译原文地址: 处理生命周期 :翻译过程中加上了自己的一点理解.理解不对的地方直接评论就好. 生命周期感知组件可以感知其他组件的生命周期,例如 Activity,Fragment等,以便于在组件的 ...
- PHP 正则匹配h1的数据报错 preg_match(): Unknown modifier 'h' in
问题: $str = "<h1>this is test msg</h1>"; $ruler = "/^<h1>(.*?)</h ...
- 1.Redux学习1,Redux
Redux流程图如上: Action就是一条命令 Store顾名思义就是存储数据的, Reducers是一个回调函数用于处理数据,它处理完数据会返回给Store存储起来 基本流程就是:组件中用Stor ...
- C++之运算符优先级顺序表
[注] sizeof 的操作数不能是 C 风格转型:表达式 sizeof (int) * p 无歧义地解释成 (sizeof(int)) * p ,而非 sizeof((int)*p). 条件运算符中 ...
- 解决方案:从网站下载Excel,我的Office 2016,打开excel文件,显示空白
今天在写Excel导出案例demo的时候发现,Excel下载后打开空白,要打开了看到空白后再点击一次打开后才可以显示,效果就如下图所示: 那么我就不能一次打开吗?我找了半天最终在这个博客找到了答案:h ...
- go路由httprouter中的压缩字典树算法图解及c++实现
目录 go路由httprouter中的压缩字典树算法图解及c++实现 前言 httprouter简介 压缩字典树 概念 插入操作 查询操作 c+++实现 go路由httprouter中的压缩字典树算法 ...
- JVM运行时数据区-详细结构图
- 程序结构设计理论(Android)
程序结构设计理论(Android) 作者:邓能财 2019年9月24日 个人简介 姓名:邓能财 年龄:26 毕业学校:东华理工大学 院系:理学院 专业:信息与计算科学 邮箱:2420987186@qq ...
- CSRF漏洞原理浅谈
CSRF漏洞原理浅谈 By : Mirror王宇阳 E-mail : mirrorwangyuyang@gmail.com 笔者并未深挖过CSRF,内容居多是参考<Web安全深度剖析>.& ...
- 服务守护DOS脚本
创建一个批处理文件,复制以下内容至文件中并保存,右键文件名,以管理员身份运行. @@@code @echo off @echo 请使用管理员身份运行此脚本 rem 运行前先打开文件修改下列变量: ...