当前位置:  技术问答>java相关

急!毕业设计:Applet调用Servlet访问数据库的问题。

    来源: 互联网  发布时间:2015-05-30

    本文导语:  我使用JDK1.3,JSDK2.0,JSWDK1.2等,配置正确,在浏览器里输入127.0.0.1:8080//examples/servlet/Hello显示正确 问题1 现在我想用DbApplet.class调用DbServlet.class来访问数据库。用浏览器在Db.htm里打开DbApplet.class时DbServlet没有执行,无...

我使用JDK1.3,JSDK2.0,JSWDK1.2等,配置正确,在浏览器里输入127.0.0.1:8080//examples/servlet/Hello显示正确

问题1
现在我想用DbApplet.class调用DbServlet.class来访问数据库。用浏览器在Db.htm里打开DbApplet.class时DbServlet没有执行,无任何返回信息。在vj++里运行DbApplet.class时jswdk的startserver.bat在DOS下有如下返回信息:

com.sun.web.core.InvokerServlet:init
DbServlet:init
HANDLER THREAD PROBLEM:Socket Closed
java.io.IOException:Socket Closed
at java.net.PlainSocketImpl.getInputStream(PlainsocketImpl.java:421)
at java.net.Socket$1.run(Socket.java:335)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.socket.getInputStream(Socket.java:332)
at com.sun.wev.server.ConnectionHandler.run(ConnectionHandler.java:161)

在jsdk的servletrunner.exe里只显示:DbServlet:init

而在DbApplet中显示:
java.io.FileNotFoundException: 127.0.0.1:8080//examples/servlet/DbServlet
不知道这是为什么。请告诉我详细解决方法。

问题2
为什么在IE浏览器中和在vj++里或appletviewer里运行applet的效果不同?

以下是源文件
DbApplet:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class DbApplet extends Applet implements ActionListener,ItemListener 
{
Panel 面板1=new Panel();Panel 面板2=new Panel();
Panel 面板3=new Panel();
TextField  姓名=new TextField();
TextField  学号=new TextField(8);
TextArea 成绩=new TextArea("查询结果");
Label 标签=new Label();
Label 选择专业=new Label("请选择你的专业",Label.CENTER);
Label 选择方式=new Label("请选择查询方式",Label.CENTER);
Label 填学号=new Label("请填入你的学号",Label.CENTER);
Label 填姓名=new Label("请填入你的姓名",Label.CENTER);
Label 选择时间=new Label("请选择查询时间",Label.CENTER);
Choice 类型=new Choice();Choice 专业=new Choice();
Choice 时间=new Choice();
Button 查询=new Button("查询");Button 退出=new Button("退出");
String 学期="";int i=0;

public void init()
{
setLayout(null);
面板1.setLayout(new GridLayout(14,1));
面板2.setLayout(new GridLayout(1,5));
面板3.setLayout(null);
专业.add("自动化");专业.add("工业自动化");专业.add("自动控制");
专业.add("电气自动化");
时间.add("第一学期");时间.add("第二学期");时间.add("第三学期");
时间.add("第四学期");时间.add("第五学期");时间.add("第六学期");
时间.add("第七学期");时间.add("第八学期");时间.add("所有学期");
类型.add("按学号查询");类型.add("按姓名查询(不推荐)");
姓名.setEditable(false);学号.setEditable(true);成绩.setEditable(false);
    
类型.addItemListener(this);时间.addItemListener(this);
查询.addActionListener(this);//退出.addActionListener(this);
  
面板1.add(选择专业);面板1.add(专业);面板1.add(标签);
面板1.add(选择方式);面板1.add(类型);面板1.add(标签);
面板1.add(填学号);面板1.add(学号);面板1.add(标签);
面板1.add(填姓名);面板1.add(姓名);面板1.add(标签);
面板1.add(选择时间);面板1.add(时间);
面板2.add(查询);面板2.add(标签);面板2.add(标签);
面板2.add(标签);面板2.add(退出);
面板3.add(面板2);面板3.add(成绩);
面板2.setBounds(10,30,600,20);成绩.setBounds(10,55,600,400);
add(面板1);add(面板3);
面板1.setBounds(10,100,100,300);面板3.setBounds(113,0,750,500);
setBounds(0,0,800,600);
setVisible(true);
}

public void executeQuery()
{
String qryString="";
if (学期.equals(""))
{
if (i==0)//按学号查询所有学期成绩
qryString="SELECT 课程名,学期,成绩 FROM 学生成绩数据表 JOIN 课程数据表 ON 学号="+学号.getText()+"AND 学生成绩数据表.课程编号=课程数据表.课程编号";
if (i==1)
qryString="SELECT 课程名,学期,成绩 FROM (学生成绩数据表 JOIN 学生数据表 ON 姓名="+姓名.getText()+") JOIN 课程数据表 ON 学生成绩数据表.课程编号=课程数据表.课程编号";
}
else
{
if (i==0)//按学号查询一个学期成绩
qryString="SELECT 课程名,学期,成绩 FROM 学生成绩数据表 JOIN 课程数据表 ON 学号="+学号.getText()+" AND 学期="+学期+" AND 学生成绩数据表.课程编号=课程数据表.课程编号";
if (i==1)
qryString="SELECT 课程名,学期,成绩 FROM (学生成绩数据表 JOIN 学生数据表 ON 姓名="+姓名.getText()+") JOIN 课程数据表 ON 学期="+学期+" AND 学生成绩数据表.课程编号=课程数据表.课程编号";
}
try
{
URL url=new URL("http://127.0.0.1:8080/examples/servlet/DbServlet");
String qry=URLEncoder.encode("qry")+"="+URLEncoder.encode(qryString);
URLConnection uc=url.openConnection();
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setUseCaches(false);
uc.setRequestProperty("Content-type","application/x-www-form-urlencoded");
DataOutputStream dos=new DataOutputStream(uc.getOutputStream());
dos.writeBytes(qry);
dos.flush();
dos.close();

InputStreamReader in=new InputStreamReader(uc.getInputStream());

int chr=in.read();
while(chr!=-1)
{
成绩.append(String.valueOf((char)chr));
chr=in.read();
}
in.close();
}
catch(MalformedURLException e)
{成绩.append(e.toString());}
catch(IOException e)
{成绩.append(e.toString());}

}

public void actionPerformed(ActionEvent ae)
{
if (ae.getSource()==查询)
{
成绩.setText("电信系学生成绩查询系统nn");
成绩.append("专业:"+专业.getSelectedItem()+" 学期:"+时间.getSelectedItem()+" 班级:"+" 学号:"+学号.getText()+"  姓名:"+姓名.getText()+"n");
成绩.append(" 个人成绩报表"+"n");
成绩.append("-------------------------------------------------------------------------------------------"+"n");
executeQuery();
}
}

public void itemStateChanged(ItemEvent e)
{
if (e.getItemSelectable()==类型)
{
if (类型.getSelectedIndex()==0)
{
姓名.setEditable(false);学号.setEditable(true);i=0;
学号.setText("");姓名.setText("");
}
else if(类型.getSelectedIndex()==1)
{
姓名.setEditable(true);学号.setEditable(false);i=1;
学号.setText("");姓名.setText("");
}
}
else if(e.getItemSelectable()==时间)
{
if (时间.getSelectedIndex()==0)
{学期="1";}
else if (时间.getSelectedIndex()==1)
{学期="2";}
else if (时间.getSelectedIndex()==2)
{学期="3";}
else if (时间.getSelectedIndex()==3)
{学期="4";}
else if (时间.getSelectedIndex()==4)
{学期="5";}
else if (时间.getSelectedIndex()==5)
{学期="6";}
else if (时间.getSelectedIndex()==6)
{学期="7";}
else if (时间.getSelectedIndex()==7)
{学期="8";}
else if (时间.getSelectedIndex()==8)
{学期="";}
}
}

}



