基于J2ME的联网心理测试

1. 提供给客户端测试试题的Servlet程序IQTest代码:

package  com.Test;

import  java.io.DataOutputStream;
import  java.io.IOException;
import  java.io.OutputStream;

import  javax.naming.InitialContext;
import  javax.servlet.ServletConfig;
import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  javax.sql.DataSource;
import  java.sql.Connection;
import  java.sql.PreparedStatement;
import  java.sql.ResultSet;
import  java.sql.SQLException;

public   class  IQTest  extends  HttpServlet  {

    
/**
     * 
     
*/

    
private static final long serialVersionUID = 6521059720875972304L;
    
    
protected static final String DBName = "java:/DefaultDS";
    
private DataSource dataSource;
    
//初始化数据库连接池
    public void init(ServletConfig config) throws ServletException {
        
try {
            InitialContext ic 
= new InitialContext();
            
//打开一个连接池
            dataSource = (DataSource) ic.lookup(DBName);
        }
 catch (Exception e) {
            e.printStackTrace();
            
throw new ServletException("init error");
        }

    }

    
    
//处理Post申请
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        
throws ServletException, IOException {
        
        String question 
= null;
        Connection c;
        
        
//设置为按字节传输
        response.setContentType("application/octet-stream");
        OutputStream os 
= response.getOutputStream();
        
//创建一个输出流对象
        DataOutputStream dos = new DataOutputStream(os);
        
try {
            c 
= dataSource.getConnection();
            
//获得问题的数目
            PreparedStatement ps1 = c.prepareStatement("select count(*) as rowcount from iqquestion");
            
//执行查询
            ResultSet rs1 = ps1.executeQuery();
            rs1.next();
            
int num = rs1.getInt("rowcount");
            rs1.close();
            ps1.close();
            
//获得问题内容
            PreparedStatement ps2 = c.prepareStatement("select * from iqquestion");
            ResultSet rs2 
= ps2.executeQuery();
            
            
//发送问题的数目
            dos.writeInt(num);
            System.out.println(num);
            
while (rs2.next()) {
                question 
= rs2.getString("question");
                System.out.println(question);
                
//发送问题的内容
                dos.writeUTF(question);
            }

            
//释放资源
            rs2.close();
            ps2.close();
            c.close();
        }
 catch (SQLException e) {
            e.printStackTrace();
        }

        
//设置发送的所有数据的流量属性
        response.setContentLength(dos.size());
        dos.close();
        os.close();
    }

    
    
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        
throws ServletException, IOException {
        
        doPost(request, response);
    }

}

 

2. 客户端传过来的试题答案,客户姓名和编号的Servlet程序的IQAnswer代码:

 

package  com.Test;

import  java.io.IOException;
import  java.io.InputStream;
import  java.sql.Connection;
import  java.sql.SQLException;
import  java.sql.PreparedStatement;

import  javax.naming.InitialContext;
import  javax.servlet.ServletConfig;
import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
import  javax.sql.DataSource;

