##JSP页面组成
1. JSP指令
指令标签不会产生任何内容输出到网页中,主要是用来设置jsp页面的相关信息,用的什么语言.导入的类库,字符集…
<%@ 指令名称 属性名称=“value”…%>
指令名称 : page,include,taglib
属性名称 :
1. language 指定当前页面嵌套的语言
2. contentType 设置jsp编译后网页的字符集
3. pageEncoding 设置页面的字符集
4. import 导入的类库
2. 小脚本
<%
Java代码(和java代码规范一致)
%>
每行后面必须添加分号
3. 表达式
<%= %>
不允许添加分号.将表达式的结果输出的jsp页面中.表达式的最终结果都会被转换成字符串.
4. 声明
在声明中编写的所有代码全部是全局代码,将存在类中,而不是方法中
<%! %>
5. 注释
(1) html注释
(2) JSP注释 <%-- --%>
(3) java注释 // /* */
##JSP 的执行流程
当用户通过浏览器访问服务器的时候
1. 找到jsp文件由Tomcat翻译成java文件,将翻译后的文件发送到work文件下
2. 将java文件编译成class字节码文件
3. 执行class字节码文件,输出给客户端
只有第一次访问或修改jsp文件,Tomcat才会重新翻译和编译,当没有改变的时候,不会对以编译的文件进行修改
web项目中 WEB-INF先得所有内容,客户端都不可访问
内置对象
1. request
1. javax.servlet.HttpServletRequest的实例
2. 该对象封装了一次请求,客户端的请求参数都被封装在该对象中,这是一个常用对象
3. getParameter(String parmName) : 获取请求数据
4. getParameterValues(String paramName) : 获取相同名称的多个值
5. setCharacterEncoding() : 设置一次请求的字符集
6. getParameterMap() : 获取请求的所有数据(key-values) key = 表单的name,values = 获取的数组
7. getHeaderNames() : 获取客户发送过来的请求头中的所有信息
8. getRemoteAddr() : 获取请求客户端的地址(ip:port)
9. getRemoteHost() : 获取ip地址
10. getRemotePort() : 获取端口号
2. response
1.sendRedirect("url");
2.setHeader()
3.addCookie()
4.setCharcterEncoding()
3. session
1. 对象代表一次用户会话,一次用户会话的含义 : 从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止(关闭浏览器)
2. session通过用于跟踪用户会话,购物车中使用..
3. session范围内的属性可以在多个页面跳转之间共享,一旦关闭浏览器,session就结束,将丢失所有数据
4. setAttribute("attrName,attValue)
5. getAttribute(attrName)
6. invalidate
7. session.setMaxInactiveInterval(interval)
8. session.getId()
4. pageContext
1. 存储在内能只能被自身使用
5. **out**
1. append()
2. clear() 清空要输出的内容
3. println()/print() 向客户端输出
4. .....
6. config
1. 封装了配置在web.xml文件中初始jsp(servlet)的参数
2. getInitParameter()
3. getServletName()
4. getInitParameterNames()
7. exception
1. 必须设置 <%@ isErrorPage="true"%> //开启异常
2. <%@ errorPage="url"%> //处理页面地址
8. page
1. 当前页面的this对象
9. *application*
1. 跟随服务器销毁,所有用户可以共享使用
转发和重定向
页面跳转
1. 转发跳转可以将request对象中的内容共享到下一个页面
2. 重定向跳转不能将request对象中的内容共享到下一个页面
3. 转发地址不变,重定向地址改变
4. 重定向请求2次
5. 转发是在服务器内部跳转
区别
转发使用getRequestDispatcher().forward();重定向使用sendRedirect()
转发 : 浏览器URL的地址栏不变,重定向 : 浏览器URL地址栏改变
转发是服务器内部的执行操作,重定向是客户端的执行操作
转发是浏览器只请求一次 , 重定向浏览器请求了2次
转发跳转request信息不会丢失, 重定向2次跳转request的信息会丢失
选择
重定向的速度比转发慢,因为浏览器还得发送一个新的请求. 如果2个都无所谓的时候,推荐使用转发
转发只能访问当前web项目下的所有页面.如果需要访问不同项目中的页面必须使用重定向
##有状态的会话
一个同学来过教师,下次再来教师,我们知道这个同学曾经来过,这称为有状态会话
##Cookie
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
1. Cookie(String name, String value) 实例化Cookie对象,传入cooke名称和cookie的值
2. public String getName() 取得Cookie的名字
3. public String getValue() 取得Cookie的值
4. public void setValue(String newValue) 设置Cookie的值
5. public void setMaxAge(int expiry)
设置Cookie的最大保存时间,即cookie的有效期,当服务器给浏览器回送一个cookie时,如果在服务器端没有调用setMaxAge方法设置cookie的有效期,那么cookie的有效期只在一次会话过程中有效,用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会话,当用户关闭浏览器,会话就结束了,此时cookie就会失效,如果在服务器端使用setMaxAge方法设置了cookie的有效期,比如设置了30分钟,那么当服务器把cookie发送给浏览器时,此时cookie就会在客户端的硬盘上存储30分钟,在30分钟内,即使浏览器关了,cookie依然存在,在30分钟内,打开浏览器访问服务器时,浏览器都会把cookie一起带上,这样就可以在服务器端获取到客户端浏览器传递过来的cookie里面的信息了,这就是cookie设置maxAge和不设置maxAge的区别,不设置maxAge,那么cookie就只在一次会话中有效,一旦用户关闭了浏览器,那么cookie就没有了,那么浏览器是怎么做到这一点的呢,我们启动一个浏览器,就相当于启动一个应用程序,而服务器回送的cookie首先是存在浏览器的缓存中的,当浏览器关闭时,浏览器的缓存自然就没有了,所以存储在缓存中的cookie自然就被清掉了,而如果设置了cookie的有效期,那么浏览器在关闭时,就会把缓存中的cookie写到硬盘上存储起来,这样cookie就能够一直存在了。
6. public int getMaxAge()
7. public String getDomain()
JavaBean
现在所有的代码全部都是在jsp中包含,,这样功能可以实现(简单)但是页面却显得凌乱.
为了将代码进行剥离,需要使用分层的概念
JavaBean 就是普通的java类,也被称为POJO(Plain Ordinary Java Object:普通java对象)
JavaBean 类职业添加私有属性,公有的get/set 无参构造
数据访问层,业务层中编写的类都是封装业务的.
分层
三层架构
从下之上,数据访问层,业务逻辑层,视图层(表示层)->高内聚低耦合
1. 数据访问层(DAO层) : 与底层数据,mysql,oracle,hbase,excel,文本文件 进行数据交互
2. 业务层(service层) : 对第三方平台封装的层,预处理返回结构和转换异常信息,添加缓存,查询缓存.与dao层交互,对dao层通用能力的封装
3. 视图层(view层,web层) : 对访问权限的控制,页面的转发跳转,数据的展示,基本参数的校验,不复用的业务简单逻辑代码
分层领域模型
DO(entity) : 与数据表一一对应的实体类.,通过dao层向上传递的数据源对象
DTO : 数据传输对象,将多个实体类或service层封装的新对象,传输给视图层使用的
BO : 业务对象,service层封装的实体类对象,给其他业务层使用
QUERY : 数据查询对象,各层接收上层的查询请求,当超过2个参数的查询封装,禁止使用map传递的时候!推荐使用类
VO : 业务层返回给视图层渲染使用的对象
entity