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


前提:安装了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个图书后台管理系统使用jsp、servlet和javabean构成的mvc模型。其中jsp负责页面展示,servlet负责控制器的逻辑处理,javabean则是模型层,负责数据的存储和操作。通过这种模型,实现了图书的增删改查等功能,方便管理员对图书进行管理。 ### 回答2: MVC是一种软件设计模式,用于将应用程序分为三个不同的部分:模型(Model)、视图(View)和控制器(Controller)。在MVC模型下,模型负责提供数据,视图负责显示数据并将用户输入转发到控制器,控制器负责接收用户输入并根据用户的请求更新数据模型或响应用户的请求。使用JSP、Servlet和JavaBean构建MVC模型,可以轻松开发图书后台管理系统。 在图书后台管理系统中,模型负责获取和存储图书信息,在JSP Servlet中可以使用JavaBean来实现模型。JavaBean是一种轻量的Java类,它可以通过在类中定义属性和方法来封装数据和操作,使得数据和方法可以在各个组件之间进行传递。JavaBean可以使用JDBC与数据库进行交互,从而实现对图书信息的增删改查操作。 视图负责显示图书信息,以及向控制器发送用户输入。JSPJava的一种动态网页技术,它可以生成动态的HTML页面。在JSP中,使用标签库和EL表达式可以轻松获取和显示JavaBean中的数据,从而实现数据的动态显示。 控制器负责接收用户输入,并根据用户的请求更新数据模型或响应用户的请求。在Servlet中,可以通过获取用户输入的信息,以及使用JavaBean进行数据的增删改查操作。控制器还可以将处理后的数据传递给适当的视图,以便用户查看和显示。 总之,使用JSP、Servlet和JavaBean构建MVC模型可以轻松开发图书后台管理系统,实现对图书信息的增删改查操作,从而提高图书管理的效率。 ### 回答3: 使用JSP Servlet JavaBean构成MVC模型,可以完成图书后台管理系统。MVC模型是一种软件设计模式,将应用程序分成三个部分:模型(Model)、视图(View)和控制器(Controller),各部分之间相互协作完成应用程序的开发。 首先,构建后台管理系统所需的数据库,包含图书信息、用户信息、订单信息等。 其次,使用JSP编写用户界面,通过HTMLJSP标签等技术实现静态页面的设计和开发。 接着,通过Servlet控制器,处理用户请求并将处理结果返回给JSP视图页面。Servlet的作用是将用户请求信息传递给JavaBean模型部分处理,从而实现后台业务逻辑的处理。 JavaBean模型部分,负责管理应用程序中的数据,包括获取、更新、删除等操作。通过使用JavaBean,可以达到优化后台逻辑处理流程的目的,并提高程序的调试和协同开发能力。 最后,使用JSPJavaBean的相互作用,呈现后台数据,实现对图书的增加、修改、删除等操作。用户操作数据库时,序列化JavaBean对象,对数据库进行操作后,再将数据反序列化到JavaBean中,实现数据持久化。 以上就是使用JSP Servlet JavaBean构成MVC模型完成图书后台管理系统的一般步骤。结合具体的业务逻辑和实际需求,可以进行更加复杂的业务逻辑处理,实现更加完善的图书后台管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值