zoukankan      html  css  js  c++  java
  • 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 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部分主要是配置影射路径和请求匹配的对象。

    四、运行结果:



  • 相关阅读:
    PHP thinkPHP6.0 部署
    ch09 Sql导入语句
    自定义map 搜索
    MySql 语句
    自定义Mappter
    三袋米的故事
    WPF中实现文件夹对话框(OpenFileDialog in WPF)
    web通过Ajax与WCF交互
    项目管理之我见-程序员程序开发步骤
    存储过程
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6823119.html
Copyright © 2011-2022 走看看