前提:安装了APACHE 和 tomcat and jdk ,mysql

需求:完成一个客户注册的过程。

首先完成一个用户注册的test.html页面该页面调用一个test.jsp ,test.jsp获取用户输入数据并再把它们传给hello.cgi处理。最后将处理过的数据写入数据库。

准备工作:test.html(位于D:"local"htdoc)和hello.cgi(位于 D:"local"cgi-bin)是依靠于apache服务器的。需要配置下环境变量 打开E:"Program Files"Apache2"conf"httpd.conf

修改最下面的代码为

<VirtualHost *:80>

#    ServerAdmin webmaster@dummy-host.example.com

#    DocumentRoot /www/docs/dummy-host.example.com

#    ServerName dummy-host.example.com

ScriptAlias /cgi-bin/ "d:/local/cgi-bin/"

DocumentRoot d:/local/htdoc

#    ErrorLog logs/dummy-host.example.com-error_log

#    CustomLog logs/dummy-host.example.com-access_log common

</VirtualHost>

做了这些服务器就知道cgi 和 html 可以位于d:/local中了

注意中间设置的路径即可(只有设置了才能在那个路径下使用cgi)。还有最前面的#为注释,这样我们在网页中输入http://localhost/test.html 即可看到注册页面。代码不列了,就是个静态html,注意提交的处理脚本就行了。如下

<FORM action="http://localhost:8080/test.jsp" method=post> 当提交之后就会调用tomcat根目录下的test.jsp 全路径为E:"Program Files"Tomcat 6.0"webapps"ROOT"test.jsp

接下来自然到了test.jsp文件了

内容为:

<%@ page contentType="text/html; charset=gb2312" %>

<%@ page language="java" %>

<%@ page import="com.mysql.jdbc.Driver" %>

<%@ page import="java.sql.*" %>

<%@ page import="java.awt.*" %>

<%@ page import="java.applet.*" %>

<%@ page import="java.net.*" %>

<%@ page import="java.io.*" %>               //包定义,没什么说的

<%

String auth_type = request.getParameter("auth_type");

String serial_no      =   request.getParameter("serial_no");

String reg_code      =   request.getParameter("reg_code");

String verification      =   request.getParameter("verification");

String usr_name      =   request.getParameter("usr_name");

String usr_company      =   request.getParameter("usr_company");

String tel_no      =   request.getParameter("tel_no");

String mail_addr      =   request.getParameter("mail_addr");

String memo_info      =   request.getParameter("memo_info");

//这一大段都是获取上面test.html表单用户输入的数据

if("".equals(serial_no)||"".equals(reg_code)||"".equals(verification)||"".equals(usr_name)||"".equals(usr_company)||"".equals(tel_no)||"".equals(mail_addr))

{out.print("缺少输入");

return;

}

//这里是判断输入是否为空,为空则返回,不能用 ==0 ==nu ==”” 这些切忌,我暂时也不知道为什么

//"" 这就是一个String对象!!!

String totol ="auth_type="+auth_type+"&serial_no="+serial_no+"&reg_code="+reg_code+"&verification="+verification+"&usr_name="+usr_name+"&usr_company="+usr_company+"&tel_no="+tel_no+"&mail_addr="+mail_addr+"&memo_info="+memo_info;

//将用户输入的数据格式化,例如结果为:anth_type=1&user_name=熊健(片段),下面是关键了

