Eclipse学习之二:Eclipse开发JavaWeb应用
2012-05-24 19:21
204 查看
主要介绍主流的javaweb编程技术、设计模式和框架,以及如何利用Eclipese开发Web应用程序。
要点:1、JavaWeb编程的主要组件技术;
2、MVC设计模式;
3、用Eclipse构建一个基于MVC模式的JavaWeb的应用程序。
目的:掌握如何用Eclipse构建一个基于MVC模式的JavaWEB的应用程序。
一、javaweb编程的主要组件技术
Html、jsp、Servlet、Javabean、Jdbc、Xml、Tomcat、MySQL
1.1MVC设计模式
今天,我们见到的绝大部分应用,都是基于B/S(浏览器/服务器)架构的,其中的服务器就是Web服务器。可见,Web应用是目前广泛使用的应用模式。
Web程序开发方法的发展:
JSP的Model1
JSP的Model2
MVC
1Model1和Model2
对于Java的动态Web编程技术而言,则经历了Model1和Model2时代。
Model1:Model1就是JSP大行其道的时代,在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。
Model2:Model2下JSP不再承担控制器的责任,它仅仅是表现层角色,仅仅用于将结果呈现给用户,JSP页面的请求与Servlet(控制器)交互,而Servlet负责与后台的JavaBean通信。
在Model2模式下,模型(Model)由JavaBean充当,视图(View)由JSP页面充当,而控制器(Controller)则由Servlet充当。
2Model1和Model2的比较
对于非常小型的Web站点,如果后期的更新、维护工作不是特别大,可以使用Model1的模式来开发应用,而不是使用Model2的模式。
虽然Model2提供了更好的可扩展性及可维护性,但增加了前期开发成本。从某种程度上讲,Model2为了降低系统后期维护的复杂度,却导致前期开发的更高复杂度。
3MVC思想
MVC并不是Java语言所特有的设计思想,也并不是Web应用所特有的思想,它是所有面向对象程序设计语言都应该遵守的规范。
MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)和Controller(控制器),这三个部分以最少的耦合协同工作,从而提高应用的可扩展性及可维护性。
MVC:M(model)是指数据模型,
V(View)是指用户界面,
C(Control)则是控制器。
使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、控制器3者之间的关系和各自的主要功能。
MVC的组成部分
视图(View)代表用户交互界面,对于Web应用来说就是HTML界面。
模型(Model):就是业务流程/状态的处理以及业务规则的制定。
控制(Controller):可以理解为一个分发器,他来决定选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求,控制层并不做任何的数据处理。
MVC带来的好处:
MVC从根本上强制性的将它们分开,最大程度上实现了程序代码与网页的分离;数据和业务规则从表示层分开,所以可以最大化的重用代码。
4常用的MVC框架
Struts:包括struts1和struts2两个。
JSF:JSF是一个标准,目前,JSF是作为JEE5.0的一个组成部分,与JEE5.0一起发布
JSF的行为方法在POJO中实现,JSF的ManagedBean无需继承任何特别的类。因此,无需在表单和模型对象之间实现多余的控制器层。JSF中没有控制器对象,控制器行为通过模型对象实现。
JSF的事件框架可以细化到表单中每个字段。JSF依然是基于JSP/Servlet的,仍然是JSP/Servlet架构,因而学习曲线相对简单
二、用Eclipse构建一个基于MVC模式的JavaWeb应用程序
题目要求:
(1)技术要求:
按照MVC设计模式,利用JSP、Servlet及JavaBean构建一个简单的登录系统。
(2)系统功能要求:
当用户在登录页面上填写用户名和密码并提交后,系统检查该用户是否已经注册,若注册,系统进入主页面,否则,进入注册页面。系统的工作流程见下图。
2.1构建系统的处理步骤
(1)数据库设计:构建数据库表T_UserInfo
(2)在Eclipse中创建一个项目:Login_Proj
(3)构建视图组件:登录页面(login.jsp)、主页面(main.jsp)、注册页面(register.jsp),注册失败(Register_err.jsp),注册成功(Register_succ.jsp)
(4)构建控制层组件:
一个servlet(LoginServlet.java)---->实现登录的控制
一个servlet(RegisterServlet.Java)-à实现注册的验证控制
(5)构建业务逻辑层组件(模型组件):
一个JavaBean:user,doa,db_op
(6)部署该程序到服务器Tomcat中,然后运行。
(1)数据库设计:构建数据库表T_UserInfo
利用MySQL数据库,
创建数据库:user
创建表及其结构:T_UserInfo
(2)在Eclipse中创建一个项目:Login_Proj
按Eclipse建立工程的提示,建立Web工程,工程的名称为:Login_Proj。
(3)构建视图组件:--登录页面(login.jsp)
选中工程“Login_Proj”,
击右键,选“新建”,
按Eclipse的提示,建立jsp,名称为:Login。
修改默认jsp内容,达到我们所要求的编码。
login.jsp的代码
<%@pagelanguage="java"contentType="text/html"pageEncoding="gb2312"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<formaction="Loginservlet“method="post">
用户名:<inputtype="text"name="username"size="15">
<br><br>
密 码: <inputtype="password"name="password"size="15">
<br><br>
<inputtype="submit"name="submit"value="登录"><br>
</form>
</body>
</html>
(3)构建视图组件--主页面(main.jsp)
选中工程“Login_Proj”,
击右键,选“新建”,
按Eclipse的提示,建立jsp,名称为:main.jsp。
修改默认jsp内容,达到我们所要求的编码。
main.jsp代码
<%@pagelanguage="java"contentTYpe="text/html"pageEncoding="gb2312"%>
<html>
<head>
<title>主页面</title>
<metahttp-equiv=”refresh”content=”20;url=main2.jsp”>
</head>
<body>
<h1>
<%=session.getAttribute("username")%>,你成功登录,20秒后自动进入主页面!
</h1>
</body>
</html>
构建控制层组件(第4步)
建立数据JavaBean—用户(user);
建立连接数据库的JavaBean—(doa)
建立实现对用户数据库进行操作的java类--db_op.java
2.2建立数据JavaBean—用户(user)
packageJavaBean;
publicclassuser{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
建立连接数据库的JavaBean—(doa)
packageJavaBean;
publicclassdoa{
privateStringdb_username;
privateStringdb_password;
privateStringdb_driver;
privateStringdb_connection;
publicStringgetDb_username(){returndb_username;}
publicvoidsetDb_username(Stringdb_username){
this.db_username=db_username;
}
publicStringgetDb_password(){returndb_password;}
publicvoidsetDb_password(Stringdb_password){
this.db_password=db_password;
}
publicStringgetDb_driver(){returndb_driver;}
publicvoidsetDb_driver(Stringdb_driver){this.db_driver=db_driver;}
publicStringgetDb_connection(){returndb_connection;}
publicvoidsetDb_connection(Stringdb_connection){
this.db_connection=db_connection;
}
}
在JavaBean—(doa)的基础上,建立实现对用户数据库进行操作的java类---db_op.java
publicclassdb_op{
publicConnectiondb_getConnection(){
Connectionconn=null;
Stringdb_username=null;Stringdb_password=null;
Stringdb_driver=null;Stringdb_connection=null;
Propertiespro=newProperties();
Filefile=newFile("H:\\web_15\\Login_Proj\\src\\db.properties");
try{
pro.load(newFileInputStream(file));
}catch(Exceptione){e.printStackTrace();}
db_username=pro.getProperty("db_username","");
db_password=pro.getProperty("db_password","");
db_driver=pro.getProperty("db_driver",db_driver);
db_connection=pro.getProperty("db_connection",db_connection);
try{
Class.forName(db_driver).newInstance();
conn=DriverManager.getConnection(db_connection,db_username,db_password);
returnconn;
}catch(Exceptione){System.out.println(e);returnnull;}
}
publicbooleanselect_1(useru){//查询用户是否已经注册
Connectionconn=null;ResultSetrs=null;
Statementps=null;
Stringxm=u.getUsername();Stringpass=u.getPassword();
conn=db_getConnection();
Strings1="select*fromT_userInfowhereusername='"+xm+"'andpassword='"+pass+"'";
try{
ps=conn.createStatement();
rs=ps.executeQuery(s1);
if(rs.next()){
rs.close();
ps.close();
conn.close();
returntrue;
}
else{
rs.close();
ps.close();
conn.close();
returnfalse;
}
}catch(SQLExceptione){
returnfalse;
}
}
publicbooleanselect_2(Stringu){
//在注册时,查询是否有重名的用户已经注册
Connectionconn=null;ResultSetrs=null;
Statementps=null;
conn=db_getConnection();
Strings1="select*fromT_userInfowhereusername='"+u+"'";
try{
ps=conn.createStatement();rs=ps.executeQuery(s1);
if(rs.next()){
rs.close();ps.close();conn.close();
returntrue;
}
else{
rs.close();ps.close();conn.close();
returnfalse;
}
}catch(SQLExceptione){
returnfalse;
}
}
publicvoidappend(useru){
//注册时,添加注册用户信息
Connectionconn=null;
Statementps=null;
conn=db_getConnection();
Stringxm=u.getUsername();
Stringpass=u.getPassword();
Strings1="insertintoT_userInfo(username,password)values('"+xm+"','"+pass+"')";
try{
ps=conn.createStatement();
ps.executeUpdate(s1);
ps.close();
conn.close();
}catch(SQLExceptione){
System.out.println(e);
}
}
}
(5)构建控制层组件(第5步):
一个servlet(LoginServlet.java):实现登录的控制
一个servlet(RegisterServlet.Java):实现注册的验证控制
2.3web.xml配置文件的解读
构建控制层组件:一个servlet(registerServlet.java
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
Stringxm=(String)request.getParameter("username");
Stringmm=(String)request.getParameter("password");
Stringmm2=(String)request.getParameter("repassword");
Stringtype_err="";db_opb=newdb_op();
if(b.select_2(xm)){
type_err=xm+":该用户已经注册!";
HttpSessions=request.getSession(true);s.setAttribute("type_err",type_err);
response.sendRedirect("Register_err.jsp");
}
elseif(!mm.equals(mm2)){
type_err="两次密码不一致错!";
HttpSessions=request.getSession(true);s.setAttribute("type_err",type_err);
response.sendRedirect("Register_err.jsp");
}
else{HttpSessions=request.getSession(true);
s.setAttribute("username",xm);s.setAttribute("password",mm);
useru=newuser();u.setUsername(xm);u.setPassword(mm);
db_opd=newdb_op();d.append(u);
response.sendRedirect("Register_succ.jsp");
}
}
构建控制层组件:一个servlet(LoginServlet.java)
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
useru=newuser();Stringxm="";Stringps="";
xm=request.getParameter("username");
ps=request.getParameter("password");
u.setUsername(xm);
u.setPassword(ps);
HttpSessions=request.getSession(true);
s.setAttribute("username",xm);
db_opd=newdb_op();
booleantf=d.select_1(u);
if(tf){
response.sendRedirect("main2.jsp");
}
else{
response.sendRedirect("register2.jsp");
}
}
2.4web.xml配置文件的解读和配置
(6)部署该程序到服务器Tomcat中,然后运行 另外,必须对系统进行测试和调试
总结
该程序的设计关键:
(1)了解系统流程,给出系统分析,并给出图形描述;
(2)数据库模型的设计:
为了使对数据库的操作,具有通用性,采用属性文件,存放数据库连接的有关信息,通过对数据文件的读,获取该信息,实现连接;
(3)网页之间是如何传递信息的?
(4)jsp网页与servlet之间是如何传递信息的:
信息由jspàservlet如何实现;
信息由servletàjsp如何实现;
(5)应该自己逐步设计,绝不能找一个类似的程序修该一下。
相关文章推荐
- asp.net2.0 控件开发(学习笔记之二)
- Android NDK 学习(4) 在eclipse中配置工具,方便开发
- eclipse rcp 插件开发 (系统学习eclipse)
- Hadoop学习2_Hadoop完全分布式的Eclipse开发环境配置
- Android开发学习笔记(三)——基于Eclipse开发环境的搭建及HelloAndroid示例程序的创建
- Java + opencv学习:在Eclipse下配置基于Java的OpenCV开发环境
- Eclipse插件开发---学习总结
- 学习eclipse插件开发资源全收集(plugin)
- 基于eclipse的hadoop开发-----HDFS API学习
- Android 入门开发指南之二 -- Eclipse环境下安装开发
- Hadoop学习5--配置本地开发环境(Windows+Eclipse)
- Cocos2d-x学习笔记一__开发环境配置(Win7 64+VS2013+Eclipse+Cocos3.4+Python 2.7.9+jdk 1.7.0)
- 【Linux/Ubuntu学习5】Ubuntu 下android 开发,eclipse不能识别手机
- Java开发学习笔记之二:一个简单的Servlet
- Myeclipse学习总结(4)——Eclipse常用开发插件
- Eclipse学习6-使用CVS进行团队开发(上)
- hadoop入门学习系列之五Eclipse下搭建Hadoop2.6.5开发环境并写wordcount
- android学习基础篇---开发环境的搭建EclipseSDKjdkADT
- java学习之旅15、16--eclipse开发环境的使用_建立java项目_运行java项目,eclipse运行程序的问题(src和bin问题)_debug模式
- 深度学习Caffe平台开发环境准备——1.buntu下安装eclipse