桂电javaee实验报告

桂 林 电 子 科 技 大 学

_____javaee编程技术______

实验名称_____JAVA EE 开发环境__________                

铺导员意见:

一、实验目的

1、掌握常用的Java EE 集成开发环境的使用。

2、通过在Java EE 开发环境中创建和运行一些实例项目,熟悉Java EE 的基本开发、部署和运行的过程。为后续实验打下基础。

二、实验类型

设计型。

三、实验内容

1、因NetBeans 针对Java EE 开发的版本在集成相关服务器方面比较齐全,容易安装部署,并且理论课教材上的实例项目也以NetBeans 作为平台,所以实验环境选用NetBeans 平台。但实验室计算机上也安装了Java EE 开发中常用的MyEclipse,大家在有时间的时候也可进行熟悉掌握。打开实验室计算机上的NetBeans 开发工具,将至少一个源自教材或实验指导书上的实例项目导入到开发环境中编译、部署和运行。

2、自己在开发环境中重新创建一个简单的“WEB 项目”,在其中创建至少一个自己的JSP 页面文件,该页面文件的功能是,通过在页面文件中嵌入Java 代码,并通过代码显示自己的学号和姓名,将其作为项目首页,进行部署、运行和演示。

实验名称___________Servlet 基础____________

一、实验目的

1、理解Servlet 的作用、生命周期及相应接口所包含的方法。

2、掌握通过继承HttpServlet 类来创建Servlet 的方法。

二、实验类型

设计型

三、实验内容

首先运行教材或实验指导书上的一些例子程序,然后自己编写Servlet,能够接收客户端输入的两个整数,并将这两个数相加的结果显示出来。另外能通过扩充该servlet 的功能或创建新的servlet 来演示发送非HTML 文档。

四、代码部分

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body bgcolor="#FFFFFF">

<h1 align="center"> <b>加法器</b></h1>

<form action="getpostdata" method ="post">

<p> </p>

<table width="52%" border="2" align="center">

<tr bgcolor="#FFFFCC">

<td align="center" width="43%"> <div align="center">第一个数:</div></td>

<td width="57%"> <div align="left">

<input type="text" name="one">

</div></td>

</tr>

<tr bgcolor="#CCFF99">

<td align="center" width="43%"> <div align="center">第二个数:</div></td>

<td width="57%"> <div align="left">

<input type="text" name="two">

</div></td>

</tr>

</table>

<p align="center">

<input type="reset" name="Reset" value="重置">

<input type="submit" name="Submit2" value="提交">

</p>

</form>

</body>

</html>

然后右键单击项目名,选择“新建”——>“Servlet”,会弹出“新建Servlet“对话框, “类名”和

servlet 名称均设置为“getpostdata”,对应的“URL 模式”名设置为“/getpostdata”。最终生成的servlet

代码为:

import java.io.*;

import java.net.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class GetPostData extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=gb2312");

request.setCharacterEncoding("gb2312");

PrintWriter out = response.getWriter();

out.println(

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H1 ALIGN=CENTER>" + "get post data " + "</H1>\n" +

"<UL>\n" +

" <LI><B>one</B>: "

+ request.getParameter("username") + "\n" +

" <LI><B>two</B>: "

+ request.getParameter("password") + "\n" +

"</UL>\n" +

"</BODY></HTML>");

out.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

public String getServletInfo() {

return "Short description";

}

}

实验名称_______Servlet 会话及Servlet 协作____ 

一、实验目的

1、掌握会话的概念和作用。

2、掌握Cookie、URL 重写和HttpSession 对象等常见会话跟踪技术。

3、会使用RequestDispatcher 对象实现Servlet 间协作。

二、实验类型

设计型

三、实验内容

1、首先运行教材或实验指导书上的一些例子程序,然后设计一个进行网络购物的订购页面,让用户选择自己喜欢的2 种商品放入购物车,然后使用一种会话管理方式,将用户在订购页面所选购的商品在购物车页面中显示出来,并能返回订购页面再次选购其它商品。

2、设计一个进行乘法运算的页面,生成两个运算数让用户填写相乘结果并提交。当用户填写和提交的结果正确时,显示“计算正确”的提示信息页面。结果错误时,显示“计算错误”的提示信息页面,以此演示通过RequestDispatcher 对象实现Servlet 之间请求的传递和协作。

四、代码部分

乘法:

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body bgcolor="#FFFFFF">

<h1 align="center"> <b>乘法器</b></h1>

<form action="getpostdata" method ="post">

<p> </p>

<table width="52%" border="2" align="center">

