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部分主要是配置影射路径和请求匹配的对象。
四、运行结果:
Java EE学习记录(一)的更多相关文章
- Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Jav ...
- Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava E ...
- Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring
参考:https://my.oschina.net/gaussik/blog/513353 注:此文承接上一文:Java EE 学习(5):IDEA + maven + spring 搭建 web(1 ...
- 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 ...
- Java EE学习——Quartz的Cron表达式
经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比 ...
- Java设计模式学习记录-模板方法模式
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...
- Java设计模式学习记录-状态模式
前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使 ...
- Java设计模式学习记录-观察者模式
前言 观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式. 咱们目前用的最多的就是各种MQ(Message Queue ...
- Java设计模式学习记录-备忘录模式
前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机 ...
随机推荐
- tcl之list操作-lappend/lsearch/lsort/concat/split/join/
- JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿
3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limi ...
- 12.2 VUE学习之-if判断,实践加减input里的值
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- spark入门: wordcount-java
wordcount-java: pom.xml文件如下: <dependencies> <dependency> <groupId>junit</groupI ...
- 3、python中的字符串
一.前言 字符串是python中重要的数据类型.字符串就是一段文本,在python中用引号来标示. 二.字符串分类 字符串根据使用场景不同,一共分成3类: (1)单引号.双引号创建的单行字符串: 在单 ...
- Android 适配器 自定义
前言:最近看了几个开源项目,发现适配器这东西用的很多,一开始觉得这东西高大上,其实呢,感觉就是一个中转站,或者说是一个接口工具,将数据填充到一个视图中,几乎任何项目都会涉及到.所以今天也简单看了一下, ...
- HDU 4628 Pieces(状态压缩+记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意:给个字符窜,每步都可以删除一个字符窜,问最少用多少步可以删除一个字符窜分析:状态压缩+记忆化搜索 ...
- BZOJ 4971: [Lydsy1708月赛]记忆中的背包
神仙构造 分成x个1和一堆>=w-x的大物品 (x<=20 w>=50) 则拼成w的方案中有且仅有一个大物品 若最终序列中有x个1,有一个大物品为w-k,可以提供C(x,k)种方案 ...
- mysql之处理金钱小数点后的多余0
问题产生原因:我们在做基金项目 产生大量的金钱 在GP首页展示首页信息的时候要求去除多余的0 由于我们在数据库设计的时候查询返回数据 例如18.100000 这种形式 而我们需要将多余的0 ...
- 谋哥:《App自推广》连载2直立人行走迁徙
[谋哥每天一干货,第六十九篇] 前篇说到声音在远古时代,是一个神奇的东西,它能够很快地把信息传播到其他地方,突破了短距离.然而能人的后代直立人学会了直立行走,他们开始走出非洲,到达遥远的中东.中国,还 ...