话说大家都在说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 onclick="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部分主要是配置影射路径和请求匹配的对象。

四、运行结果:

Java EE学习记录(一)的更多相关文章

  1. Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理

    转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Jav ...

  2. Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理

    转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava E ...

  3. Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring

    参考:https://my.oschina.net/gaussik/blog/513353 注:此文承接上一文:Java EE 学习(5):IDEA + maven + spring 搭建 web(1 ...

  4. Java EE 学习(5):IDEA + maven + spring 搭建 web(1)

    参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--1590 ...

  5. Java EE学习——Quartz的Cron表达式

    经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比 ...

  6. Java设计模式学习记录-模板方法模式

    前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...

  7. Java设计模式学习记录-状态模式

    前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使 ...

  8. Java设计模式学习记录-观察者模式

    前言 观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式. 咱们目前用的最多的就是各种MQ(Message Queue ...

  9. Java设计模式学习记录-备忘录模式

    前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机 ...

随机推荐

  1. Session 会话保持

    本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答 一.术语session session,中文经常翻译为会话,其本来的 ...

  2. 绘制弧形:imagearc() 说明:三点钟的位置是起点(0度

    <?php //1. 绘制图像资源(创建一个画布) $image = imagecreatetruecolor(500, 300); //2. 先分配一个绿色 $green = imagecol ...

  3. PHP 优化

    来源:歪麦博客 https://www.awaimai.com/1050.html 1 字符串 1.1 少用正则表达式 能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率 ...

  4. python3 练习题100例 (八)

    题目八:暂停一秒输出,并格式化当前时间. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 题目八:暂停一秒输出,并格 ...

  5. Head First Python (一)

    建立一个数组: cast = ["Cleese","Palin","Jones","Idle"] 列出数组有多少数据项: ...

  6. python flask学习第1天

    flask安装: 第一个flask程序: 用pycharm新建一个flask项目,新建项目的截图如下: app.py代码如下: #从flask这个包中导入Flask这个类 #Flask这个类是项目的核 ...

  7. SSH无密码登录及远程拷贝命令SCP的使用

    SSH无密码登录 1.生成密钥对(公钥和私钥) $ cd /home/cen/.ssh $ ssh-keygen -t rsa #生成密钥,使用rsa方式进行加密,四个回车 $ ssh-copy-id ...

  8. 为什么要用枚举实现Singleton--Java

    原文地址:http://www.cnblogs.com/AprilCal/p/5426007.html 理由一:无需再考虑可序列化的情况   <effective java>第77条:对于 ...

  9. 处理IE6下PNG图片透明背景问题

    由于历史原因,IE较早的版本不支持PNG透明 可以支持GIF等的透明 由于png图片相对较小,所以很多网站还是青睐于PNG图片 最近就遇到这种情况,使用js和css滤镜来实现的与大家分享一下下: 首先 ...

  10. hive操作语句

    设置属性: //设置本地执行作set hive.exec.mode.local.auto=true; //设置动态分区 set hive.exec.dynamic.partition=true; se ...