<tr bgcolor="#FFFFCC">

<td align="center" width="43%"> <div align="center">第一个数:</div></td>

<td width="57%"> <div align="left">

<input type="text" name="one">

</div></td>

</tr>

<tr bgcolor="#CCFF99">

<td align="center" width="43%"> <div align="center">第二个数:</div></td>

<td width="57%"> <div align="left">

<input type="text" name="two">

</div></td>

</tr>

</table>

<p align="center">

<input type="reset" name="Reset" value="重置">

<input type="submit" name="Submit2" value="提交">

</p>

</form>

</body>

</html>

然后右键单击项目名,选择“新建”——>“Servlet”,会弹出“新建Servlet“对话框, “类名”和

servlet 名称均设置为“getpostdata”,对应的“URL 模式”名设置为“/getpostdata”。最终生成的servlet

代码为:

import java.io.*;

import java.net.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class GetPostData extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=gb2312");

request.setCharacterEncoding("gb2312");

PrintWriter out = response.getWriter();

out.println(

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H1 ALIGN=CENTER>" + "get post data " + "</H1>\n" +

"<UL>\n" +

" <LI><B>one</B>: "

+ request.getParameter("username") + "\n" +

" <LI><B>two</B>: "

+ request.getParameter("password") + "\n" +

"</UL>\n" +

"</BODY></HTML>");

out.close();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

processRequest(request, response);

}

public String getServletInfo() {

return "Short description";

}

}

实验名称___JSP 脚本元素、指令和动作组件___

一、实验目的

1、掌握JSP 的概念和工作原理。

2、掌握表达式、注释、变量、方法、类等JSP 脚本元素。

3、掌握JSP 中的page 指令及其属性,掌握include 指令,了解taglib 指令。

4、掌握include、forward、param 等动作组件。

二、实验类型

设计型

三、实验内容

首先运行教材或实验指导书上的一些例子程序,然后自己编写JSP 页面文件,能够演示至少JSP 脚本元素中的变量、方法和类的使用,能演示JSP 中至少2 种指令和动作组件的使用。

四、代码部分

1、JSP 脚本元素——表达式的示例expression.jsp

<%@ page language="java" pageEncoding="GB2312" %>

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

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>JSP 表达式</title>

</head>

<body bgcolor="#FFFFFF">

<% for(int i=1;i<=5;i++){%>

<H<%=i%>>你好</H<%=i%>><BR>

<%}%>

</body>

</html>

3、声明变量

<%@ page language="java" pageEncoding="GB2312" %>

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

<HTML>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<head>

<title>声明变量</title>

</head>

<BODY ><FONT size=5>

<%i++; %>

<P>您是第 <%=i%>个访问本站的客户。</p>

<%!int i=0; %>

</BODY>

</HTML>

4、声明方法

<%@ page language="java" %>

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

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>声明方法</title>

</head>

<body bgcolor="#FFFFFF">

<%! String sayHello()

{ return "Hello";

}

%>

<%=sayHello()%>

</body>

</html>

5、声明类

<%@ page language="java" %>

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

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>声明类</title>

</head>

<body bgcolor="#FFFFFF">

<%! public class sayHello

{boolean county ;

sayHello(boolean county)

{this.county=county;

}

String Hello()

{

if(county)

return "Hello";

else return "你好";

}

}

%>

<% sayHello a =new sayHello(false);%>

<%=a.Hello()%>

</body>

</html>

6、JSP 的page 指令之language 属性和session 属性

<%@ page language="java" %>

<%@ page session="true"%>

<%

if(session.getAttribute("name")==null)

session.setAttribute("name","GUET");

%>

<% out.println(session.getAttribute("name"));%>

7、JSP 的page 指令之errorPage 属性

(1)error.jsp 页面(当后面的页面出错时被运行的页面)

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JSP Page</title>

</head>

<body>

<h1>出错啦!!</h1>

</body>

</html>

(2)testError.jsp 页面(首先被运行的页面,包含数组下标越界的错误,然后前面的error.jsp 页面会被运

行)

<%@ page language="java" %>

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

<%@ page errorPage="error.jsp" %>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>页面错误属性测试</title>

</head>

<body bgcolor="#FFFFFF">

<%!int[] a={1,2,3};%>

<%=a[3]%>

</body>

</html>

8、JSP 的page 指令之include 属性

(1)copyright.html 页面

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title> HTML</title>

</head>

<body bgcolor="#FFFFFF">

<HR>

<h3>All the rights are reserved</h3>

</body>

</html>

(2)include.jsp 页面

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

<html>

