教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

Java培訓(xùn)之Javaweb三層架構(gòu)程序?qū)嵗?/h1>

更新時(shí)間:2016年06月10日17時(shí)24分 來(lái)源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):

Javaweb三層架構(gòu)程序?qū)嵗?/strong>
(1)首先創(chuàng)建一個(gè)web應(yīng)用Example15,在該應(yīng)用的src目錄下創(chuàng)建四個(gè)package,如圖1-1所示:

圖1-1 創(chuàng)建package
圖1-1中,創(chuàng)建的這四個(gè)package有如下作用:
  • cn.itcast.dao:這個(gè)包中存放的是數(shù)據(jù)層的相關(guān)類,對(duì)應(yīng)著javaweb三層架構(gòu)中的數(shù)據(jù)層;
  • cn.itcast.domain:這個(gè)包中存放的是javabean類;
  • cn.itcast.service:這個(gè)包中存放的是與業(yè)務(wù)相關(guān)的類,對(duì)應(yīng)著javaweb三層架構(gòu)中的業(yè)務(wù)層;
  • cn.itcast.web.servlet:這個(gè)包中存放的是用來(lái)處理請(qǐng)求的servlet,對(duì)應(yīng)著javaweb三層架構(gòu)的web層。
(2)在cn.itcast.domain包下新建一個(gè)javabean類,名稱為User,主要代碼如例1-1所示:
例1-1 User.java
/**
 * 把數(shù)據(jù)庫(kù)中查詢出的結(jié)果保存到這個(gè)對(duì)象中。
 * @author cxf
 *
 */
public class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
此處省略u(píng)sername和password的get/set方法
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
例1-1中,User類是用來(lái)封裝從數(shù)據(jù)庫(kù)中查詢出來(lái)的數(shù)據(jù)。
(2)在cn.itcast.dao包下新建一個(gè)類,名稱為UserDao,主要代碼如例1-2所示:
例1-2 UserDao.java
public class UserDao {
/*
 * 把xml中的數(shù)據(jù)查詢出來(lái)之后,封裝到user對(duì)象中,然后返回
 */
public User find() {
return new User("zhangSan", "123");
}
}
例1-2中,由于我們還沒(méi)有學(xué)習(xí)數(shù)據(jù)庫(kù),所以這里我們只是模擬一下查詢數(shù)據(jù)庫(kù)后的結(jié)果。
(3)在cn.itcast.service包下新建一個(gè)類,名稱為UserService,主要代碼如例1-3所示:
例1-3 UserService.java
public class UserService {
// service層依賴dao
private UserDao userDao = new UserDao();

/*
 * service的查詢,需要使用dao來(lái)完成!
 */
public User find() {
return userDao.find();
}
}
我們知道service層依賴數(shù)據(jù)層,所謂的依賴就是在service層的類中,使用數(shù)據(jù)層的類的對(duì)象調(diào)用其自身的方法操作數(shù)據(jù),并將結(jié)果返回給service層。也就是說(shuō)service層的查詢需要使用dao層來(lái)完成。
(4)在cn.itcast.web.servlet包下新建一個(gè)Servlet類,名稱為UserServlet,該servlet的訪問(wèn)路徑為:“/UserServlet“,主要代碼如例1-4所示:
例1-4 UserServlet.java
public class UserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
 * 在servlet中依賴service,然后通過(guò)service完成功能,把結(jié)果保存到request中
 * 轉(zhuǎn)發(fā)到jsp顯示。
 */
UserService userService = new UserService();
User user = userService.find();
request.setAttribute("user", user);
request.getRequestDispatcher("/show.jsp").forward(request, response);
}
}
Web層依賴service層,因此在例1-4中,UserServlet類中定義了UserService類的對(duì)象,然后調(diào)用find()方法查詢數(shù)據(jù),最后將查詢的結(jié)果保存在request域中,再轉(zhuǎn)發(fā)到show.jsp頁(yè)面。這體現(xiàn)了web層和service層之間的關(guān)系,在之后一段時(shí)間的開發(fā)中,大家會(huì)越來(lái)越熟悉這種模式。
(5)對(duì)index.jsp頁(yè)面進(jìn)行編輯,如例1-5所示:
例1-5 index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
  </head> 
  <body>
   <a href="<c:url value='/UserServlet'/>">點(diǎn)擊這里查看</a>
  </body>
</html>
例1-5中,頁(yè)面中導(dǎo)入了c標(biāo)簽,在超鏈接中使用了c:url標(biāo)簽,它會(huì)在給出的路徑前面自動(dòng)添加工程名稱。
(6)在應(yīng)用的WebRoot目錄下新建一個(gè)show.jsp頁(yè)面,主要代碼如例1-6所示:
例1-6 show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'show.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
  </head> 
  <body>
用戶名:${user.username }<br/>
密 碼:${user.password }<br/>
  </body>
</html>
例1-6中,使用EL表達(dá)式將request域中保存的user對(duì)象的username和password取出。
(7)將Example15發(fā)布到服務(wù)器端,然后啟動(dòng)服務(wù)器,在瀏覽器端訪問(wèn)index.jsp頁(yè)面,瀏覽器顯示結(jié)果如圖1-2所示:

圖1-2 瀏覽器顯示結(jié)果
(8)點(diǎn)擊圖1-2中的“點(diǎn)擊這里查看“超鏈接,瀏覽器顯示結(jié)果如圖1-3所示:

圖1-3 瀏覽器顯示結(jié)果
以上便是javaweb的三層架構(gòu)開發(fā),在以后的web開發(fā)中,我們都需要將每一層都劃分清楚,一層調(diào)用一層。如圖1-4所示:

圖1-4 訪問(wèn)流程

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.8y3kgpwe.cn/javaee
0 分享到:

和我們?cè)诰€交談!