DbServlet>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.sql.*;
import java.io.*;

public class DbServlet extends HttpServlet
{
Connection dbCon;

public void init() throws ServletException
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
dbCon=DriverManager.getConnection("jdbc:odbc:ESMS","Kiddbobo","165173");
}
catch(Exception e)
{
System.out.println("Databass connect failed(init)");
System.out.println(e.toString());
return;
}
}

public void doGet (HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
{
PrintWriter out=res.getWriter();
res.setContentType("text/html");
String qry=req.getParameter("qry");
try
{
Statement s=dbCon.createStatement();
ResultSet rs=s.executeQuery(qry);
while(rs.next())
{
out.println(rs.getString(1)+"-"+rs.getString(2));
out.println(rs.getString(3));
out.println("");
}
}
catch(SQLException e)
{System.out.println(e.toString());return;}
out.println();
out.close();
}

public void destroy()
{
try
{
dbCon.close();
}
catch(Exception e)
{
System.out.println("Error closing database(destroy)");
System.out.println(e.toString());
}
}
}


|
在你的代码里我看到了两个问题,这两个问题均出现在applet中:
1、你在发送请求到Servlet之后立即关闭了outputstream,这是不应该的,正确的做法是在你接收完成后再去关闭它;
2、因为每个IP包的最大长度为1400字节左右,所以你应该循环收取信息,直到收完为止;

个人意见,仅供参考。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 毕业设计求助(更多分相送)!
  • 毕业设计求助(更多分相送)!
  • linux 毕业设计求解答
  • 想要在linux下做个毕业设计,大家给推荐个题目吧
  • 毕业设计做JAVA,怎么写文档啊
  • 跟LINUX相关的毕业设计
  • 毕业设计课题
  • 求毕业设计题目
  • 毕业设计
  • 求linux相关的毕业设计题目
  • 毕业设计做完了,散分罗
  • 毕业设计用Linux可以做些什么!谢谢!
  • 高分求助!毕业设计里的一个问题
  • 毕业设计开题了:基于linux的个人防火墙的设计于实现,给点建议
  • 关于linux下USB驱动的毕业设计选题建议
  • 紧急提问,毕业设计选题,linux裁剪 和网格计算!!!!!!
  • 我做ejb方面的毕业设计,哪位高手给点建议!
  • 毕业设计课题求助:在linux平台下开发,有idea者请进!!!
  • 请教毕业设计相关题目询问各位高手。。
  • 毕业设计想写一个简单的shell出来,不知是否可行?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3