<BODY >

<h1>include 示例</h1>

<H3>

<%@ include file="copyright.html" %>

</H3>

</BODY>

</HTML>

9、JSP 动作组件之include 动作组件

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

<HTML>

<BODY >

<h1>include 动作示例</h1>

<BR>

<!-copyright.html 文件可用前面例子中的->

<jsp:include page="copyright.html" flush="true"/>

</BODY>

</HTML>

10、JSP 动作组件之forward 动作组件

Forward 动作组件用于将浏览器显示的网页,导向至另一个HTML 网页或JSP 网页,客户端看到的

地址是A 页面的地址,而实际内容却是B 页面的内容。

catalog1.html 页面代码如下:

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>forward 示例</title>

</head>

<body bgcolor="#FFFFFF">

当前推荐图书清单:

<ul>

<li>国画</li>

<li>梅次故事</li>

<li>朝夕之间</li>

</ul>

</body>

</html>

catalog2.html 页面代码如下:

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>forward 示例</title>

</head>

<body bgcolor="#FFFFFF">

当前推荐图书清单:

<ul>

<li>J2EE 编程技术 </li>

<li>J2EE 服务器端高级编程</li>

<li>JSP 高级编程</li>

</ul>

</body>

</html>

通过 forward 动作组件调用前面两个文件的forward.jsp 页面代码如下:

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

<HTML>

<HEAD>

<TITLE>forward</TITLE>

</HEAD>

<BODY>

<P>

当前推荐图书清单:

<% double i=Math.random();

if(i>0.5)

{

%>

<jsp:forward page="catalog1.html"></jsp:forward>

<%

}

else

{

%>

<jsp:forward page="catalog2.html"></jsp:forward>

<%

}

%>

</BODY>

</html>

11、JSP 动作组件之param 动作组件

Param 动作组件用于传递参数值,必须配合include 或forward 动作组件一起使用。下面通过两个页

面间传递参数的例子来演示如何使用param 动作组件。

(1)发送参数的页面param1.jsp

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

<HTML>

<title>向加载文件传递参数示例</title>

<BODY>

<P>向加载文件传递参数示例:

<jsp:include page="add.jsp">

<jsp:param name="start" value="0" />

<jsp:param name="end" value="100" />

</jsp:include>

</BODY>

</HTML>

(2)接收参数的页面add.jsp

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

<HTML>

<BODY>

<% String start=request.getParameter("start"); //获取值。

String end=request.getParameter("end"); //获取值。

int s=Integer.parseInt(start);

int e=Integer.parseInt(end);

int sum=0;

for(int i=s;i<=e;i++)

{ sum=sum+i;

}

%>

<P>

从<%=start%>到<%=end%>的连续和是:

<BR>

<%=sum%>

</BODY>

</HTML>

11、JSP 动作组件之plugin 动作组件

plugin 动作组件用于执行一个Applet 或者Bean

(1)先生成一个Applet,代码如下Circle.java

import java.applet.Applet;

import java.awt.Color;

import java.awt.Graphics;

public class Circle extends Applet {

public void paint(Graphics g){

g.setColor(new Color(255,0,255));

g.fillArc(0,0,50,50,0,360);

}

}

(2)下面是通过plugin 动作组件调用Applet 的JSP 页面

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

<HTML>

<BODY>

<jsp:plugin type="applet" code="Circle.class" >

<jsp:fallback>

Plugin tag OBJECT or EMBED not supported by browser.

</jsp:fallback>

</jsp:plugin>

</body>

</html>

实验名称______JSP 内置对象_____________

一、实验目的

1、掌握request、response、out、session、application、config、pagecontext、page 和exception

等九种JSP 内置对象的作用和用法。

2、掌握JSP 内置对象的作用范围。

3、了解表达式语言(EL)。

二、实验类型

设计型

三、实验内容

1、首先运行教材或实验指导书上的一些例子程序,然后自己编写一个或多个不同于例子的JSP 页面文件,能够演示至少3 个内置对象的使用。

四、代码部分

greeting.jsp 页面如下

<%@ page language="java" %>

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

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>Lomboz JSP</title>

</head>

<body bgcolor="#FFFFFF">

<%

Date today =new Date();

int h= today.getHours();

if(h<12)response.sendRedirect("morning.jsp");

else response.sendRedirect("afternoon.jsp");

%>

</body>

</html>

(2)morning.jsp 页面如下:

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

<%@ page language="java" %>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>Lomboz JSP</title>

</head>

<body bgcolor="#FFFFFF">

早上好!

</body>

</html>

afternoon.jsp 页面如下:

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

