JavaWeb回顾
Tomcat
- 命令
- 配置
- 部署
JSP
语法
JSP页面由以下几部分组成
- 页面指令
- HTML代码
- Java代码片段
- JavaScript代码
- EL表达式
- JSTL标签
页面指令
- page : 用来设置页面相关的属性、编码
- language
- contentType
- import
- pageEncoding
- isErrorPage
- errorPage
- include: 静态(编译期包含)包含其他页面到当前的JSP中
- file
- taglib: 引入标签库
- prefix
- uri
Java代码片段
-
普通Java代码片段
<% out.println("Hello World!"); %>
-
变量输出
<% String message = "Hello JSP"; %> <%=message %>
-
变量声明、方法定义代码片段
<%! private int age = 70; public int getAge() { return age; } %>
-
Java代码中嵌套HTML
-
纯Java代码拼接字符串
<% out.println("<table>"); for(int i = 0; i < 3; i++) { out.println("<tr>"); for(int j = 0; j < 3; j++) { out.println("<td>i: "+i+", j: "+j+"</td>"); } out.println("</tr>"); } out.println("</table>"); %>
-
嵌套HTML标签
<table> <% for(int i = 0; i < 3; i++) { %> <tr> <% for(int j = 0; j < 3; j++) { %> <td>i: <%=i %>, j: <%=j %></td> <% } %> </tr> <% } %> </table>
-
JSTL&EL
JSTL是JSP的标准标签库,作用就是减少JSP中的JAVA代码片段,提高JSP页面代码的可读性。
EL表达式是一门表达式语言,通常用来配合JSTL实现变量取值,具体来说可以读取作用域中、请求头中、Cookie中、请求参数中的变量值。
JSTL标签库分类
- 核心标签库(core)
- out
- set
- catch
- forEach
- forTokens
- if
- choose、when、otherwise
- url、param
- 格式化标签库(fmt)
- formatDate
- formatNumber
EL内置对象
-
取Cookie中的值: cookie
${cookie.message} // 取Cookie中key为message的属性值
-
取请求头中的值: header
${header.username} //取请求头中key为username的属性值
-
取请求参数中的值: param
${param.username} //取请求参数中key为username的属性值
-
取作用域中的值
EL表达式取作用域中的值,可以不显式使用内置对象,el会自动从最小的作用域pageScope中取,如果没找到指定参数,再去requestScope中找,再是sessionScope,最后是applicationScope。
显式取特定作用域中的属性值
- pageScope
- requestScope
- sessionScope
- applicationScope
${sessionScope.user} // EL会直接去session作用中取值,即使没有取到值也不会去其他作用域中尝试取值
JSP中的动作标签
- useBean: 实例化一个Java类
- class: 指定类的全名
- id: 对象引用的变量名
- setProperty: 设置属性值
- name: 指向useBean实例化的对象名称
- property: 对象的属性名
- value: 要设置的值
- getProperty: 获取属性值
- name
- property
- forward: 请求转发(地址栏不变)
- param: 一般作为其他的标签的子元素,用于传参
- include: 动态(在运行时才包含进来)包含其他JSP页面
四大作用域
-
pageContext: PageContext
范围:当前页面
-
request: HttpServletRequest
范围:一次请求
-
session: HttpSession
范围:一次会话
-
application: ServletContext
范围:整个应用声明周期
九大内置对象
- out
- pageContext
- request
- session
- application
- response
- page
- config
- exception
Servlet
Servlet基础
-
如何创建一个Servlet类?
- 创建一个普通Java类
- 继承HttpServlet
- 重写doGet、doPost方法
-
注册Servlet
-
注解的方式: @WebServlet
-
xml的方式: 在web.xml中添加
<servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern></url-pattern> </servlet-mapping>
-
Servlet生命周期
- void init(ServletConfig config); --初始化Servlet时调用(默认首次请求)
- void service(HttpServletRequest req, HttpServletResponse resp); – 每次请求此Servlet时调用
- void destroy(); --销毁 (应用停止时调用)
文件上传
- 通常文件上传: apache的 commons-fileupload、commons-io包。
- FileItem
- DiskFileItemFactory
- ServletFileupload
- Servlet3.0: @MultipartConfig
- Part
查询分页
-
物理分页
物理分页是在查询数据库时真正的进行了分页处理,每次只取一页的数据。
-
逻辑分页
逻辑分页在查询数据库时并没有做分页逻辑,而是把所有数据一次性加载到内存,在用户需要查看数据时,在内存中拿到当前页需要展示的数据,返回给页面展示。
-
通用分页参数
- currentPage: 当前页
- pageSize: 每页展示条数
- totalCount: 总条数
- data: 当前页数据
- totalPage: 总页数
Cookie&Session
Cookie的特点
- 存储的数据大小很有限
- Cookie是存储在客户端的
- Cookie不能存储中文
- 安全性较低,不适合存储敏感数据
Session的特点
- Session存储的数据大小没有上限
- Session是存储在服务端
- Session中可以存储Java中所有类型的数据
- 安全性较高
- Session是由Cookie演变而来的一种技术,本身也需要依赖Cookie(JSESSIONID)
Cookie和Session都属于会话跟踪技术,解决了HTTP协议无状态的问题。
Cookie的使用
-
创建Cookie
Cookie cookie = new Cookie(“key”, “value”);
-
设置Cookie属性
cookie.setMaxAge(60); //单位是秒, 设置为0代表立马删除
cookie.setPath();
cookie.setDomain();
-
写Cookie
response.addCookie(cookie);
-
获取Cookie中的数据
Cookie[] cookies = reuqest.getCookies();
// 遍历查找需要获取的数据
Filter
Filter的原理是能够在Servlet之前去接触到请求,进而完成一些例如: 设置请求参数、修改请求数据、重定向操作。
Filter是一个链式结构,应用中支持同时存在多个过滤器,他们通过chain.doFilter(req, resp)方法连起来,如果在某个filter中没有调用此方法,那么请求将无法正常往下进行。
Filter的使用
- 创建Filter
- 新建一个普通Java类实现Filter接口
- 重写doFilter方法。 (看情况重写声明周期方法init、destroy)
- 注册Filter
- xml的方式 在web.xml中配置,和servlet类似
- 注解的方式 @WebFilter
Listener
Listener用于监听特定的操作,当感兴趣的操作触发时,会自动回调Listener中的方法。
从作用上来说主要分以下几类:
- 监听三大作用域创建、销毁
- ServletRequestListener
- HttpSessionListener
- ServletContextListener
- 监听三大作用域属性添加、移除、替换
- ServletRequestAttributeListener
- HttpSessionAttributeListener
- ServletContextAttrbuteListener
上面这六种监听器在使用时都需要通过注解@WebListener、或者在web.xml中注册
使用方法
- 创建一个普通类,实现对应的Listener接口,并实现其中的方法
- 注册Listener。 注解、web.xml
- 不需要注册的监听器
- 监听特定对象从Session作用域中添加、移除的: HttpSessionBindingListener
- 监听Session钝化、活化: HttpSessionActivationListener
使用方法
1. 让特定对象实现对应的Listener接口
- 重写监听方法,完成业务操作
Ajax&jQuery Ajax
原生Ajax
- 对象: XMLHttpRequest (xhr)
- get操作
- 创建请求对象
- 设置请求参数
- 设置回调函数
- 发起请求
- post操作
- 创建请求对象
- 设置请求参数
- 设置回调函数
- 设置请求头(编码格式)
- 发起请求
jQuery中的Ajax
- ajax(url, {options});
- get(url, data, fn, ‘json’);
- post(url, data, fn, ‘json’);
- getJSON(url, data, fn);