Python与JavaWeb的第一次碰撞
在Python中向服务器提交一个表单数据看起来是很容易的,但是这次经历着实让我记忆深刻,借此也为了警醒同样遇到了这样问题的你们。
要做什么?
使用Python的urllib2模块提交表单数据,并在服务器端进行验证提交的表单结果。
操作系统
Windows 7 旗舰版需要的编译器:
- Eclipse
- PyCharm
- 需要的技术:
- (基础的)Java web技术
- (基础的)Python
服务器端代码
服务器端采用JavaWeb技术创建,使用Servlet来接收表单数据。具体内容如下:
首先是index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="GetParameters" method="POST">
<br>
UserName : <input type="text" name= "username"><br>
Password : <input type="password" name = "password"><br>
<br>
<input type= "submit" value="Submit">
<input type="reset">
</form>
</body>
</html>
然后是action对应的servlet界面。GetParameters.java
package one;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetParameters extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public GetParameters() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
// doGet(request, response);
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("Username is : " + username);
System.out.println("Password is : " + password);
response.getOutputStream().write("I have received you request!".getBytes());
}
}
最后就是web.xml的配置文件(我这里偷了个懒,老是记错配置,所以就在tomcat的一个sample 下面抄了一个,然后改了改,就成了)
<?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>Test</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>GetParameters</servlet-name>
<servlet-class>one.GetParameters</servlet-class>
</servlet>
<!-- ... -->
<servlet-mapping>
<servlet-name>GetParameters</servlet-name>
<url-pattern>/GetParameters</url-pattern>
</servlet-mapping>
</web-app>
Python端代码
额,我姑且称之谓测试端吧。代码很简单,如下:
# coding:UTF-8
import sys,urllib,urllib2
def CommonWay():
url = 'http://localhost:8080/Test/GetParameters'
params = {
'username':'Username',
'password':'Password'
}
data = urllib.urlencode(params)
req = urllib2.Request(url,data)
response = urllib2.urlopen(req)
content = response.read()
print content
CommonWay()
print "Succeed!"
运行结果
Python控制台的输出结果是这样的
D:\Software\Python2\python.exe E:/Code/Python/GetWeather/ulib2/SubmitData.py
I have received you request!
Succeed!
Process finished with exit code 0
但其实最重要的就是服务器端的处理结果了。
我们可以在Eclipse的控制台清楚的看到我们提交的表单数据。至于要对这些数据做什么样的操作,就不是今天要讲的内容了。
总结
- 今天的收获很多,作为一个学习Python的新手,我坚信现阶段遇到的问题越多,进步的也就会越快。
- 对一个知识点要学的深入一点,而不只是停留在表面
- 少犯一些低级错误,比如我今天这个URL竟然都给弄错了。⊙﹏⊙b汗
- 多多的写代码,多多的测试,才能比较扎实的掌握。而不要图快,这样基础根本打不牢固。
Python与JavaWeb的第一次碰撞的更多相关文章
- Python第三周第一次作业中关于工程目录各种导入的模拟学习
目录 Python工程目录 导入自定义模块, 包 记录的缘由 模块搜索路径 模块: 导入模块 导入函数 导入类 多个类 @(Python第三周第一次作业中工程目录,模拟学习) Python工程目录 导 ...
- python网络爬虫。第一次测试-有道翻译
2018-03-0720:53:56 成功的效果如下 代码备份 # -*- coding: UTF-8 -*- from urllib import request from urllib impor ...
- 自学Python全栈开发第一次笔记
我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...
- Python学习笔记:第一次接触
用的是windows的IDLE(python 3) 对象的认识:先创建一个list对象(用方括号) a = ['xieziyang','chenmanru'] a 对list中对象的引用 a[0] # ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python操作memcached及redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...
- mac 配置Python集成开发环境(Eclipse +Python+Pydev)
1.下载Mac版64位的Eclipse. 进入到Eclipse官方网站的下载页面(http://www.eclipse.org/downloads/),我选择了下图所示的软件包, 浏览器在下载过程中使 ...
随机推荐
- hdu 5437Alisha’s Party(优先队列)
题意:邀请k个朋友,每个朋友带有礼物价值不一,m次开门,每次开门让一定人数p(如果门外人数少于p,全都进去)进来,当所有人到时会再开一次,每次都是礼物价值高的人先进. /*小伙伴最开始gg了,结果发现 ...
- 探索C++多态和实现机理
前一段时间被问到过一个问题,当时模模糊糊,就是说不清楚,问题问到说:什么情况下会将基类的析构函数定义成虚函数? 当时想到 如果子类B继承了父类A,那么定义出一个子类对象b,析构时,调用完子类析构函数, ...
- Android毕业设计-微圈
勤拂拭软件出品,必属精品 : 勤拂拭软件 去年做了一个类似于我的朋友圈的项目,主要功能就是用户可以实时发表自己的动态,好友可以评论点赞什么的,可以建群,聊天啊,拉黑啊,反正是一个不错的社交软件,包含服 ...
- What's New In MySQL 8.0
由于8.0内有很多C++11特性.需要gcc4.8版本以上.Rhel6系列默认gcc是4.7.在安装gcc6.1之后仍然检查不过. 原因可能是6.1版本不一定高于4.7,暂不讨论.鉴于升级gc ...
- 如何理解主函数main中变量(int argc,char *argv[])的含义
每一个C语言的初学者,都会注意到主函数main()里的两个参数,但是初学者一般不会去关注这两个参数的具体作用,下面我们就来介绍这两个参数的具体作用. main()函数是控制台程序的入口,int mai ...
- 面试题2:实现Singleton模式
题目:设计一个类,我们只能生成该类的一个实例.
- ES6(数值)
数值处理新增特性: 1.新增方法 2.方法调整 1.二进制和八进制 二进制以 0b 开头,其中B和b都可以:八进制以 0o 开头,其中O和o都可以. 2.判断数值是否有效(有限) NaN为非数字,故为 ...
- JavaBean toString方式
package object; import java.util.Date; public class ReportDataQo implements java.io.Serializable { p ...
- Android编译安装失败解决办法
今天用AndroidStudio开发了一个手机App玩玩,但是偶然遇到一个问题,自己手机上测试得劲的很,分享给朋友做测试,但是nie,意外出现了.... 两个人都给我说个安装失败,这个就比较尴尬了,找 ...
- Servlet生命周期与工作原理(转载)
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...