web重要知识总结
Http状态码
200:成功
404:资源未找到
500:服务器内部错误
405:方法不允许
Servlet
Server+Applet 运行在服务器上的程序
编写Servlet的步骤
1.在项目中导入Servlet相关依赖
2.在项目的java目录下,创建一个类,继承HttpServlet,重写
doGet和doPost方法
3.在web.xml中设置Servlet的请求映射
4.访问Servlet
三层架构
通常所说的三层架构中的三层,是指“数据访问层、业务逻辑层和视图表现层”
-
数据访问层,用于连接数据库,对数据做增删改查的操作
-
业务逻辑层,用于处理业务逻辑,在适当的情况下调用数据访问层中的方法
-
视图表现层,用于展示数据和提供用户输入数据的渠道,在适当的情况下调用业务逻辑层中的方法
获取从页面传递的数据
class TestServlet extends HttpServlet{
doGet(HttpServletRequest req,HttpServletResponse resp){
//获取表单提交的数据req.getParameter("表单中某个表单元素的name值");
String username = req.getParameter("username");
}
doPost(HttpServletRequest req,HttpServletResponse resp){
doGet();
}
}
访问服务器的某个URL
-
在浏览器的地址栏中输入对应的URL,属于GET提交
-
使用a标签,在href中输入对应的URL,属于GET提交
-
使用form表单,在action中输入对应的URL,通过method修改提交方式为GET或POST
页面向服务端提交数据的方式
-
使用form表单的name属性显示提交
-
使用form表单的name属性隐式提交
-
通过"?参数名=值"方式提交
JSP
Java Server Page
使用Java开发、运行在服务器上的页面。
jsp文件的后缀名为".jsp"。
由于最初由servlet渲染页面,在Java代码中加入大量html的内容,使用极不方便。所以Sun公司推出了
JSP,可以在页面中加入java代码,让页面成为动态页面。
JSP页面的本质是一个java文件(servlet)。
在访问某个jsp页面时,会让该页面重新编译为.java文件-->.class文件,所以第一次访问某个JSP页面时会
慢一些。
JSP的组成
1.HTML元素
2.脚本(java代码)
3.表达式
用于在页面中嵌入变量的值
4.指令
<%@ 指令名 属性="值" %>
page指令 用于设置当前页面的属性
include指令 用于引入其他页面
taglib指令 用于引入其他标签库
5.注释
6.声明
在<%%>中无法定义方法,如果非要在jsp页面中定义方法,需要使用声明。不建议在jsp页面中定义方法。
7.动作
<jsp:动作名></jsp:动作名>
跳转
页面与页面之间跳转
<a href="另一个页面的地址">超链接</a>
<form action="另一个页面的地址">
<input type="submit">
</form>
<button id="btn">跳转</button>
<script>
$("#btn").click(function(){
location.href="另一个页面的地址";
location.assign("另一个页面的地址");
});
</script>
页面跳转至Servlet
<a href="servlet映射名">超链接</a>
<form action="servlet映射名">
<input type="submit">
</form>
Servlet跳转到页面或另一个Servlet
请求转发(内部跳转)
request.getRequestDispatcher("跳转的地址").forward(request,response);
重定向(外部跳转)
response.sendRedirect("跳转的地址");
跳转时传递数据
保存
作用域对象.setAttribute(String str,Object obj);
//将一个名为str的对象obj保存到某个作用域中。request就是一个作用域。
获取
Object obj = 作用域对象.getAttribute(String str);
//获取到的数据是Object类型,通常需要转型
List<泛型> list =(List<泛型>) request.getAttribute("list");
pageContext
当前页面对象。共享数据区域范围为当前页面。
如果不在同一个页面,数据无法读取。
request
请求对象。共享数据区域范围为一次请求。
如果跳转中途使用了重定向,数据无法读取。
session
会话对象。会话是用户访问服务器时的某个时间段。
共享数据区域范围在这个时间段内,默认30分钟。
如果在指定时间内没有操作或销毁会话时,数据无法读取。
application
项目对象。共享数据区域范围为整个项目。
EL
Expression Language 表达式语言
是为了使JSP写起来更加简便,替换JSP中的<%=%>,简化了JSP页面中输出数据的操作。
主要输出保存在某个作用域中的数据。
EL特点
如果通过"某个作用域对象.setAttribute("cus",customer)"方法保存的对象,
在JSP页面中如果用表达式,使用<%=cus%>,如果用EL,使用${cus}输出。
会依次从pageContext-->reqeust-->session-->application中获取指定对象,
如果一旦从某个作用域中获取到了指定对象,就不再判断后续作用域。
也可以输出指定作用域中的对象。
-
只能输出保存在作用域中的对象
-
减少代码(省去了获取对象、转换的过程)
-
免去非空判断
-
如果某个要输出的对象不存在,不会输出null,而是输出空字符串""。
使用
-
EL使用
在页面中输出保存在作用域中的对象
-
从作用域中依次查询并输出对象
-
从指定作用域中输出对象
-
输出对象的属性
-
输出对象的方法返回值
在页面中获取请求中的参数
用于获取表单提交的数据或超链接?后传递的数据。
使用${param.参数名}替换request.getParameter("参数")。
用于获取当前项目上下文(根目录+项目名)路径
如http://localhost:8080/Web03/就是一个项目上下文路径,
在JSP中使用${pageContext.request.contextPath}获取项目上下文路径
JSTL
Java Server Page Standarded Tag Library JSP标准标签库
可以使用JSTL中的特定标签,来替换JSP中常见的Java代码。如循环判断等,减少Java代码,提高页面的
可读性。
使用
1.导入JSTL对应的依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2.在JSP页面中,加入标签库指令
<%--在当前页面中使用jstl,加入以下指令--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.具体用法
-
定义变量或给变量赋值
<c:set var="变量名" value="值"></c:set>
-
if判断
<c:if test="判断条件"> 满足条件时的内容 </c:if>
-
遍历List集合
<c:forEach items="要遍历的集合" var="遍历出的对象名"></c:forEach>
-
遍历Map集合
<c:forEach items="要遍历的集合名" var="遍历出的键值对的名称"> ${键值对名.key.属性} ${键值对名.value.属性} </c:forEach>
Ajax
Asynchronous Javascript And XML
异步JavaScript和XML
一种数据交互方式,请求和响应是异步的。
使用ajax能实现在整个页面不重新加载的情况下,更新局部内容。
使用
1.在页面中导入jquery文件
<!--使用Ajax,需要导入jquery-->
<script src="jquery文件路径"></script>
2.在script标签中写ajax
<!--使用Ajax,需要导入jquery-->
<script src="jquery文件路径"></script>
<script>
某个节点.事件(function(){
//使用ajax异步提交数据
$.ajax({
//访问的URL地址
url:"servlet映射或具体url",
//提交的数据
data:{
//键:值
"形参":值,
"形参":值
},
//提交方式
type:"get/post/put/delete",
//成功访问URL后的回调函数
success:function(res){//res表示访问URL后返回的数据
},
//访问URL失败时的回调函数
error:function(){
}
});
});
</script>
JSP内置对象
在jsp页面中有一些对象是已经定义好了可以直接使用的,称为内置对象。
一共有9个内置对象。
- request
请求作用域对象
- response
响应对象
- pageContext
当前页作用域对象
- session
会话作用域对象
- page
当前jsp页面对象
- out
输出对象
- application
项目作用域对象
- config
配置对象
- exception
异常对象
Cookie
cookie通常用于更长时间地保存一些信息,即便关闭浏览器,也能保存。
cookie的创建
//创建cookie
Cookie cookie = new Cookie("username", "保存在cookie中的用户名");
//设置有效时长,单位为秒,这里表示7天有效
cookie.setMaxAge(60*60*24*7);
//通过响应对象response保存cookie对象到本地
response.addCookie(cookie);
cookie的获取
//读取cookie时是获取当前站点的所有cookie数组
Cookie[] cks = request.getCookies();
//遍历
for(Cookie ck :cks){
System.out.println( ck.getName()+"--"+ck.getValue());
}
Session
session是一个作用域对象,在访问任意jsp页面时,默认就会创建一个session对象(可以通过设置取消自
动创建)。
通常使用session保存一些信息,用于在同一站点的各个页面之间共享数据。
-
1.当访问的jsp页面或servlet中使用了session,会创建一个JSESSIONID(session编号),这是一个字符串,保存在一个cookie中。
-
2.再次访问该页面时,会查询该JSESSIONID是否存在,如果存在,直接使用,如果不存在,创建新的JSESSIONID
-
3.保存该JSESSIONID的cookie会随着浏览器的关闭自动销毁,所以关闭浏览器,session就会失效。
设置全局session有效时长
在指定时间内,打开浏览器但对session无操作,就会自动销毁session。
-
通过session.setMaxInactiveInterval(int seconds)设置有效秒数
-
在web.xml中配置
Session和Cookie对比
-
session中保存的是对象Object,cookie中保存的是字符串String,都以键值对的形式保存
-
session保存在浏览器和服务器端,cookie保存在浏览器
-
session保存的数据没有大小限制,cookie保存的数据有大小限制,不超过3KB
-
session在30分钟内没有访问或随着浏览器的关闭而销毁,cookie可以设置销毁时间
监听器Listener
对于项目的某个操作进行监听,这个操作可以是创建或销毁application、session,发送请求、得到响应。
常用的三个监听器接口
ServletContextListener application监听器
HttpSessionListener session监听器
ServletRequestListener request监听器
实现一个监听器
1.创建一个类,实现某个监听器接口
2.重写某个监听器接口中方法
3.在web.xml中配置监听器或通过注解配置
-
如果在web.xml中配置
-
如果通过注解配置,在自定义的监听器类上,加入@Web
过滤器Filter
使用
1.创建一个类,继承HttpFilter
2.重写其中受保护的doFilter的方法
3.在web.xml中配置过滤器或使用注解配置