一、MVC三层架构
-
-
V:View视图(HTML页面+JSP页面)。
-
-
javaBean在MVC设计模型中是model,又称模型层,在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,然后提供获取属性和设置属性的get/set方法。
JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。
以entity,domain,vo,pojo命名的包,包中的类都满足javaBean的规范。
-
Entity
在entity包下面的实体类中所有的属性和数据库表中的字段,数据类型逐一对应。
如数据库中字段是user_id,user_name;Java中也只有这两个属性(和数据库表中字段保持一致)。

-
domain
domain包下实体类中的属性不仅会包含数据库中的字段,还会包含其他自定义属性。
如数据库中字段是user_id,user_name;Java中不仅有这两个属性,且还有其它属性。

-
pojo(Plain Old Java Objects,普通 Java 对象)
pojo包下面的实体类并没有严格定义。
-
vo(view object)

二、请求转发和请求重定向
1.请求转发
方式:

代码实例:
req.getRequestDispatcher("/Servlet2").forward(req,resp);
特点:
-
-
请求转发是一次请求(共享请求和响应对象),所以转发内的各个Servlet共享一个request对象。
-
请求转发是Tomcat服务器内部的行为,用户是看不到的。
-
可以使用req.setAttribute(key,value)和getAttribute(key)实现请求转发内的Servlet的数据的流转。
-
注意:在学习的请求转发后,每个Servlet的访问方式就会有两种:
-
浏览器直接发起请求访问。
-
其他Servlet通过请求转发访问。
-
2. 请求重定向
方式:

代码实例:
resp.sendRedirect(req.getContextPath() + "/MainServlet");
特点:
-
-
重定向的地址是浏览器收到第一次请求响应回来的地址,自动跳转的,用户不参与。
-
3. 转发和重定向对比
-
请求转发是一次请求,是Tomcat服务器内部的行为,共享同一个request对象。浏览器只需要发一次请求即可将业务处理完毕。
-
一般浏览器发起的查询功能会使用请求转发来完成请求的处理及结果的响应。
-
浏览器发起的是增删改的请求,如果使用请求转发来处理的话,因为转发后的地址栏信息是不变的,容易造成用户刷新页面后表单重复提交。
重定向:
-
重定向是两次请求,地址栏信息会改变,不共享同一个请求和响应对象。
-
对比总结:
| 区别 | 转发 | 重定向 |
|---|---|---|
| 浏览器地址栏发生是否改变 | 否 | 是 |
| 请求与响应的次数 | 1次请求,1次响应 | 2次请求,2次响应 |
| 是否共享Request和Response对象 | 是 | 否 |
| 是否可以通过Request对象传递数据 | 是 | 否 |
| 速度 | 相对较快 | 相对较慢 |
| 行为类型 | 服务器内部行为 |
如果你需要将A Servlet的处理结果通过请求对象带到B Servlet中去使用,那就使用请求转发。
三、Cookie对象
由于http协议为无状态的,浏览器发起请求(请求中一般是需要携带数据的),服务器接收到请求后调用相关的后端代码去处理该请求,处理完后会响应浏览器。 本次请求与响应结束后,相关的请求与响应数据就会销毁。
下次在想用之前请求中发送的数据就获取不到了,这时可以通过cookie解决
1. Cookie简介
服务器决定哪些数据是以后的请求也会用到的(cookie由服务器创建)。
服务器以响应的方式告诉浏览器将常用的这些数据存储起来,存储在浏览器端。
2. 特点
-
-
Cookie使用字符串存储数据。
-
Cookie使用Key与Value结构存储数据。
-
不安全,不适合存储重要的数据到浏览器端。
-
单个Cookie存储数据大小限制在4097个字节(4kb左右)。
-
Cookie存储的数据中不支持中文,Servlet4.0中支持。
-
Cookie分为持久化Cooke与状态Cookie。
-
Cookie对象保存在客户端浏览器内存或系统磁盘中。
-
浏览器在保存同一域名所返回Cookie的数量是有限的。不同浏览器支持的数量不同,Chrome浏览器为50个
-
浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端。
-
3. Cookie的使用
cookie的创建及响应
//创建Cookie,Cookie中保存的数据是键值对的方式 Cookie cookie = new Cookie("username", "root"); //将创建好的Cookie添加到响应中,这样浏览器就会将Cookie中的信息保存起来了 resp.addCookie(cookie);
获取cookie
Cookie[] cookies = req.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { String name = cookie.getName(); String value = cookie.getValue(); System.out.println(name + ":" + value); } }
4. Cookie的三个属性设置
4.1 存活时间
使用setMaxAge()方法可以设置存活时间:
-
正数:表示在指定的秒数后过期
-
负数:表示浏览器一关,Cookie就会被删除(默认是-1)(浏览器中也能看到cookie的max-age为“会话”/“Session”,都是一样的效果)
-
cookie.setMaxAge(60);
4.2 path属性
path属性是通过请求的地址来进行有效的过滤。
如果不设置path属性,那Cookie的有效路径是当前项目。
比如:
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径/a.html 则CookieA发送,CookieB不发送
http://ip:port/工程路径/abc/a.html
设置方式:
//设置哪些资源可以使用Cookie(默认:/项目名,该项目所有资源都可以使用该Cookie) cookie1.setPath("/"); //当前Tomcat服务器中所有项目都可以使用 cookie2.setPath("/项目名/login.html"); ///只有 项目名/login.html 可以使用 cookie3.setPath("/项目名/regist.html");
需要注意的是:你要想看到/工程路径/abc这个路径的Cookie,那你的地址栏中请求地址必须包含/工程路径/abc才行。
4.3 domain属性
代表cookie生效的域名。
Cookie是不支持顶级域名的跨域,支持二级域名的跨域。
cookie.setDomain("test.com");
测试需要修改hosts文件。