try {

URL u = new URL("http://localhost/cgi-bin/hello.cgi");

// 这个地址就是本jsp接下来要调用的程序为hello.cgi 位置在D:"local"cgi-bin

URLConnection urlc = u.openConnection();

// urlc表示到 URL 的连接对象

urlc.setDoOutput(true);

//指示应用程序要从 URL 连接读取数据

urlc.setDoInput(true);

urlc.setAllowUserInteraction(false);

//不允许有任何用户交互。

DataOutputStream server = new DataOutputStream(urlc.getOutputStream());

// urlc.getOutputStream()返回写入到此连接的输出流。Out是什么意思?就是把数据输出到目的地。

//反过来说呢,就是把数据冲这里out(写入)到URL中!

server.writeBytes(totol);

server.close();

DataInputStream in = new DataInputStream(urlc.getInputStream());

//等待读数据!

in.readLine(); auth_type = in.readLine();

in.readLine(); serial_no = in.readLine();

in.readLine();reg_code = in.readLine();

in.readLine();verification = in.readLine();

in.readLine();usr_name = in.readLine();

in.readLine();usr_company = in.readLine();

in.readLine();tel_no = in.readLine();

in.readLine();mail_addr = in.readLine();

in.readLine();memo_info = in.readLine();

//这一大段是读数据,看到了吗,每次读数据之间要各一个空行,我是试出来,不知道为什么。哈哈,太有才了

in.close();

String driverName="com.mysql.jdbc.Driver";

String userName="root";

String userPasswd="cnk8";

String dbName="test";

String tableName="reglist";

String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;

Class.forName("com.mysql.jdbc.Driver").newInstance();

Connection connection=DriverManager.getConnection(url);

Statement statement = connection.createStatement();

statement.executeUpdate("insert into reglist(auth_type,serial_no,reg_code,verification,usr_name,usr_company,tel_no,mail_addr,memo_info) values('"+auth_type+"','"+serial_no+"','"+reg_code+"','"+verification+"','"+usr_name+"','"+usr_company+"','"+tel_no+"','"+mail_addr+"','"+memo_info+"')");

}

//数据库操作,我不说了

catch(Exception e){out.print(e.toString());}

finally{out.print("reg success!");}

%>

注意,在server.writeBytes(totol);和in.readLine(); 之间是会等待hello.cgi执行的。当hello.cgi执行完毕之后返回结果本jsp才会继续执行。

下面看看hello.cgi

首先打开VC新建一个控制台,写入下面代码

#include "stdafx.h"

#include <stdio.h>

#include <stdlib.h>

#include <iostream.h>

#include "CGITools.h"

int main()