public   class  IQAnswer  extends  HttpServlet  {

    
/**
     * 
     
*/

    
private static final long serialVersionUID = -827875086373603144L;
    
    
protected static final String DBName = "java:/DefaultDS";
    
private DataSource dataSource;
    
//初始化数据库连接池
    public void init(ServletConfig config) throws ServletException {
        
try {
            InitialContext ic 
= new InitialContext();
            
//打开一个连接池
            dataSource = (DataSource) ic.lookup(DBName);
        }
 catch (Exception e) {
            e.printStackTrace();
            
throw new ServletException("init error");
        }

    }

    
    
//处理Post申请
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        
throws ServletException, IOException {
        
        
byte[] data = null;
        InputStream iStrm 
= null;
        iStrm 
= request.getInputStream();
        
int length = request.getContentLength();
        
if (length > 0{    //如果存在传过来的数据
            data = new byte[length];
            iStrm.read(data);
        }

        
//反序列化数据
        Person person = new Person();
        person.deserialize(data);
        
//向数据库添加数据
        Connection c;
        
try {
            c 
= dataSource.getConnection();
            PreparedStatement ps 
= c.prepareStatement(
                    
"insert into storeanswer values(?,?,?)");
            ps.setString(
1, person.get_userid());
            ps.setString(
2, person.get_name());
            ps.setString(
3, person.get_answer());
            ps.executeUpdate();
            
            ps.close();
            c.close();
            
        }
 catch (SQLException e) {
            e.printStackTrace();
        }

    }

    
    
//处理Get请求
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        
throws ServletException, IOException {
    
        doPost(request, response);
    }

}

 

3. 把上面两个Servlet程序发布到JBoss服务器上,具体就是在web.xml文件中添加Servlet的XML信息

 

< servlet >
    
< servlet-name > IQAnswer </ servlet-name >
    
< servlet-class > com.Test.IQAnswer </ servlet-class >
</ servlet >
< servlet-mapping >
    
< servlet-name > IQAnswer </ servlet-name >
    
< url-pattern > /IQAnswer </ url-pattern >
</ servlet-mapping >
< servlet >
    
< servlet-name > IQTest </ servlet-name >
    
< servlet-class > com.Test.IQTest </ servlet-class >
</ servlet >
< servlet-mapping >
    
< servlet-name > IQTest </ servlet-name >
    
< url-pattern > /IQTest </ url-pattern >
</ servlet-mapping >

 

4. 客户端程序:

 

// ***********************************HttpIQTest.java
package  chapter15;

import  java.io.DataInputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.OutputStream;

import  javax.microedition.io.Connector;
import  javax.microedition.io.HttpConnection;
import  javax.microedition.lcdui.Alert;
import  javax.microedition.lcdui.AlertType;
import  javax.microedition.lcdui.Command;
import  javax.microedition.lcdui.CommandListener;
import  javax.microedition.lcdui.Display;
import  javax.microedition.lcdui.Displayable;
import  javax.microedition.lcdui.Form;
import  javax.microedition.lcdui.Item;
import  javax.microedition.lcdui.StringItem;
import  javax.microedition.lcdui.TextField;
import  javax.microedition.midlet.MIDlet;
import  javax.microedition.midlet.MIDletStateChangeException;

public   class  HttpIQTest  extends  MIDlet  implements  CommandListener  {
    
private Display display;
    
private Form mainForm;
    
private Command exitCommand, connectCommand, backCommand, sendCommand;
    
private TextField useridField, usernameField;
    
private String userid, username;
    
    
public HttpIQTest() {
        display 
= Display.getDisplay(this);
        
        exitCommand 
= new Command("Exit", Command.EXIT, 1);
        connectCommand 
= new Command("Connect", Command.SCREEN, 1);
        backCommand 
= new Command("Back", Command.BACK, 1);
        sendCommand 
= new Command("Send", Command.SCREEN, 1);
        
        mainForm 
= new Form("服务器的信息");
        
        useridField 
= new TextField("输入用户编号"null25, TextField.NUMERIC);
        usernameField 
= new TextField("输入用户姓名"null25, TextField.ANY);
        
//收集界面上输入用户编号和姓名
        mainForm.append(useridField);
        mainForm.append(usernameField);
        
        mainForm.addCommand(exitCommand);
        mainForm.addCommand(connectCommand);
        mainForm.setCommandListener(
this);
        
    }


    
protected void startApp() throws MIDletStateChangeException {
        display.setCurrent(mainForm);
    }


    
protected void pauseApp() {
        
    }


    
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
        
    }


    
public void commandAction(Command c, Displayable d) {
        
if (c == exitCommand) {
            
try {
                destroyApp(
false);
            }
 catch (MIDletStateChangeException e) {
                e.printStackTrace();
            }

            notifyDestroyed();
        }

        
if (c == connectCommand) {
            userid 
= useridField.getString();
            username 
= usernameField.getString();
            
if(userid.length() == 0 && username.length() == 0{
                Alert a 
= new Alert("警告""姓名和编号不能都为空"null, AlertType.ERROR);
                a.setTimeout(Alert.FOREVER);
                display.setCurrent(a);
                
return;
            }

            Thread t 
= new Thread() {
                
public void run() {
                    
//访问服务器servlet
                    try {
                        getQuestion();
                    }
 catch (Exception e) {
                        System.out.println(e.toString());
                    }

                }

            }
;
            t.start();
        }

        
if (c == backCommand) {
            display.setCurrent(mainForm);
        }

        
if (c == sendCommand) {
            Thread t 
= new Thread() {
                
public void run() {
                    
try {
                        sendAnswer();
                        display.setCurrent(mainForm);
                    }
 catch (IOException e) {
                        
                        System.out.println(e.toString());
                    }

                }

            }
;
            t.start();
        }

    }

    
    
//联网获得测试内容
    public void getQuestion() throws IOException {
        HttpConnection conn 
= null;
        InputStream iStrm 
= null;
        String url 
= "http://127.0.0.1:8084/IQTest";
        
        Form f;
        f 
= new Form("请解答");
        f.addCommand(backCommand);
        f.addCommand(sendCommand);
        f.setCommandListener(
this);
        
        
try {
            
//创建httpconnection连接
            conn = (HttpConnection) Connector.open(url);
            conn.setRequestMethod(HttpConnection.POST);
            
//设置连接属性
            conn.setRequestProperty("User-Agent""Profile/MIDP-2.0 Configuration/CLDC-1.1");
            conn.setRequestProperty(
"Content-Language""en-US");
            conn.setRequestProperty(
"Content-Type""application/octet-stream");
            conn.setRequestProperty(
"Accept""application/octet-stream");
            conn.setRequestProperty(
"Connection""Keep-Alive");
            
//如果连接成功
            if (conn.getResponseCode() == HttpConnection.HTTP_OK) {
                iStrm 
= conn.openInputStream();
                DataInputStream dis 
= new DataInputStream(iStrm);
                
//获得数据信息
                int length = (int) conn.getLength();
                
                
if (length > 0{
                    
//读取传过来的题目数
                    int num = dis.readInt();
                    System.out.println(num);
                    
                    String question;
                    
for (int i = 0; i < num; i++{
                        question 
= dis.readUTF();
                        
//显示返回来的信息
                        f.append(new StringItem("第 " + i + " 题:  ", question));
                        f.get(i).setLayout(Item.LAYOUT_EXPAND 
| Item.LAYOUT_NEWLINE_AFTER);
                    }

                }
 else {
                    f.append(
"不能访问数据");
                }

            }

            display.setCurrent(f);
        }
 catch (Exception e) {
            f.append(
"网络出错!");
            System.out.println(e.toString());
        }
 finally {
            
if (iStrm != null{
                iStrm.close();
            }

            
if (conn != null{
                conn.close();
            }

        }

    }

    
    
//发送答案
    public void sendAnswer() throws IOException {
        HttpConnection conn 
= null;
        OutputStream oStrm 
= null;
        String url 
= "http://127.0.0.1:8084/IQAnswer";
        
        
try {
            
//创建httpconnection连接
            conn = (HttpConnection) Connector.open(url);
            conn.setRequestMethod(HttpConnection.POST);
            
//设置连接属性
            conn.setRequestProperty("User-Agent""Profile/MIDP-2.0 Configuration/CLDC-1.1");
            conn.setRequestProperty(
"Content-Language""en-US");
            conn.setRequestProperty(
"Content-Type""application/octet-stream");
            conn.setRequestProperty(
"Accept""application/octet-stream");
            conn.setRequestProperty(
"Connection""Keep-Alive");
            
            Person personIn 
= new Person(userid, username, "ABCDAB");//ABCDAB是答案
            byte[] data = personIn.serialize();
            conn.setRequestProperty(
"Content-Length", Integer.toString(data.length));
            
            oStrm 
= conn.openOutputStream();
            oStrm.write(data);
            
//提示答案成功发送
            Alert a = new Alert("提示""发送成功"null, AlertType.INFO);
            a.setTimeout(Alert.FOREVER);
            display.setCurrent(a);
            
        }
 catch (Exception e) {
            System.out.println(e.toString());
        }
 finally {
            
if (oStrm != null{
                oStrm.close();
            }

            
if (conn != null{
                conn.close();
            }

        }

    }


}



// ******************************Person.java
package  chapter15;

import  java.io. * ;
import  java.io.IOException;

public   class  Person  implements  KSerializable  {
    
private String _name;
    
private String _answer;
    
private String _userid;
    
    
public Person() {
        
    }

    
    
public Person(String userid, String name, String answer) {
        _userid 
= userid;
        _answer 
= answer;
        _name 
= name;
    }

    
    
public String get_answer() {
        
return _answer;
    }


    
public void set_answer(String _answer) {
        
this._answer = _answer;
    }


    
public String get_name() {
        
return _name;
    }


    
public void set_name(String _name) {
        
this._name = _name;
    }


    
public String get_userid() {
        
return _userid;
    }


    
public void set_userid(String _userid) {
        
this._userid = _userid;
    }


    
public byte[] serialize() throws IOException {
        ByteArrayOutputStream bout 
= new ByteArrayOutputStream();
        DataOutputStream dout 
= new DataOutputStream(bout);
        dout.writeUTF(_userid);
        dout.writeUTF(_name);
        dout.writeUTF(_answer);
        
        
return bout.toByteArray();
    }


    
public void deserialize(byte[] data) throws IOException {
        ByteArrayInputStream bin 
= new ByteArrayInputStream(data);
        DataInputStream din 
= new DataInputStream(bin);
        _userid 
= din.readUTF();
        _name 
= din.readUTF();
        _answer 
= din.readUTF();
    }


}



// *****************************KSerializable.java
package  chapter15;

import  java.io.IOException;

public   interface  KSerializable  {
    
byte[] serialize() throws IOException;
    
void deserialize(byte[] data) throws IOException;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值