<%@ page language="java" %>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>Lomboz JSP</title>

</head>

<body bgcolor="#FFFFFF">

下午好!

</body>

</html>

request 对象

(1)通过表单向服务器提交信息的input.html 如下

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html><body>

<form action="getParam.jsp">

姓名<input type="text" name="UserName">

<br>

选出你喜欢的歌星:

<input type="checkbox" name="checkbox1" value="谢霆峰">

谢霆峰

<input type="checkbox" name="checkbox1" value="甄子丹">

甄子丹

<input type="checkbox" name="checkbox1" value="刘德华">

刘德华

<input type="checkbox" name="checkbox1" value="李连杰">

李连杰

<input type="submit" value="提交">

</form>

</body></html>

(2)获取客户端利用前面的(1)中的input.html 所提交的信息的页面getParam.jsp 如下

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

<HTML>

<BODY>

你好,

<%! String Name;%>

<%

Name=request.getParameter("UserName");

String stars=new String("你喜欢吃的水果有:");

String[] paramValues = request.getParameterValues("checkbox1");

for(int i=0;i<paramValues.length;i++)stars+=paramValues[i]+" ";

%>

<%=Name%>

<br>

<%=stars%>

</BODY>

</HTML>

(3)下面是向后面的(4)中页面sum.jsp 提交信息的页面select.jsp

<HTML>

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

<BODY ><Font size=5 >

<FORM action="sum.jsp" method=post name=form>

<P>选择计算方式 <Select name="sum" size=2>

<Option Selected value="1">计算1 到n 的连续和

<Option value="2">计算1 到n 的平方和

<Option value="3">计算1 到n 的立方和

</Select>

<P>选择n 的值:

<Select name="n" >

<Option value="10">n=10

<Option value="20">n=20

<Option value="30">n=30

<Option value="40">n=40

<Option value="50">n=50

<Option value="100">n=100

</Select>

<BR><BR>

<INPUT TYPE="submit" value="提交" name="submit">

</FORM>

</FONT>

</BODY>

</HTML>

(4)下面是获取前面(3)中select.jsp 页面中的下拉列表框所提交信息的页面sum.jsp

<HTML>

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

<BODY ><Font size=5 >

<% long sum=0;

String s1=request.getParameter("sum");

String s2=request.getParameter("n");

if(s1==null)

{s1="";}

if(s2==null)

{s2="0";}

if(s1.equals("1"))

{int n=Integer.parseInt(s2);

for(int i=1;i<=n;i++)

{sum=sum+i;

}

}

else if(s1.equals("2"))

{int n=Integer.parseInt(s2);

for(int i=1;i<=n;i++)

{sum=sum+i*i;

}

}

else if(s1.equals("3"))

{int n=Integer.parseInt(s2);

for(int i=1;i<=n;i++)

{sum=sum+i*i*i;

}

}

%>

<P>您的求和结果是<%=sum%>

</FONT>

</BODY>

</HTML>

实验名称_____JavaBean 的使用________________ 

一、实验目的

1、掌握JavaBean 的原理和定义。

2、掌握与JavaBean 相关的JSP 动作组件。

3、会在JSP 中使用JavaBean。

二、实验类型

设计型

三、实验内容

首先运行教材或实验指导书上的一些例子程序,然后自己编写一个或多个不同于例子的JavaBean 和JSP 页面文件等,能够演示JavaBean 与JSP 相结合的使用。

四、代码部分

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<html>

<head>

<title>JavaBean 测试</title>

</head>

<body bgcolor="#FFFFFF">

<jsp:useBean id="student1" scope="page" class="com.jsp.Student" />

利用标记获取JavaBean 属性:

<jsp:getProperty name="student1" property="name" />

<br>

利用对象方法获取JavaBean 属性:

<%=student1.getName()%>

<br>

利用标记设置JavaBean 属性name 为temp:

<jsp:setProperty name="student1" property="name" value="temp" />

<br>

获取新的属性:

<jsp:getProperty name="student1" property="name" />

<br>

利用对象方法设置JavaBean 属性name 为zhang:

<%student1.setName("zhang");%>

<br>

获取新的属性:

<%=student1.getName()%>

</body>

</html>

3、下面演示如何通过请求参数来给JavaBean 的属性赋值。首先是一个通过表单的形式向request 对象中

添加参数的页面input.html,代码如(1)中所示。

(1)input.html 页面的效果图和代码如下:

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>Param HTML</title>

</head>

<body bgcolor="#FFFFFF">

<form action="param.jsp">

姓名<input type="text" name="UserName">

