您的位置:首页 > 编程语言 > Java开发

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)应该自己逐步设计,绝不能找一个类似的程序修该一下。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: