Wetts's blog

Stay Hungry, Stay Foolish.

0%

在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

泛化(Generalization)

  • 【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种.
  • 【箭头指向】:带三角箭头的实线,箭头指向父类
  • 泛化

实现(Realization)

  • 【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现
  • 【箭头指向】:带三角箭头的虚线,箭头指向接口
  • 实现

关联(Association)

  • 【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子
    • 关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
  • 【代码体现】:成员变量
  • 【箭头及指向】:带普通箭头的实心线,指向被拥有者
  • 关联
    • 上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
  • 关联2
    • 上图为自身关联:

聚合(Aggregation)

  • 【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系.
    • 聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
  • 【代码体现】:成员变量
  • 【箭头及指向】:带空心菱形的实心线,菱形指向整体
  • 聚合

组合(Composition)

  • 【组合关系】:是整体与部分的关系.没有公司就不存在部门
    • 组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
  • 【代码体现】:成员变量
  • 【箭头及指向】:带实心菱形的实线,菱形指向整体
  • 组合

依赖(Dependency)

  • 【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖。
  • 【代码表现】:局部变量、方法的参数或者对静态方法的调用
  • 【箭头及指向】:带箭头的虚线,指向被使用者
  • 依赖

各种关系的强弱顺序:

泛化= 实现> 组合> 聚合> 关联> 依赖

下面这张UML图,比较形象地展示了各种类图关系:

举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.boventech.learning.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.boventech.learning.entity.User;

/**
* MVCReturn
* @author peng.xia
*
*/
@Controller
@RequestMapping("/MVCReturn")
public class SpringMVCReturnController {

@RequestMapping(value="/index1",method=RequestMethod.GET)
public ModelAndView index(){
ModelAndView modelAndView = new ModelAndView("/user/index");
modelAndView.addObject("name", "xxx");
return modelAndView;
}
//对于ModelAndView构造函数可以指定返回页面的名称,也可以通过setViewName方法来设置所需要跳转的页面;

@RequestMapping(value="/index2",method=RequestMethod.GET)
public ModelAndView index2(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name", "xxx");
modelAndView.setViewName("/user/index");
return modelAndView;
}
//返回的是一个包含模型和视图的ModelAndView对象;

/**
* Model一个模型对象,
* 主要包含spring封装好的model和modelMap,以及java.util.Map,
* 当没有视图返回的时候视图名称将由requestToViewNameTranslator决定;
* @return
*/
@RequestMapping(value="/index3",method=RequestMethod.GET)
public Map<String, String> index3(){
Map<String, String> map = new HashMap<String, String>();
map.put("1", "1");
//map.put相当于request.setAttribute方法
return map;
}
//响应的view应该也是该请求的view。等同于void返回。

//返回String
//通过model进行使用
@RequestMapping(value="/index4",method = RequestMethod.GET)
public String index(Model model) {
String retVal = "user/index";
User user = new User();
user.setName("XXX");
model.addAttribute("user", user);
return retVal;
}

//通过配合@ResponseBody来将内容或者对象作为HTTP响应正文返回(适合做即时校验);
@RequestMapping(value = "/valid", method = RequestMethod.GET)
@ResponseBody
public String valid(@RequestParam(value = "userId", required = false) Integer userId,
@RequestParam(value = "name") String name) {
return String.valueOf(true);
}
//返回字符串表示一个视图名称,这个时候如果需要在渲染视图的过程中需要模型的话,就可以给处理器添加一个模型参数,然后在方法体往模型添加值就可以了,


@RequestMapping(method=RequestMethod.GET)
public void index5(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("xxx", "xxx");
}
//返回的结果页面还是:/type
//这个时候我们一般是将返回结果写在了HttpServletResponse 中了,如果没写的话,
//spring就会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果这个时候需要模型的话,处理方法和返回字符串的情况是相同的。

}

Eclipse启动Tomcat时,默认配置的启动超时时长为45秒。假若项目启动超过45秒将会报错。
两种解决方法:


1. 改XML
eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml

start-timeout="45" 


  1. 双击Servers视图中的对应的Server,打开Server的属性界面,右边有个Timeouts,把里面的45改大些

1

<input name="country" id="country" size=12 value="disabled提交时得不到该值 " disabled="disabled" >

放在form表单中提交后得不到该值。将disabled="disabled" 改为 readonly = "readonly" 即可。

按照W3C的规范:http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.12

设置为disabled的input将会有下面的限制:

  • 不能接收焦点
  • 使用tab键时将被跳过
  • 可能不是successful的

设置为readonly的input将会有下面的限制:

  • 可以接收焦点但不能被修改
  • 可以使用tab键进行导航
  • 可能是successful的

只有successful的表单元素才是有效数据,也即是可以进行提交。disabled和readonly的文本输入框只能通过脚本进行修改value属性。

SpringMVC工作原理

上面的是springMVC的工作原理图:

  1. 客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.
  2. DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。
阅读全文 »

转自:http://www.360doc.com/content/13/0415/10/11253639_278358312.shtml

Servelt与WebService的异同:

请求:

客户端访问一个服务器的url,只需要发送简单的httprequest即可。

  • 但servlet只能接受一个简单的http请求;
  • 而WebService是可以发送一个xml作为其请求内容。

传输:

  • servlet使用http协议传输数据。
  • ws使用固定的XML格式封装成soap消息,可以使用http作为底层数据传输,但并不局限于http协议。

返回结果:

  • servlet返回的是html页面;
  • ws返回的可以是复杂对象甚至使用附件或者mutidata的2进制文件。

部署:

  • servlet需要遵守j2ee的Web Application规范部署的应用服务器上,如tomcat,weblogic,websphere;
  • WebService则需要有WSDL文件来部署服务,或者使用UDDI注册。

优势:

  • WebService的跨平台特性是servlet不能比的;
  • 而servlet相对来说速度上的优势也是不可忽视的

前段时间遇到一个问题,在spring mvc 服务端接收post请求时,通过html 表单提交的时候,服务端能够接收到参数的值。但是使用httpclient4.3构造post请求,却无法接收到参数的值。

阅读全文 »

移动

  • k:上

  • j:下

  • h:左

  • l:右

  • 0:将游标放在一行的开始

  • $:将游标放在一行的结尾

  • w:将游标移动到下一个单词

  • W:和w功能相同,只是不计算标点符号。

  • b:将游标移动到前一个单词

  • B:和b功能相同,只是不计算标点符号。

  • (:将游标放在当前句子的开始处

  • ):酱油表放在下一句的开始处

  • Ctrl + F:向前滚动一屏

  • Ctrl + B:向后滚动一屏

  • Ctrl + G:确定游标的当前位置,会将游标的行号和字符位置显示在屏幕下方。

  • G:将游标放在文件的最后一行上

  • xG:表示游标所要移动到的行号

  • :x:表示将游标放在x所制定的行上

  • Shift + g 或者 :$:跳到文件最后一行

  • gg 或者 :0:跳到文件第一行

搜索

  • /input 搜索从光标所在处之后的input。
  • ?input 搜索从光标所在处之前的input。

如果正在搜索的字符存在多个实例,那么用户可以在每个实例的后面输入一个小写n,从而沿同一个方向搜索(向前或者向后),或者输入一个大写N,以便沿着当前的搜索的相反方向进行搜索。

退出

  • q退出
  • q!强制退出
  • qw退出并保存

编辑

撤销

  • u:撤销操作
  • ctrl + r:恢复撤销

插入

  • i:在当前的游标位置之前插入文本
  • I:在当前行的开始处插入文本
  • a:在当前的游标位置之后插入文本
  • A:在当前行的结尾处插入文本
  • o:在游标位置的下面为文本条目创建一个新行
  • O:在游标位置的上面为文本条目创建一个新行

删除

  • x:删除游标所在位置的字符。如果命令前有数字n,那么将删除从游标所在位置开始的后n个字符。
  • X:删除游标位置前面的字符。如果命令前有数字n,那么将删除从游标所在位置开始的前n个字符。
  • dw:从当前的游标位置开始删除,一直到下一个单词为止(或者是多个单词,如果命令前有数字)。
  • D:从游标位置开始删除,一直到当前行结束。
  • dd:删除游标所在的行

修改

  • cc:删除当前行的内容,保留用户输入的文本
  • cw:修改游标所在的单词,修改范围是从游标位置一直到单词结束。该命令还是的用户进入插入模式。
  • r:替换游标所在的字符。完成替换之后,vi将返回命令模式。
  • R:覆盖从游标当前所在的字符开始的多个字符。必需按Esc停止覆盖。
  • s:用输入字符替换当前字符。完成后,用户任然处于插入状态下。
  • S:删除游标所在的行并用新文本替换。输入新文本后,vi任然保持在插入模式下。

复制

  • yy:单行复制
  • nyy:n行复制
  • yw:拖动(复制)当前单词,拖动的范围是从游标所在的单词一直到单词结尾

粘贴

  • p:在光标下一行粘贴
  • P:在光标上一行粘贴

高级命令

  • J:将当前行与它下面的行合并到一起

由于终端窗口大小不同,新行从什么地方开始可能会令人混淆。新行从*后开始。
在命令模式下使用set nu选项可以为新行添加编号。
删除行编号的命令是set nonu。

  • 表空间:此空间是用来进行数据存储的(表、function、存储过程等),所以是实际物理存储区域。
  • 临时表空间:主要用途是在数据库进行排序运算(如创建索引、order by 及 group by、distinct、union/intersect/minus/、sort-merge 及 join、analyze 命令)、管理索引(如创建索 引、IMP 进行数据导入)、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。

备注:因为用途不同所以才有了区分,实际上数据库都是有默认临时空间的,但实际应用中很难满足需求,所以才需要自己创建临时空间。