<br>

年龄<input type="text" name="age">

<br>

专业<input type="text" name="major">

<br>

<input type="submit" value="提交">

</form>

</body>

</html>

(2)下面是利用请求中的参数值给JavaBean 的属性赋值的页面param.jsp 如下:

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<%

request.setCharacterEncoding("gb2312");

%>

<html>

<head>

<title>利用请求参数设置JavaBean 属性</title>

</head>

<body bgcolor="#FFFFFF">

<jsp:useBean id="student2" scope="page" class="com.jsp.Student" />

<jsp:setProperty name="student2" property="name" param="UserName" />

<jsp:setProperty name="student2" property="age" param="age" />

<jsp:setProperty name="student2" property="major" param="major" />

<tr>

<td>姓名</td>

<td><jsp:getProperty name="student2" property="name" /></td>

</tr>

<tr>

<td>年龄</td>

<td><jsp:getProperty name="student2" property="age" /></td>

<tr>

<td>专业</td>

<td><jsp:getProperty name="student2" property="major" /></td>

</tr>

</tr>

</body>

</html>

4、下面是一个通过JSP 和JavaBean 相结合来实现网页计数器的简单例子。

(1)首先将网页计数器以一个JavaBean 的形式来封装实现:

public class counter {

//初始化JavaBean 的成员变量

int count = 0;

// Class 构造器

public counter() {

}

//属性count 的Get 方法

public int getCount() {

//获取计数器的值,每一次请求都将计数器加1

count++;

return this.count;

}

//属性Count 的Set 方法

public void setCount(int count) {

this.count = count;

}

}

(2)然后是通过引用上述JavaBean 来实现网页计数的动态页面counter.jsp:

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>网页计数器</title>

</head>

<body bgcolor="#FFFFFF">

<jsp:useBean id="counter" scope="application" class="com.jsp.counter" />

<center>当前页面访问次数:

<jsp:getProperty name="counter" property="count"/>

</center>

</body>

</html>

实验名称_______JDBC 数据库编程____________ 

一、实验目的

1、掌握JDBC 工作原理。

2、掌握JDBC 编程中Connection、Statement、ResulSet 等几个主要的类的使用。

3、了解连接池的概念和应用。

二、实验类型

设计型

三、实验内容

1、首先运行教材或实验指导书上的一些例子程序,然后自己设计一个数据库。通过JDBC 来进行数据库的访问,以Access 或SQL Server 等为数据库管理系统,建立一个用于图书管理的简单数据库,书的信息包括索引号、书名、作者、定价、出版社等。要求具有图书记录的查询、添加、修改、删除和显示等功能。

四、代码部分

对于 java 而言,数据库的连接有四种方法:

类型 1JDBC-ODBC

作 为 JDK1.1 后的一部分, 它是sun.jdbc.odbc 包的一部。通过Application--->JDBC-ODBC

Bridge---->JDBC-ODBC Library--->ODBC Driver-->Database 的形式实现。适用于快速的原型系统,没有提供JDBC 驱动的数据库如Access。

类型 2JAVA to Native API

利用开发商提供的本地库来直接与数据库通信。通过Application--->JDBC Driver---->Native Databaselibrary---->Database 的形式。比类型1 性能略好。

类型 3Java to net

通过Application--->Jdbc Driver----->java middleware--->JDBC Driver---->Database 的形式。具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。

类型 4JAVA to native dababase(SUN 定义的JDBC 标准)

通过Application---> JDBC Driver ----->Database Engine--->Database 的形式。具有最高的性能,通过自己的本地协议直接与数据库引擎通信,具备在 Internet 装配的能力。

在以上几种方法中,一般常用两种方法:使用JDBC-ODBC 桥接驱动或者使用纯Java 的JDBC 驱动。纯Java 的JDBC 驱动程序是独立的连接驱动程序,不需要中间服务器,与数据库实现通信的整个过程均由Java 语言实现。这种方法效率高使用广泛,但缺点是需要下载相应的驱动类包,且不同的数据库的连接代码可能不同。

几种更新数据记录(insertdeleteupdate)的方法以及PreparedStatement 类的应用举例:

1、增加数据记录

增加数据记录的 SQL 语法是:

insert into 表名(字段名1,字段名2……)values(字段值1,字段值2……)

例如: insert into xsda(classID,name,sex,birthDate,isMember,address,resume)values(12,’ 张雷’,’

男’,’1988-9-8’,1,’北京’,’’)

使用 Statement 对象增加数据表记录对方法:

首先创建一个 SQL 语句,然后调用Statement 对象的executeUpdate()方法。

