实验二 Web数据库访问
一、实验目的
1. 了解MVC模式的基本原理和编程方式;
2. 了解DAO模式的基本原理和编程方法;
2. 掌握使用JDBC访问数据库的一般方法;
3. 掌握MySql数据库的基本操作。
二、实验内容
(一)、MVC模式
MVC模式是最近几年被推荐为JEE的设计平台,他主要将输入、处理和输出分开。
MVC即,
M(Modle):主要是业务逻辑的处理,接受视图请求的数据,返回最终的处理结果。
V(View):表示用户交互界面,对于Web应用来说,可以是HTML界面,也可能是XHTML、XML、Applet
C(Controller):从用户接受请求,将模式与视图结合在一起,共同完成用户的请求。
可以给你一段简单的代码:
mvc_login.htm
mvcdemo.jsp
mvc_success.jsp
<%@page contentType="text/html;charset=gb2312"%>
mvc_failure.jsp
<%@page contentType="text/html;charset=gb2312"%>
MVCCheck.java
package cn.mldn.lxh.bean ;
public class MVCCheck
{
private String name ;
public void setName(String name)
{
this.name = name ;
}
public String getName()
{
return this.name ;
}
// 验证
public boolean isValidate()
{
if(this.name==null||"".equals(this.name))
{
return false ;
}
else
{
return true ;
}
}
};
MVCServlet.java
package cn.mldn.lxh.servlet ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
import cn.mldn.lxh.bean.MVCCheck ;
public class MVCServlet extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
{
this.doPost(req,resp) ;
}
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
{
String name = req.getParameter("uname") ;
MVCCheck mc = new MVCCheck() ;
// 将请求内容设置到mc对象之中
mc.setName(name) ;
String path = null ;
if(mc.isValidate())
{
// 保存名字在request范围之中
req.setAttribute("name",mc.getName()) ;
path = "mvc_success.jsp" ;
}
else
{
path = "mvc_failure.jsp" ;
}
// 进行跳转
req.getRequestDispatcher(path).forward(req,resp) ;
}
};
/*
*/
要求:创建项目,建立上面的文件,调试并运行程序,记录运行结果。
输入姓名:
当什么都没有输入的时候(包括空格也没有),运行结果:
(二)MVC+DAO模式实现留言功能
三、操作方法与实验步骤
1. 获得MVCDaoNote项目文件。
2. 在NetBeans下打开项目如图所示。
3. 安装MySQL数据库管理系统,并设置口令为123456。
4. 进入MySQL数据库命令行方式的客户端。
5. 创建note数据库,输入命令:
mysql>create database note;
mysql>use note;
并运行。
6. 建立表note和person。注意:note表的id字段设置为自增的,否则代码报错。
把文件note.sql拷贝到d:根目录下。
note.sql的内容如下:
-- 创建表
-- 用户表(登陆)、留言表
-- 删除表
DROP TABLE person ;
DROP TABLE note ;
-- 删除序列
--DROP SEQUENCE note_sequ ;
-- 创建序列
--CREATE SEQUENCE note_sequ ;
-- 创建person表
CREATE TABLE person
(
id varchar(20) not null primary key ,
name varchar(20) ,
password varchar(20)
) ;
-- 创建留言表
CREATE TABLE note
(
id int auto_increment not null primary key , -- sequence
title varchar(20) not null ,
author varchar(20) not null ,
content varchar(50) not null
) ;
-- 插入测试数据
INSERT INTO person VALUES ('LXH','李兴华','zzzzzz') ;
INSERT INTO person VALUES ('MLDN','魔乐','mmmmmm') ;
insert intor person values('gbl','gaobaolu','123456');
-- 事务提交
commit ;
输入命令:
mysql>source d:/note.sql;
mysql>show tables;
7. 检查数据库连接代码看是否和环境一致。
8. 调试运行项目,记录运行结果。
9. 修改项目部分代码,查看修改结果,思考是否和自己的想象一致。
10. 体会MVC和DAO模式的好处,写下自己的感受。
用户登录:
登陆成功:
添加留言信息:
四、实验心得:
本实验内容是用MVC设计模式实现的一个留言板,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,业务逻辑是的,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。在web开发中servlet控制器接受用户的请求(实际上是容器接受HTTP请求,产生请求对象和响应对象),通过调用封装在可重用组件的模型(普通的java类),获取业务处理结果,将结果写入请求对象,并转发给视图(jsp).视图向客户提供动态页面。通过本实验了解MVC的架构工作原理,读懂留言板的的工作原理,在WEB应用中各个模块之间是通过什么实现。
实验三 EJB编程
一、实验目的和要求
1. 掌握EJB编程的基本方法;
二、实验内容和原理
(1).使用会话bean(无状态,有状态)
(2).使用实体bean(cmp,bmp)
(3).消息驱动bean
三、主要仪器设备
主要软件:
NetBeans IDE 6.0,及其 Web 与 Java EE 支持
Java SE Development Kit™
Glassfish 3.1
四、操作方法与实验步骤
1.创建javaEE企业应用程序NewsApp
根据提示同时创建ejb模块和web模块
2.对ejb模块进行编码
(1)创建持久性单元
右键ebj模块,选择“其他”。
下一步(选择持久性提供器、数据源、Java事务API等)
创建好的persistence.xml是
(2)创建实体类NewsEntity
右键ebj模块,选择“其他”。
下一步:
点击完成。在文件中添加2个字段并且插入getter和setter
(3)创建消息驱动bean
右键ebj模块,选择“其他”。
下一步:
点击“添加”按钮
点击确定。正确的视图是:
点击“完成”创建的java类的代码
在其中加入下面的代码:
右击,选择添加实体管理器
实际添加了如下的代码:
@PersistenceContext(unitName = "NewsApp-ejbPU")
private EntityManager em;
将persist方法名该为save:
将message方法改为:
(4)创建会话bean
右键ebj模块,选择“其他”。
下一步:
下一步:
点击完成即可。
3.编写web模块的代码
右键web模块,选择“其他”。
下一步:
点击完成,在代码中右击“插入代码”调用企业bean
\
选择
在代码添加:
out.println("
List news = newsEntityFacade.findAll();
for (Iterator it = news.iterator(); it.hasNext();) {
NewsEntity elem = (NewsEntity) it.next();
out.println(" "+elem.getTitle()+"
");
out.println(elem.getBody()+"
");
}
out.println("Add new message");
out.println("
");
4.创建Servlet PostMessage
添加如下代码:
(1)public class PostMessage extends HttpServlet {
@Resource(mappedName="jms/NewMessageFactory")
private ConnectionFactory connectionFactory;
@Resource(mappedName="jms/NewMessage")
private Queue queue;
response.setContentType("text/html;charset=UTF-8");
(2)// Add the following code to send the JMS message
String title=request.getParameter("title");
String body=request.getParameter("body");
if ((title!=null) && (body!=null)) {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
ObjectMessage message = session.createObjectMessage();
// here we create NewsEntity, that will be sent in JMS message
NewsEntity e = new NewsEntity();
e.setTitle(title);
e.setBody(body);
message.setObject(e);
messageProducer.send(message);
messageProducer.close();
connection.close();
response.sendRedirect("ListNews");
} catch (JMSException ex) {
ex.printStackTrace();
}
}
PrintWriter out = response.getWriter();
(3)out.println("Servlet PostMessage at " + request.getContextPath() + "");
// The following code adds the form to the web page
out.println("
");
out.println("
");
5.运行项目
设置NewsApp企业应用程序的相对URL为/ListNews。
五、实验结果与分析
1.添加信息
2.添加结果
六、实验心得
EJB(Enterprise Bean)是Java EE的三大组件技术之一,是创建基于Java的服务器端组件的标准。EJB与JavaBean的区别,这是两个不同的概念。JavaBean是一台机器上同一地址空间中运行的组件,因此是进程内组件,而EJB是在多台机器上跨几个地址空间运行的组件因此是进程间组件。EJB规范定义了如何编写JavaEE服务器端组件,提供了组件与管理组件的应用服务器之间的标准约定,使得开发人员能够块五开发出具有伸缩性的企业级应用。EJB技术使得Java程序开发人员可以专注于编写业务逻辑,不再需要编写那些处理事务行为、安全、连接共享或线程的代码。EJB不能在容器外部运行,EJB容器在运行时管理EJB的各个方面。容器不允许客户端应用程序直接访问EJB组件。EJB组件有三种:会话Bean、实体Bean、消息驱动Bean。通过会话Bean实现对实体Bean的访问代理。实体Bean用来代表企业应用中底层的数据对象;消息驱动Bean使得JavaEE应用程序能够异步处理JMS消息。
实验四 Web 服务的创建及其访问
一、实验目的
1.掌握Web服务的开发和部署方法;
2.掌握Web服务调用的一般方法。
二、实验内容
Java API for XML Web Services (JAX-WS) 2.0, JSR 224 是 Java EE 5 平台的一个重要组成部分。作为 Java API for XML-based RPC 1.1(JAX-RPC) 的后续发行,JAX-WS使用 Java 技术简化了 Web 服务的开发任务。它解决了 JAX-RPC 1.1 中存在的一些问题,提供了对 SOAP 1.1、SOAP 1.2 和 XML 等多个协议的支持,并提供了一个工具专门支持 HTTP 等其他协议。JAX-WS 使用 JAXB 2.0 进行数据绑定,并支持通过定制控制生成的服务端点接口。通过其对注释的支持,JAX-WS 简化了 Web 服务开发并减少了运行时 JAR 文件的大小。
∙创建 Web 服务
∙设计 Web 服务
∙部署和测试 Web 服务
在以下应用程序中使用 Web 服务
oJava SE 应用程序中的 Java 类
oWeb 应用程序中的 servlet
| oWeb 应用程序中的 JSP |
三、实验仪器设备
∙NetBeans IDE 6.0 Web & Java EE。
∙Java Standard Development Kit(JDK)版本 5.0 或版本 6.0。
∙Glassfish V2 或 Tomcat Web Server,两者都可在 NetBeans IDE 6.0 安装程序中选择安装。
四、操作方法与实验步骤
创建 Web 服务
选择容器
可以将 Web 服务部署在 Web 容器或 EJB 容器中。这由实现的选择决定。比如说,如果计划部署到 Tomcat Web Server 中且其中只有一个 Web 容器,则应该选择创建一个 Web 应用程序,而不是 EJB 模块。
1.选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项,或者选择 Enterprise 类别中的 EJB Module。
2.将项目命名为 CalculatorWSApplication。
3.根据所使用的部署服务器,执行以下操作:
o对于 GlassFish,将 Java EE Version 设置为 Java EE 5.
o对于 Tomcat Web Server,取消选中 Set Source Level to 1.4 复选框。
4.单击 Finish 按钮。
通过学习 Java 类创建 Web 服务
1.右键单击 CalculatorWSApplication 节点,然后选择 New > Web Service 选项。
2.将 Web 服务命名为 CalculatorWS,并在 Package 字段中键入 org.me.calculator,然后单击 Finish 按钮。
Projects 窗口将显示新 Web 服务的结构,并且可视化设计器将显示在编辑器区域。比如说对于 Web 应用程序,IDE 应如下所示:
设计 Web 服务
本练习的目标是使用 IDE 所生成的文件和代码执行一些有意义的任务。我们将添加一个操作。该操作将添加两个从客户机接收的数字。
在 Web 服务中添加业务逻辑
1.单击可视化设计器中的 Add Operation 按钮。
此时将出现一个对话框,我们可以在其中定义新操作。
2.在 Add Operation 对话框的上部,在 Name 字段中键入 add 并在 Return Type 下拉列表中键入 int。在 Add Operation 对话框的下部,单击 Add 按钮并创建一个 int 类型的参数,将其命名为 i。然后,再次单击 Add 按钮并创建一个 int 类型的参数,将其命名为 j。
IDE 应如下所示:
3.单击 Add Operation 对话框底部的 OK 按钮。
此时,可视化设计器中将显示以下内容:
4.单击 Source 按钮可以查看前面步骤中生成的源代码,如下所示:
5.在编辑器中,将框架 add 操作扩展为以下内容(修改以粗体显示):
@WebMethod
public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
int k = i + j;
return k;
}
从以上代码可以看出,Web 服务将接收两个数字并返回他们的和。下面,我们将使用 IDE 测试刚才创建的 Web 服务。
部署和测试 Web 服务
将 Web 服务部署到 Web 容器时,我们可以使用 IDE 测试 Web 并查看其功能是否符合预期。IDE 中集成了 GlassFish 所提供的 Tester 应用程序,可以实现此目的。对于 Tomcat Web Server,它也提供了一个类似的工具。但是,GlassFish 的 Tester 页面允许用户输入值并进行测试,而 Tomcat Web Server 却不支持此功能。在后者中,我们只能看到所部署的 Web 服务,而不能输入值进行测试。
测试是否成功部署到 Web 容器
1.右键单击项目并选择 Run 选项。
IDE 将启动应用服务器,编译应用程序并在浏览器中打开。
2.展开 Web Services 节点,右键单击代表该 Web 服务的节点,然后选择 Test Web Service 选项。
IDE 将在浏览器中打开测试程序页面,前提是在 GlassFish 中部署了一个 Web 应用程序。对于 Tomcat Web Server 和 EJB 模块的部署,情况则有所不同。
o如果部署到 GlassFish,在测试程序页面中键入两个数字,如下所示:
此时,将显示这两个数字的和:
使用 Web 服务
部署好 Web 服务后,我们需要创建一个客户机来使用 Web 服务的 add 方法。在本文中,我们将创建三个客户机:分别为 Java SE 应用程序中的一个 Java 类,一个 servlet 和 Web 应用程序中的一个 JSP 页面。
客户机 1:Java SE 应用程序中的 Java 类
我们将创建一个标准的 Java 应用程序。我们将使用创建应用程序的向导再创建一个 Java 类。然后,我们将在一些 IDE 工具中使用本教程开始部分中所创建的 Web 服务。
1.选择 File > New Project(Ctrl-Shift-N)选项。选择 General 类别中的 Java Application 选项。将项目命名为 CalculatorWS_Client_Application。单击 Finish 按钮。
2.右键单击 CalculatorWS_Client_Application 节点,然后选择 New > Web Service Client 选项。
3.在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。
4.输入 org.me.calculator.client 作为包名,然后单击 Finish 按钮。
Projects 窗口将显示新建的 Web 服务客户机,其中有一个节点为所创建的 add 方法。
5.双击 Main.java 节点在 Source Editor 中打开它。删除 TODO 注释,然后将上面的 add 节点拖动到空行中。应该能看到以下内容:
public static void main(String[] args) {
try { // Call Web Service Operation
org.me.calculator.client.CalculatorWSService service = new org.me.calculator.client.CalculatorWSService();
org.me.calculator.client.CalculatorWS port = service.getCalculatorWSPort();
// TODO initialize WS operation arguments here
int i = 0;
int j = 0;
// TODO process result here
int result = port.add(i, j);
System.out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
}
注意: 除了拖动 add 节点之外还有另外一种方法:在编辑器中单击鼠标右键,然后选择 Web Service Client Resources > Call Web Service Operation 选项。
6.使用有意义的数字初始化这两个 int 类型的变量,比如说 3 和 4。只需将上面的两个 int 变量的值从 0 修改为其他数字。
7.右键单击项目节点并选择 Run 选项。
此时,Output 窗口将显示两个数字之和:
compile:
run:
Result = 7
BUILD SUCCESSFUL (total time: 1 second)
客户机 2:Web 应用程序中的 Servlet
我们将创建一个新的 Web 应用程序,然后再创建一个 servlet。然后,我们将通过 servlet 来使用本教程开始部分中所创建的 Web 服务。
1.选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项。将项目命名为 CalculatorWSServletClient。单击 Finish 按钮。
2.右键单击 CalculatorWSServletClient 节点,然后选择 New > Web Service Client 选项。
此时将出现 New Web Service Client 向导。
3.在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。
4.在 Package 字段中,输入 org.me.calculator.client。 单击 Finish 按钮。
Projects 窗口中的 Web Service References 节点将显示新建客户机的结构,其中包括本实验前面所创建的 add 方法。
5.右键单击 CalculatorWSServletClient 项目节点,然后选择 New > Servlet 选项。将 servlet 命名为 ClientServlet,并在 Package 下拉菜单中键入 org.me.calculator.client。单击 Finish 按钮。
6.要使用 servlet 成为应用程序的入口点,右键单击项目节点并选择 Properties 选项,然后单击 Run 按钮并在 Relative URL 中输入 /ClientServlet。单击 OK 按钮。
7.在 Source Editor 中,删除 processRequest 方法主体中的注释行。该行如下所示:
/* TODO output your page here
接下来,删除代码注释的结束部分:
*/
在该行后面添加一些空行:
out.println("
");
现在,将代表 add 操作的节点拖动到所创建的空行中。
现在,processRequest 方法将如下所示(添加代码以粗体显示):
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("");
out.println("
");
out.println("
");
out.println("");
out.println("
out.println("
try { // Call Web Service Operation
org.me.calculator.client.CalculatorWS port = service.getCalculatorWSPort();
// TODO initialize WS operation arguments here
int i = 0;
int j = 0;
// TODO process result here
int result = port.add(i, j);
out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
out.println("
");
out.println("