网络编程设计实验指导书.doc
实验一 JavaEE初级编程(2 学时)1、实验目的 (1)掌握Java程序运行环境的安装与配置。 (2)掌握Tomcat服务器的安装及环境配置方法。 (3)掌握对MyEclipse的集成开发环境的配置,为Java EE程序的实验做好准备工作。 (4)掌握编写与运行JSP程序的方法。(5)掌握JSP语言的基本编程方法,了解JSP中各种元素及标签的使用。2、基本要求:(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。 (2)独立完成所布置习题。 (3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。 (4)认真完成每次实验,并写出实验报告。3、实验内容和步骤:(1)安装JDK软件包。(2)设置环境变量,包括设置Java的运行路径和classpath。(3) 安装tomcat服务器,并了解服务器的文件结构。(4)安装MyEclipse,学会在该环境中如何配置Tomcat服务器,完成Java EE项目的部署及运行。(5)建立一个项目user,在其中首先创建一个注册页面,要求在注册页面中输入用户注册信息,如果注册成功,则给出成功提示,如果注册失败,则将页面返回到注册页面,并给出错误提示。l 建立一个SQLServer数据库Test,在其中建立数据表user,表中包含用户注册时所需要的各种信息字段,包括username,password,sex,age,hobby等,并向其中输入几条用户信息。l 建立一个JSP 注册页面regist.jsp,n 在其中通过form表单输入注册所需要的用户名称userName,用户密码userPassword,重复密码RUserPassword,用户性别userSex及年龄userAge还有用复选框表示的用户爱好hobby等信息,n 输入信息之后通过点击提交按钮submit,将这些信息提交到另一个regist_User.jsp页面。l 在regist_User.jsp页面中完成数据库的验证,根据验证结果给出提示,并转到相应的处理页面。n 首先利用jdbc进行SQLServer数据库连接,再调用Statement执行查询语句验证用户名是否已存在于数据库中,如果已存在,则将页面重定向到regist.jsp进行重新注册,并给出错误提示;如果用户名不存在则将用户的信息利用Statement保存到数据库中并返回注册成功的信息。实验二 基于Java EE架构程序设计(2 学时)1、实验目的:(1)理解 Java EE架构,掌握JSP,Servlet和JavaBean的使用。(2)掌握JSP 隐含对象的使用,尤其是request,session以及Application的使用(3)理解JavaEE中过滤器的功能及使用方法。2、基本要求:(1)注意自始至终贯彻课程中所介绍的Java EE程序设计风格,养成良好的编程习惯。 (2)独立完成所布置习题。 (3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。 (4)认真完成每次实验,并写出实验报告。3、实验内容与步骤:在项目user中建立用户登录页面,login.jsp,实现用户登录操作,然后利用隐含对象将用户的登录参数传递给Servlet程序loginServlet,并同时转到loginServlet上进行登录验证,如果登录成功,转入系统欢迎页面user/welcome.jsp页面,如果登录失败则返回登录页面。(1) 定义表示用户的JavaBean类User,User的属性包括username,userpassword,sex,age,hobby;方法包括设置username、设置password、设置sex,设置age,设置hobby,获取username、获取password、获取sex,获取age,获取hobby。(2) 创建login.jsp页面,在其中建立form表单,添加文本框和密码框控件,分别向其中输入用户名和密码,然后通过提交按钮,将它提交给后台的servlet程序的url映射名。(3) 建立工具类jdbcUtil.java,在其中建立getConnection得到数据库连接。(4) 在创建loginServlet.java,首先从request中提取客户端传递过来的参数,再通过调用工具类jdbcUtil取得数据库连接,通过查询语句将参数和数据库进行核对,如果用户输入的用户名称和密码不正确,给出错误提示,并将页面重定向到regist.jsp,如果用户输入的用户名和密码正确,进入系统欢迎页面。(5) 建立loginServlet后再到Web.xml中对servlet进行部署。(6) 为user文件夹中的所有文件添加过滤器,建立过滤器userfilter.java,在该过滤器中实现只有登录用户才能访问user文件夹下的页面,如果用户未登录拒绝其访问该文件夹下的所有页面。(7) 在Web.xml中对userFilter进行部署,设置激活条件。实验三 IE小型浏览器的设计与实现(2 学时)1、实验目的:(1)掌握InetAdress的概念与应用(2)掌握URL的概念(3)掌握URL与URL Collection类的应用 2、基本要求:(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。 (2)独立完成所布置习题。 (3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。 (4)认真完成每次实验,并写出实验报告。3、实验内容与步骤:(1)利用Java扩展包java.swing提供的JEditorPane类,来显示指定的网络资源的内容,能生成并响应超链接事件。public class browser extends JFrameJLabel jlabel;JTextField jtf;JEditorPane edpl;/定义无参构造方法,对程序进行初始化public browser()super("browser");Container con=getContentPane();jlabel=new JLabel("请输入要访问的网址:");jtf=new JTextField("");jtf.addActionListener(new MyEnter();JPanel panel=new JPanel();panel.setLayout(new GridLayout(2,1);panel.add(jlabel);panel.add(jtf);con.add(panel,BorderLayout.NORTH);edpl=new JEditorPane();edpl.setEditable(false);edpl.addHyperlinkListener(new MyHyperListener();con.add(new JScrollPane(edpl),BorderLayout.CENTER);setSize(600,800);setVisible(true);/ JEditorPane根据参数调用响应的页面void getPage(String site)tryedpl.setPage(site); /在edpl中显示指定网页catch(IOException e)JOptionPane.showMessageDialog(this,"连接错误","错误提示",JOpti onPane.ERROR_MESSAGE);/处理输入网址时的回车操作class MyEnter implements ActionListener public void actionPerformed(ActionEvent e)String string=jtf.getText();getPage(string);/处理网页中的超链接class MyHyperListener implements HyperlinkListener public void hyperlinkUpdate(HyperlinkEvent e)if(e.getEventType()=HyperlinkEvent.EventType.ACTIVATED)String string=e.getURL().toString();/获取超链接指向的地址getPage(string);/显示超链接指向的网页内容/建立主函数,对该类进行实例化public static void main(String args)browser mybrowser=new browser();mybrowser.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);实验四 基于TCP/IP协议的单客户/服务器Socket编程应用 (2 学时)1、实验目的:(1)掌握基于TCP/IP协议的流套接字的概念与应用(2)掌握ServerSocke和Socket的概念与应用(3) 掌握基于TCP/IP协议的C/S模式的编程应用2、基本要求:(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。 (2)独立完成所布置习题。 (3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。 (4)认真完成每次实验,并写出实验报告。3、实验内容和步骤:1、建立服务器端程序(1)talkserver.java,实现与客户的数据通信 :import java.io.*;import .*;public class talkServer /主函数 public static void main(String args) ServerSocket server; Socket socket; String s; try/建立ServerSocket,针对指定端口进行侦听 server=new ServerSocket(2000); System.out.println("等待连接"); socket=server.accept(); /侦听到客户端请求时,则接收请求,建立连接 System.out.println("连接成功"); System.out.println("*"); System.out.print(""); /建立和socket绑定的输入输出流,在服务器与客户端之间进行通信 InputStream in=socket.getInputStream(); OutputStream out=socket.getOutputStream(); DataInputStream din=new DataInputStream(in); DataOutputStream dout=new DataOutputStream(out); /建立从键盘进行输入的输入流 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); System.out.println("等待客户发送信息");/进入死循环,实现客户端与服务器之间的信息交互 while(true) System.out.println(""); System.out.println(""); s=din.readUTF(); System.out.println("从客户端接收到的信息为"+s); if(s.trim().equals("BYE") break; System.out.print("请输入你要发送的信息"); s=sin.readLine(); dout.writeUTF(s); if(s.trim().equals("BYE") break; din.close(); dout.close(); in.close(); out.close(); socket.close(); catch(IOException e) System.out.println("Error:"+e); 2建立客户端程序(1)talkclient.java,实现与服务器的数据通信/客户端程序,用来向服务器端发出请求并进行通信import java.io.*;import .*;public class talkclient public static void main(String args) Socket socket;String s;try /针对服务器指定端口建立socket,同时对服务器指定端口发出连接请求socket=new Socket("localhost",2000);System.out.println();System.out.println();System.out.println();/建立和socket绑定的输入输出流,以及从键盘读入数据的输入流InputStream in=socket.getInputStream();OutputStream out=socket.getOutputStream();DataInputStream din=new DataInputStream(in);DataOutputStream dou=new DataOutputStream(out);BufferedReader sin=new BufferedReader(new InputStreamReader(System.in);/进入死循环进行服务器端和客户端的通信while(true)System.out.print("请输入您要发送的信息");s=sin.readLine();dou.writeUTF(s);if(s.trim().equals("BYE") break;elseSystem.out.println("");System.out.println("");s=din.readUTF();System.out.println("从服务器接收到的信息为:"+s);if(s.trim().equals("BYE") break;din.close();dou.close();in.close();out.close();socket.close(); catch (Exception e) System.out.println(e);实验四 基于UDP协议的C/S模式的Socket编程应用 (2 学时)1、实验目的:(1)掌握基于UDP协议的数据报套接字的概念与应用(2)掌握DatagramSocket和DatagramPacket的概念与应用(3) 掌握基于UDP协议的C/S模式的编程应用2、基本要求:(1)注意自始至终贯彻课程中所介绍程序设计风格,养成良好的编程习惯。 (2)独立完成所布置习题。 (3)为保证尽量在统一安排的上机时间内编译运行通过程序,应事先设计好程序。 (4)认真完成每次实验,并写出实验报告。3、实验内容和步骤:本实验是基于UDP协议的C/S模式的图形界面通讯程序,以可视化操作模式,实现服务器与客户端之间的通信操作。1、建立服务器端程序(1)Serverapp_UDP.java,实现与客户的数据通信 :package talk;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;public class Serverapp_UDP extends WindowAdapter implements ActionListener,KeyListener TextField str_send; Label label; TextArea msg; Button send,exit; Panel p1; String hostname; DatagramSocket receiveSocket,sendSocket; DatagramPacket receivePacket,sendPacket; public void display() Frame f=new Frame("在线聊天服务器"); f.setSize(400,350); f.setLocation(400,400); f.setBackground(Color.red); p1=new Panel(); f.add(p1,"South"); msg=new TextArea(); msg.setSize(100,250); msg.setBackground(Color.white); msg.setEditable(false); f.add(msg); label=new Label("发送消息"); p1.add(label); str_send=new TextField(20); p1.add(str_send); str_send.addKeyListener(this); send=new Button("发送"); p1.add(send); send.addActionListener(this); exit=new Button("退出"); p1.add(exit); exit.addActionListener(this); f.addWindowListener(this); f.setVisible(true); try sendSocket=new DatagramSocket(5000); catch(Exception e) msg.append(e+"n"); /接受信息 public void receiveMessage() try receiveSocket=new DatagramSocket(3333);while(true)byte buf=new byte500;receivePacket=new DatagramPacket(buf,buf.length);receiveSocket.receive(receivePacket); if(receivePacket.getLength()=0) System.out.println("消息为空"); continue; ByteArrayInputStream bin=new ByteArrayInputStream(receivePacket.getData(); BufferedReader reader=new BufferedReader(new InputStreamReader(bin); msg.append("客户端:"+reader.readLine(); msg.append("n"); reader.close(); bin.close(); catch (Exception e) msg.append(e+"n"); /发送信息 public void sendMessage() try String s=str_send.getText(); str_send.setText(""); msg.append("服务器:"+s+"n"); ByteArrayOutputStream out=new ByteArrayOutputStream(); PrintStream pout=new PrintStream(out); pout.print(s); byte buf=out.toByteArray(); sendPacket=new DatagramPacket(buf,buf.length,InetAddress.getByName(hostname),3001); sendSocket.send(sendPacket); buf=null; catch (Exception err) msg.append(err+"n"); public void actionPerformed(ActionEvent e) if(e.getSource()=send)sendMessage();if(e.getSource()=exit)System.out.println("聊天程序已经关闭,再见!n");System.exit(0);public void windowsClosing(WindowEvent e)System.out.println("聊天程序已经关闭,再见n");System.exit(0);public void keyPressed(KeyEvent e) if(e.getSource()=str_send)if(e.getKeyChar()=KeyEvent.VK_ENTER)sendMessage();/主函数public static void main(String args)Serverapp_UDP app=new Serverapp_UDP();app.display();app.receiveMessage();public void keyReleased(KeyEvent arg0) / TODO Auto-generated method stubpublic void keyTyped(KeyEvent arg0) / TODO Auto-generated method stub2建立客户端程序Clientapp_UDP.java,实现客户端与服务之间的通信,package talk;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;public class Clientapp_UDP extends WindowAdapter implements ActionListener,KeyListenerTextField str_send;Label label;TextArea msg;Button send,exit;Panel p1;DatagramSocket receiveSocket,sendSocket;DatagramPacket receivePacket,sendPacket;public void display()Frame f=new Frame("在线聊天客户端"); f.setSize(400,350); f.setLocation(100,100); f.setBackground(Color.red); p1=new Panel(); f.add(p1,"South"); msg=new TextArea(); msg.setSize(100,250); msg.setBackground(Color.white); msg.setEditable(false); f.add(msg); label=new Label("发送消息"); p1.add(label); str_send=new TextField(20); p1.add(str_send); str_send.addKeyListener(this); send=new Button("发送"); p1.add(send); send.addActionListener(this); exit=new Button("退出"); p1.add(exit); exit.addActionListener(this); f.addWindowListener(this); f.setVisible(true); try sendSocket=new DatagramSocket(3000); catch(IOException e) msg.append(e+"n"); public void receiveMessage()try receiveSocket=new DatagramSocket(3001);while(true)byte buf=new byte500;receivePacket=new DatagramPacket(buf,buf.length);receiveSocket.receive(receivePacket);ByteArrayInputStream bin=new ByteArrayInputStream(receivePacket.getData(); BufferedReader reader=new BufferedReader(new InputStreamReader(bin); msg.append("服务器:"+reader.readLine(); msg.append("n"); catch (Exception e) msg.append(e+"n"); public void sendMessage() try ByteArrayOutputStream bout=new ByteArrayOutputStream(); PrintStream pout=new PrintStream(bout); pout.print(str_send.getText(); byte buf=bout.toByteArray(); sendPacket=new DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),3333); sendSocket.send(sendPacket); msg.append("客户端:"+str_send.getText()+"n"); str_send.setText(""); catch (Exception err) msg.append(err+"n"); public void actionPerformed(ActionEvent e) if(e.getSource()=send)sendMessage();if(e.getSource()=exit)System.out.println("聊天程序已经关闭,再见!n");System.exit(0);public void windowsClosing(WindowEvent e)System.out.println("聊天程序已经关闭,再见n");System.exit(0);public void keyPressed(KeyEvent e) if(e.getSource()=str_send)if(e.getKeyChar()=KeyEvent.VK_ENTER)sendMessage();public static void main(String args) Clientapp_UDP client=new Clientapp_UDP();client.display();client.receiveMessage();public void keyReleased(KeyEvent arg0) / TODO Auto-generated method stubpublic void keyTyped(KeyEvent arg0) / TODO Auto-generated method stub