Stmt.executeUpaate(sql);

该方法会返回一个整数,表示成功插入的记录数。

使用 ResultSet 对象的moveToInsertRow 和insertRow 方法增加数据标记录:

String sql=”select * from xsda”;

ResultSet rs=stmt.executeQuery(sql); //获取数据表的全部结果集

rs.moveToInsertRow(); //将数据表指针移到插入记录位置

rs.updateInt(2,13); //向classID 字段输入数据

rs.updateString(3,’黄红’); //向name 字段输入数据

rs.updateString(4,’女’); //向sex 字段输入数据

rs.updateString(5,’1997-9-8’); //向birthDate 字段输入数据

rs.updateString(6,’大连’); //向address 字段输入数据

rs.updateInt(7,1); //向isMember 字段输入数据

rs.updateString(8,’无’); //向resume 字段输入数据

try {

rs.insertRow(); //真正写入数据

}

catch(Exception e){}

使用 PrepareStatement 对象增加数据表记录

与使用 Statement 类似,只是创建SQL 语句时,可以带参数(以“?”表示),插入时通过更改参数实现记录的更新。

String sql=”insert into xsda(classID,name,sex,birthDate,isMember,address,resume)values(?,?,?,?,?,?,’ ’)”;

PrepareStatement pstmt=ConnectServer.con.prepareStatement(sql);

pstmt.setInt(1,14);

pstmt.setString(2,’黄少军’);

pstmt.setString(3,’男’);

pstmt.setString(4,’1987-8-4’);

pstmt.setString(5,’上海’);

pstmt.setInt(6,0);

int rowCount=pstmt.executeUpdate();

if(rowCount>0) System.out.println(“成功插入记录”);

2、数据表记录修改

数据表记录修改的 SQL 语法是:

update 表名 set 字段 1=字段值1,字段值2……where 特定条件

例如: update xsda name=’黄小华’ where name=’黄少华’

使用 Statement 对象修改数据表记录:

首先创建一个 SQL 语句,然后调用Statement 对象的exexuteUpdate()方法:stmt.executeUpdate(sql);

上述方法可以返回一个整数,表示成功修改的记录数。

使用 ResultSet 对象修改数据记录:

String sql=”select * from xsda where name=’黄少华’”;

ResultSet rs=stmt.executeQuery(sql); //获取数据表的结果集

if(rs.next()){

rs.updateString(3,’黄小华’); //修改name 字段的数据

try{

rs.updateRow();

}catch(Exception e)

{}

}

使用 PrepareStatement 对象修改数据表记录

与使用 Statement 类似,只是创建SQL 语句时,可以带参数(以”?”表示),修改时通过更改参数实现

记录的更新。

String sql=”update xsda set name=? where name=’黄少华’;

PrepareStatement pstmt=ConnectServer.con.prepareStatement(sql);

pstmt.setString(1,’黄小华’);

int rowCount=pstmt.executeUpdate();

if(rowCount>0) System.out.println(“成功修改记录”);

3、删除数据表记录

删除数据表记录的 SQL 语法:

delete from 表名 where 特定条件

例如:delete from xsda where name=’黄小华’;

使用 Statement 对象删除数据表记录:

首先创建一个 SQL 语句,然后调用Statement 对象的executeUpdate()方法:stmt.executeUpdate(sql);

上述方法返回一个整数,表示成功删除的记录数。

使用 Result 对象删除数据表记录:

String sql=”select * from xsda where name=’黄少华’”;

ResultSet rs=stmt.executeQuery(sql);

if(rs.next())

{

rs.de.eteRow( );

try{

rs.updateRow( );

} catch(Exception e) { }

}

使用 PrepareStatement 对象删除数据表记录:

与使用 Statement 类似,只是创建SQL 语句时,可以带参数(以”?”表示)。

String sql=”delete from where name=?”;

PrepareStatement pstmt=ConnectServer.con.prepareStatement(sql);

pstmt.setString(1,’黄小华’);

int rowCount=pstmt.executeUpdate();

if(rowCount>0) System.out.println(“成功删除记录”);

import java.sql.*;

public class DbTest

