Java EE學習記錄(一)

話說大家都在說java EE,但是java EE的分層結構如下:

1、數據持久層:主要由一些負責操作POJO(Plain Old Java Object)的類構成,主要負責將數據保存進入數據庫;

2、數據訪問層:主要由一些DAO(Data access Object)的類構成,主要負責數據庫數據的增刪改查操作,進一步降低數據操作的粒度;

3、業務邏輯層:主要由一些業務邏輯對象組成,主要負責實現系統需要的業務方法實現;

4、業務控制層:主要由一些控制器組成,主要負責攔截獲取用戶請求,完成業務邏輯對象的調用,並根據處理結果轉發的不同的業務表示層;

5、業務表示層:主要由一些視圖組件構成,主要負責收集用戶的請求,並顯示處理的結果;

通過這種分層模型,形成標準的MVC模型,123構成M層,4構成C層,5構成V層,達到了各層組件間鬆散的耦合,以非硬編碼的方式組合,使系統有更好的擴展性,儘量實現代碼的複用。

下面通過一個例子記錄:

一、實現表示層,主要是jsp頁面:

1、第一個jsp文件 index.jsp內容:

<%--
    Document   : add
    Created on : 2016-10-30, 10:54:52
    Author     : guochaoxxl
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>計算器</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body bgcolor="ffffc0">
        <h1>算術計算器</h1>
        <form id="calcForm" method="post" action="add.action">
            <table>
                <tbody>
                    <tr>
                        <td>第一個數:</td>
                        <td><input type="text" name="num1"/></td>
                    </tr>
                    <tr>
                        <td>第二個數:</td>
                        <td><input type="text" name="num2"/></td>
                    </tr>
                    <tr>
                        <td><input type="submit" value="加"/></td>
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>


2、第二個jsp文件add_result.jsp內容:

<%--
    Document   : add_result
    Created on : 2016-10-30, 10:49:25
    Author     : guochaoxxl
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>計算器</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body bgcolor="ffffc0">
        <h1>算術計算器</h1>
        <table>
            <tbody>
                <tr>
                    <td>第一個數:</td>
                    <td>${param.num1}</td>
                </tr>
                <tr>
                    <td>第二個數:</td>
                    <td>${param.num2}</td>
                </tr>
                <tr>
                    <td>結果</td>
                    <td>${requestScope.result}</td>
                </tr>
            </tbody>
        </table>
                <button οnclick="history.go(-1);">返回</button>
    </body>
</html>

二、實現模型層,主要是java代碼,完成基本的邏輯功能:

1、第一個java文件Calculator.java內容:

package edu.jju;

/**
 *
 * @author guochaoxxl
 */
public class Calculator {
    public double add(double var1, double var2){
        return var1 + var2;
    }
    
    public double sub(double var1, double var2){
        return var1 - var2;
    }
    
    public double mul(double var1, double var2){
        return var1 * var2;
    }
}


2、第二個java文件Action.java內容:

package edu.jju;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author guochaoxxl
 */
public interface Action {
    String execute(HttpServletRequest request, HttpServletResponse response);
}

該接口主要定義了一個方法execute(),參數包括request和response兩個,返回的字符串對象,就是執行成功要轉發的頁面

3、第三個java文件AddAction.java內容:

package edu.jju;

import edu.jju.Calculator;
import edu.jju.Action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author guochaoxxl
 */
public class AddAction implements Action{
    private Calculator cal = new Calculator();
    @Override
    public String execute(HttpServletRequest request, HttpServletResponse response) {
        double num1 = Double.parseDouble(request.getParameter("num1"));
        double num2 = Double.parseDouble(request.getParameter("num2"));
        double result = cal.add(num1, num2);
        request.setAttribute("result", result);
        
        return "add_result.jsp";
    }
    
}

實現接口Action,重寫execute()方法。

三、控制模型層,主要是java代碼,完成模型層和視圖圖的對接工作:

1、第一個java文件Controller.java內容:
package edu.jju;

import edu.jju.Action;
import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author guochaoxxl
 */
public class Controller extends HttpServlet{
    private HashMap actionMap;
    
    /**
     *
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException{
        actionMap = new HashMap();
        actionMap.put("add", new AddAction());
    }
    
    private Action determinActionByPath(String path){
        String actionName = path.substring(path.lastIndexOf('/') + 1, path.length() - 7);
        Action ret = (Action)actionMap.get(actionName);
        
        return ret;
    }
    
    /**
     *
     * @param request
     * @param response
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        String path = request.getServletPath();
        Action action = (Action)this.determinActionByPath(path);
        String resultView = action.execute(request, response);
        if(null != resultView){
            request.getRequestDispatcher(resultView).forward(request, response);
        }
    }
    
    /**
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        this.doGet(request, response);
    }
}

2、第二個xml文件web.xml內容:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Controller</servlet-name>
        <servlet-class>edu.jju.Controller</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

由於文件Controller.java是基於Servlet實現的一個控制器,在處理請求過程中,先根據請求路徑找到要執行的Action對象,調用其中的execute(),根據execute()方法返回的路徑,轉發到相應的jsp頁面。Servlet需要在web.xml文件中進行配置,servlet部分主要完成類名和類的完整路徑的說明,servlet-mapping部分主要是配置影射路徑和請求匹配的對象。

四、運行結果:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章