{

printf("Content-Type: text/html"r"n"r"n");

char* clen = getenv("CONTENT_LENGTH");

if(clen == 0)

{

printf( "Zero CONTENT_LENGTH "n");

return -1;

}

int len = atoi(clen);

char* query_str = new char[len + 1];

cin.read(query_str, len); //也可以用getchar  等

query_str[len] = '"0';

CGI_vector query(query_str);

strcat(query[1].value(),"1");

for(int i = 0; i < query.size(); i++)

{

printf("%s"n",query[i].name());

printf("%s"n",query[i].value()); //也可以用putchar cout 等

}

delete [] query_str;

return 0;

}

这段代码特别注意!!

1:printf("Content-Type: text/html"r"n"r"n"); 这个输出是把数据输出到调用它的jsp,注意只是输出给jsp但是网页上还是没有显示,当jsp调用out.print时候才真正显示。当然如果是html直接调用这个cgi那么这个输出就是直接返回给Html了,简单点说就是直接在网页上显示了。

2        我们用的全部都是POST方法,那么调用getenv("CONTENT_LENGTH");就可以返回传来的数据长度。cin.read(query_str, len);得到数据(只要是标准人输入设备都可以得到,比如用getchar()或者其他文件读函数得到所有的输入;),存放在query_str 它的数据就是上面提到的anth_type=1&user_name=熊健

3         CGI_vector 不知道是什么吧? 去看Think in Java(中文版).chm 其实这些代码很多都来自那里喔。还是说一下:vector<myclass> 看到了vector里面可以放类的。class CGI_vector : public vector< myclass >

4        Vector本身就是类。CGI_vector是从他继承的。 这样我们在程序中

CGI_vector query;

Query[0]; 这样就得到了第一个vector 中存放的myclass元素。

OK注册页面和后台程序这样就完成了。注册.hml->数据库操作.jsp->修改用户数据.cgi

其实还有管理员的功能的,但是比较简单,这里就不列举了~

转载于:https://www.cnblogs.com/SuperXJ/archive/2009/09/27/1575252.html

一个jsp+cgi+html小工程,完成注册,后台使用CGI相关推荐

  1. 创建一个属于自己的小程序(注册开发账号)

    微信小程序入门指南 一. 如何创建一个属于自己的小程序 首先,需要注册一个小程序开发账号. 使用浏览器打开 https://mp.weixin.qq.com/ 网址,点击右上角的"立即注册& ...

  2. Uni-app学习从0到1开发一个app——(3)简单小工程内容介绍

    文章目录 工程文件 看看一个标准的hello微信小程序工程文件的组成和作用. 工程文件 可以参考官方教程:传送门 之前的文章有详细的开发环境介绍,传送门Uni-app学习从0到1开发一个app--(2 ...

  3. 如何通过按钮触发事件由一个jsp页面转到另一个jsp页面

    如何通过按钮触发事件由一个jsp页面转到另一个jsp页面 2008-05-21 10:01shuang_0402  分类:其他编程语言 | 浏览 8688 次  编程语言 登陆页面,如何通过按钮触发事 ...

  4. 初学JSP,运行一个JSP小程序

    最近在外面实习,让做一个JSP+javabean+servlet,在学习JSP之中遇到了不少小问题,现整理如下: 建议用eclipse java ee来运行,运行JSP之前,还需要配置tomcat.先 ...

  5. idea2020新建一个jsp页面_有关idea2019版的jsp配置小教程

    idea的配置 目录: 1.配置tomcat 2.创建项目设置tomcat 3.如何在一个页面显示多个项目 4.当jsp出现了函数报错的解决方法 1. 配置tomcat 如图,点击设置 点击+号,添加 ...

  6. 创建一个微信小程序——如何注册账号,安装微信开发者工具,创建一个小程序(详细步骤版)

    一.注册账号 注册地址 注册地址:微信公众平台 注册 右上角--[立即注册]. 选择[小程序]. 按照步骤完成注册. 按照步骤激活邮箱后,在信息登记这里选择个人. 填写相关信息. 完成注册. 这一步可 ...

  7. 【微信小程序】注册小程序账号、做一个案例——你好我的小程序

    介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...

  8. [JSP暑假实训] 二.JSP网站创建及Servlet实现注册表单提交、计算器运算

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 本篇文章开始讲 ...

  9. 手把手做一个JSP入门程序(一):程序基本介绍(JSP)

    胡扯   说好的不学jsp,结果今天还是学了.主要还是为了后面的java后台的学习啦.为了更好的掌握知识,那我们就来写一个简单的jsp入门程序吧!这只是一个简单的入门小程序,所以就没有太多强大的功能. ...

  10. 微信小程序的注册、开发和创建工具、配置、逻辑层及场景值

    目录 一.微信开发简介 1.微信开发概述 2.微信开放平台 3.微信公众平台 3.1微信公众平台概述 3.2账号分类 4.开放平台和公众平台的区别 二.认识小程序 1.小程序概述 2.亮点与不足 三. ...

最新文章

  1. php渲染nodejs api,如何使用nodejs 服务器读取HTML文件渲染至前端
  2. C++高精度运算类bign (重载操作符)
  3. 斯坦德机器人收购_斯坦德机器人合伙人兼CMO王茂林:人是公司发展根本,多数企业都死于合伙人...
  4. Android短信操作(通过内容提供者)
  5. 用go语言制作读取excel模板批量生成表格工具
  6. git - 简明指南
  7. led拼接屏报价_LED拼接屏的装饰
  8. Android笔记-对称与非对称加密及DH密钥交换
  9. 关于h264bitstream的bug修正及完善
  10. 阿里Java开发手册思考(二)
  11. cad快速看图能合并图纸吗_【CAD快速看图电脑版】合并图纸、2张图之间复制
  12. Webstorm中html无Vue语法提示
  13. 【数据结构与算法】详解什么是哈希表,并用代码手动实现一个哈希表
  14. 服务器物理硬盘序列号,查看硬盘物理序列号的程序源代码
  15. ad如何自动布线布单层_pcb单层板如何布线_pcb单层板自动布线设置
  16. python的pygame模拟太阳-地球-月亮-金星等动态示意图代码分析
  17. love2d教程10--粒子效果
  18. 常用类/ID命名举例
  19. sublime text3 字体样式_Sublime Text3 Github最受欢迎主题字体推荐!
  20. 视频监控系统及系统各节点设备理解和监控系统发展简介

热门文章

  1. android studio静态界面设计,2.3 使用Android Studio 简单设计UI界面
  2. java识别答题卡纸_答题卡读取答案的原理是什么?
  3. 一句话解释新西兰技术移民
  4. 《实时控制软件设计》团队项目分组
  5. 计算机其它离的360云盘,win7系统将360云盘文件快速转移到百度云盘的方法
  6. Ubuntu下搜狗拼音突然无法输入中文的解决办法
  7. 监管大屏系统_国网信息运维综合监管系统及大屏可视化平台建设介绍
  8. win10将用户文件夹改为英文
  9. 计算机图形学学习笔记(上)
  10. 一起写RPC框架(七)RPC网络模块的搭建五 Netty模块