{

public static void main(String args[])

{

String name,xuehao,chinese,math,english;

Connection conn=null;

Statement stmt=null;

ResultSet rs=null;

try

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}

catch(ClassNotFoundException e)

{

}

try

{

conn=DriverManager.getConnection("jdbc:odbc:grade"); //先对数据库建立了名字为grade 的数

据源

stmt=conn.createStatement();

rs=stmt.executeQuery("SELECT * FROM grade");

while(rs.next())

{

name=rs.getString("姓名");

xuehao=rs.getString("学号");

chinese=rs.getString("语文");

math=rs.getString("数学");

english=rs.getString("英语");

System.out.println("学号: "+"姓名 "+"语文 "+"数学 "+"英语 ");

System.out.println(" "+xuehao+" "+name+" "+chinese+" "+math+" "+english);

System.out.println();

}

conn.close();

}

catch(SQLException e)

{

System.out.println(e.getMessage());

}

}

}

实验名称_____EJB 及WEB 服务_______________

一、实验目的

1、掌握EJB 的概念和作用,了解常见的EJB 容器及其使用。

2、掌握简单的会话EJB、实体EJB 和消息驱动EJB 的开发部署方法。

3、了解Web 服务的概念和技术体系及其目前的一些发展状况,了解Java EE 平台下的Web 服务的实

现方法和.Net 平台下Web 服务的实现方法。

二、实验类型

设计型

三、实验内容

首先运行教材或实验指导书上的一些例子程序,然后自己设计简单的EJB 来进行应用和演示。并能

设计简单的WEB 服务应用程序进行部署和功能演示。在NetBeans 中设计一个简单的Web 服务来部署运行

进行功能演示。

四、预备知识。

1、下面是如何开发一个无状态会话EJB 的例子。通过本例了解一个简单的EJB 的开发、部署过程。

开发一个无状态的会话 Bean 包括以下两个步骤:

(1)开发Bean 实现类。

(2)开发接口文件。接口文件包括本地接口文件和远程接口文件。本地接口文件供与EJB 组件在同

一个JVM 的本地客户调用时使用,远程接口文件供着其它JVM 运行的远端客户调用时使用(一个

EJB 仅实现上述接口中的一种,也可以两种接口都实现)。

创建方法和过程为:

点击菜单的“文件”——>“新建项目…”——>“Java EE”——>“企业应用程序”,然后依次

点击下一步按提示完成名为ejbstudy 的项目的创建。

右键点击之,选择“新建”——>“会话Bean…”,会看到下图所示的提示窗口,给该EJB 名称设置为Converter,所在包命名为com.ejb,把创建接口的“本地”和“远程”前面打勾,NetBeans 为EJB 组件自动生成了所需的三个文件: EJB 实现文件ConverterBean.java , 远程接口文件ConverterRemote.java 和ConverterLocal.java:

在代码“@Stateless”之后右键单击,在弹出的菜单中选择“插入代码…”,再选择“添加Business方法…”

在“名称”文本框中输入商业方法的名称“toLowerCase”,在“返回类型”文本框中输入“String”,如果要使该EJB 能够被本地对象和远程对象都能访问,则选中“两者”选项,否则选一个。单击“添加…”按钮可以为商业方法添加参数信息,这里为商业方法添加一个String 类型的参数s。最后单击“确定”按钮,商业方法添加完毕。

然后以同样的步骤为 EJB 组件添加商业方法:toUpperCase(String s)。

下面需要在 ConverterBean 的源文件中为商业方法提供具体的实现,完整程序代码分别如下面的程序

ConverterBean.java、ConverterLocal.java 和ConverterRemote.java 所示。

ConverterBean.java 如下:

package com.ejb;

import javax.ejb.Stateless;

@Stateless

public class ConverterBean implements ConverterBeanRemote, ConverterBeanLocal {

public String toLowerCase(String s) {

return s.toLowerCase(); //s 为字符串对象,调用系统给它提供的toLowerCase()方法。

}

public String toUpperCase(String s) {

return s.toUpperCase(); //s 为字符串对象,调用系统给它提供的toUpperCase()方法。

}

// Add business logic below. (Right-click in editor and choose

// "Insert Code > Add Business Method")

}

ConverterLocal.java 如下:

package com.ejb;

import javax.ejb.Local;

/**

*

* @author Administrator

*/

@Local

public interface ConverterBeanLocal {

String toLowerCase(String s);

String toUpperCase(String s);

}

ConverterRemote.java 如下:

package com.ejb;

import javax.ejb.Remote;

/**

*

* @author Administrator

*/

@Remote

public interface ConverterBeanRemote {

String toLowerCase(String s);

String toUpperCase(String s);

}

至此EJB 组件已经开发完毕,下面将EJB 组件发送到应用服务器上。在“项目”视图中选中“ejbstudy-ejb”,单击右键选择“部署”,则EJB 组件将被成功部署到应用服务器上。在NetBeans 底部的输出窗口中可以看到EJB 组件发布成功的提示信息。

打开 IE 浏览器,在地址栏输入http://localhost:8080

下面通过在前面创建的ejbstudy 企业应用程序中的web 模块ejbstudy-war 中创建一个名为

“testConverter”的Servlet 来测试上面的EJB 组件。

从 JavaEE5 开始支持一种称为“资源依赖注入”的特性,即JavaEE 组件在运行过程中所需要访问的

企业资源信息,如EJB、JavaMail 邮件资源等,可以通过标记的形式进行声明。这样,当组件部署到应用

服务器上时,应用服务器根据标记或部署描述文件声明自动为组件生成对资源的引用。这种特性免去了

开发人员编写复杂的资源访问代码的痛苦工作,大大提高了开发效率。下面演示如何在Servlet 中通过“资

源依赖注入”特性访问EJB 组件。

首先可以利用 NetBeans 创建一个名为TestConverter 的Servlet 的框架代码,然后在该Servelet 的源代

码中,单击右键,选择“插入代码…”,然后选择“调用企业Bean…”对话框,

在该 Servlet 的源代码中增加了代码:

@EJB

private ConverterLocal converter;

完善该Servlet 的源代码,主要是完善doPost 和doGet 所调用的processRequest 的代码如下:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

String s=request.getParameter("param");

String re=converter.toUpperCase(s);

try {

out.println("<html>");

out.println("<head>");

out.println("<title>Servlet TestConverter</title>");

out.println("</head>");

out.println("<body>");

out.println("原来的字符串为:"+s);

out.println("<br>");

out.println("调用EJB 商业方法后转换得到的字符串为:"+re);

out.println("<h1>Servlet TestConverter at " + request.getContextPath () + "</h1>");

out.println("</body>");

out.println("</html>");

} finally {

out.close();

}

}

生成和部署整个项目,然后打开浏览器,在地址栏输入:

http://localhost:8080/ejbstudy-war/TestConverter?param=helloguet

得到运行结果如下:

桂电javaee实验报告

下面是一个关于Web 服务的实例

(1)首先创建Web 项目HealthTester。

(2)在项目名上右键单击,选择“新建”——> “Web 服务”

在 Web 服务“类名”中输入“WeightCheck”,在“包”文本框中输入“com.ws”,然后点击“完成”。此时自动生成的Web 服务的状态和WeightCheck.java

可以发现项目窗口中自动新增了一个“Web 服务”文件夹,其中包含新建的Web 服务。

(3)下面为Web 服务添加业务逻辑。

双击 Web 服务节点下的WeightCheck 选项,在源代码编辑器中打开Web 服务。在代码主体上右键单击,选择“插入代码..”然后选择“添加Web 服务操作…”,弹出如下窗口,在窗口中给操作命名为“check”,返回类型为String。并单击窗口中的“添加”按钮,创建一个类型为boolean,名称为sex 的参数;并按同样步骤另创建两个int 类型的参数weight 和height,并单击“确定”按钮完成添加:

该 Web 服务的代码框架将被生成,在花括号括起来的部分修改代码,实现业务逻辑为:根据输入的性别、体重、身高来判断体重是否超标。修改之后的WeightCheck.java 的完整代码如下:

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

@WebService()

public class WeightCheck {

/**

* Web 服务操作

*/

@WebMethod(operationName = "check")

public String check(@WebParam(name = "sex")

boolean sex, @WebParam(name = "weight")

int weight, @WebParam(name = "height")

int height) {

int r=height-weight;

if(sex) r=105-r;

else r=115-r;

if(r<-10) return "太瘦";

if(r<0&&r>-10) return "偏瘦";

if(r>0&&r<10) return "超重";

if(r>10&&r<20) return "肥胖";

else return "严重肥胖";

}

}

(4)右键单击“HealthTester”项目,选择“部署”选项来部署项目。

(5)测试Web 服务

首先右键单击“HealthTester”项目,选择“运行“来运行项目。打开浏览器,在地址栏输入:

http://localhost:8080/HealthTester/WeightCheckService?Tester”,会得到如下运行结果:

桂电javaee实验报告

分别在三个输入框中输入 Web 服务WeightCheck 的操作check 的三个参数,可以对发布的Web 服务进行测试。

在上面的页面上点击“WSDL File”可以查看Web 服务的WSDL 文件的内容如下。或者在IE 浏览器地址栏中输入http://localhost:8080/HealthTester/WeightCheckService?WSDL ,也可进行查看。WSDL 文件可以保存到硬盘的某个位置以便供应用程序调用Web 服务时使用。

相关推荐