一、JavaWeb
JavaWeb是什么
JavaWeb:是使用Java技术解决相关web互联网领域的技术总和;
web:简单理解网页的意思
web分类
静态web
- 概要:简单理解网页上的数据不会发生改变
- 优点 :内如稳定,易被搜索
- 缺点:无法动态更新,没有与数据库进行交互操作
动态web
- 概要:简单理解网页数据会因人而异(淘宝,京东…)
- 优点:页面动态更新,与数据库进行交互操作
- 缺点:当web动态资源,出现错误时,更改后台程序不易
二、Http协议(超文本传输协议)
概要
Http协议(超文本传输协议),用来规定浏览器与服务器之间进行通信的规则;
默认端口号:80
Https:Http协议的安全版,默认端口号为:443
两个时代
http 1.0时代
- 概要:一次连接只能处理一个请求
- 优点:节省传输时间
- 缺点:当遇到HTML文档中包含图片等文件,会消耗更多资源与时间,用户体验不好
http 1.1时代
- 概要:一次请求可以处理多个请求
- 优点:持久性连接、管道机制、分块传输、增加了host字段
- 缺点:网络延迟
请求方法、状态码介绍
get、post方法
- get方法:请求携带参数少,大小有限制,携带参数会在URL地址栏显示,不安全,但是高效
- post方法:请求携带参数,大小无限制,携带参数不会在URL地址栏显示,安全,低产
状态码
- 200:代表请求成功
- 3xx:请求重定向
- 4xx:找不到资源
- 5xx:服务器代码错误(502代表网关错误)
三、Servlet
Servlet简介
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
Servlet接口实现类
- HttpServlet
- GenericServlet
图解Servlet接口、HttpServlet、GenericServlet三者关系
Mapping问题
Servlet请求路径种类
- 单个请求路径
- 多个请求路径
- 通用请求路径
- 默认请求路径
- 自定义后缀,请求路径
注:指定的(确定的)Mapping映射路径优先级最高,若找不到映射页面,则走默认的Mapping映射路径
ServletContext
ServletContext:web容器在启动的时候,会为每个web程序都创建一个对应的ServletContext对象,代表当前的web应用;
ServletContext应用
- 共享数据
- 请求、转换
- 可获得ServletContext初始化参数
- 读取资源文件(调用getResourceAsStream()方法)
HttpServletResponse
HttpServletResponse应用
1.向浏览器输出信息(上面的案例都是)
2.下载文件
- 下载文件的响应头
//设置下载文件响应头,为避免中文乱码,使用URLEncoder.encode(filename,"utf-8"),参数一下载文件名,参数二编码
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
注:为避免中文乱码,使用URLEncoder.encode(filename,“utf-8”)来加工下,参数一:下载文件名,参数二:编码类型
- 具体实现类
public class Resp extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取资源绝对路径
String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/路飞.jpg");
//2.获取下载文件名
String filename = realPath.substring(realPath.lastIndexOf("\\") + 1);
//3.设置下载文件响应头,为避免中文乱码,使用URLEncoder.encode(filename,"utf-8"),参数一下载文件名,参数二编码
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
//4.获取输入流
FileInputStream input = new FileInputStream(realPath);
//5.创建缓冲区
int len=0;
byte[] buffer = new byte[1024];
//6.获取输出流,将资源写入客户端
ServletOutputStream output = resp.getOutputStream();
while((len=input.read(buffer))!=-1){
output.write(buffer,0,len);
}
//7. 关闭流
input.close();
output.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
3.重定向
重定向:即一个web资源收到客户端请求后,通知客户端去访问另一个web资源的过程
- 使用sendRedirect(“跳转路径”);
图解
HttpServletRequest
HttpServletRequest :HttpServletRequest代表客户端请求,用户通过http协议访问服务器,http请求中的所有信息会被封装在HttpServletRequest对象中,通过使用该对象的方法,可以获得请求的所有信息
- 获取前端初始化参数方法
- getParameter() 返回一个String类性值
- getParameterValues() 返回一个String类型数组
- 请求,转换方法
getRequestDispatcher(路径)
forward()
四、Cookie&&Session
会话
会话: 既用户打开浏览器,访问多个web资源后,关闭浏览器的过程,称之为会话;
有状态会话
有状态会话:既用户访问过页面后,下次再来访问时,服务器能够识别出用户曾经访问过该页面的过程;
保存会话的两种机制
- cookie : 客户端技术
- Session : 服务器技术
cookie(客户端技术)
客户端获得cookie过程:
- 从请求中拿到cookie信息
- 通过服务器响应给客户端
cookie细节
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个
- cookie大小限制为4kb
- 一个浏览器的cookie上限为:300个
如何删除cookie
- 关闭浏览器,意味着一次会话结束,对应的,cookie也会自动失效;
- 通过setMaxAge()方法,设置cookie的有效时间(最大生存时间)为0;
Session(服务器技术)
Session是什么:
在计算机中,尤其是在网络应用中,称为"会话控制"。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。
Session生命周期、作用
生命周期:当客户端访问时,服务器会给用户,创建一个Session对象,该对象只要浏览器没关,便会一直存在
作用:用来存储用户信息
Session与cookie的区别
- cookie把用户的数据写给浏览器,由浏览器保存;
- Session将用户的数据写到用户的独占的Session中,由服务器保存;
- Session对象有服务器创建;
如何使会话自动过期
- 在web.xml中的session-config配置
session-timeout元素用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。
1. <session-config>
2. <session-timeout>30</session-timeout>
3. </session-config>
- 在程序中调用session的setMaxInactiveInterval方法设置
代码如下:session.setMaxInactiveInterval(30 * 60); //单位是以秒为单位
五、Jsp
什么是Jsp
JSP全名为Java Server Pages,中文名叫java服务器页面,是一种动态网页技术标准 ,其根本是一个简化的Servlet设计,是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。
Jsp与HTML区别
- HTML只给用户提供静态的数据
- Jsp页面中可以嵌入Java代码,为用户提供动态数据
- Jsp本质上是一个Servlet
Jsp基础语法
注:在jsp页面中Java代码会原封不动的输出;HTML代码,则会通过out.write()输出
表达式
作用:将程序的输出,输出到客户端
格式:<%= 变量或者是表达式%>
脚本片段
格式:<% java代码或者是HTML代码块%>
Jsp声明
格式:<%!变量或者是方法%>
注:表达式与脚本片段运行后,会生成在Jsp生成的java类中的_jspService方法中;但是Jsp声明会被编译到Jsp生成的java类中
JSP指令
格式:<%@指令名 %>(指令名:page、taglib 、include )
特别注意:<%@include%>与jSP标签:<%jsp:include:xxx%>两者作用都是将几个页面合成
但是前者将几个页面融合在一个页面中;后者是页面的拼接,原先是几个页面后面还是几个页面
9大内置对象
PageContext、Request、Response、Session、Application 【SerlvetContext】、config 【SerlvetConfig】、out 、page、exception
可用于存放信息的对象,以及作用域
- PageContext :保存的数据只在一个页面中有效
- Request:保存的数据只在一次请求中有效,请求转发时会携带该数据
- Session:保存的数据会在一次会话中有效,从打开浏览器,到关闭浏览器
- Application :保存的数据只在服务器中有效,从打开服务器,到关闭服务器
从底层到高层的作用域:PageContext -Request-Session-Application
PageContext相关配置
- setAttribute(String,Object,int i)
该方法的参数三可以设置作用域
pageContext.setAttribute("null","null",PageContext.SESSION_SCOPE);
- forword()
通过该法,可以用与跳转页面
pageContext.forward("/error1.jsp");
JSP标签、JSTL标签、EL表达式
EL表达式
格式:${ 变量名}
作用:
- 获取数据
- 执行运算
- 获取web开发的常用对象
EL表达式获取表单中的数据:${param.参数名}
JSP标签
个别举例:
<jsp:include page="index.jsp" flush="true" ></jsp:include>
<jsp:forward page="error1.jsp" ></jsp:forward>
JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足;JSTL标签库自定义许多标签,可以供我们使用
注意:要使用JSTL标签,即使用JSTL标签库时需导入jstl-api、standard的jar包;jstl-api的jar包在项目中有,但是在Tomcat发布的应用WEB-INF的lib目录下不存在,为了程序正常运行,需要手动将其复制过去
set标签
<%--set标签--%>
<c:set var="score" value="76" scope="page" ></c:set>
if标签
<%--if标签--%>
<c:if test="${score>80}" var="isTrue"/>
<c:if test="${!isTrue}">
<c:out value="成绩小与80"></c:out>
</c:if>
choose标签,when标签
<%--choose标签,when标签--%>
<c:choose>
<c:when test="${score>90}">
<span style="color: aqua">优秀</span>
</c:when>
<c:when test="${score>80}">
<span style="color: aquamarine">良好</span>
</c:when>
<c:when test="${score>70}">
<span style="color: antiquewhite">中等</span>
</c:when>
</c:choose>
forEach标签
<%
ArrayList<String> lala = new ArrayList<>();
lala.add("张三");
lala.add("李四");
lala.add("劳务");
lala.add("啦啦");
lala.add("哈哈");
request.setAttribute("la",lala);
%>
<%--forEach标签--%>
<c:forEach var="s" items="${la}">
<c:out value="${s}"></c:out><br>
</c:forEach>
forEach标签2
相关参数介绍:
- var:每次遍历出来的变量名
- items:遍历的对象
- begin:遍历开始位置
- end:遍历结束的位置
- step:步长,相当于i++的作用
<%--forEach标签2 --%>
<c:forEach var="s" items="${la}" begin="0" end="4" step="2">
<c:out value="${s}"></c:out><br>
</c:forEach>
六、JavaBean
什么是JavaBean
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。 换句话说,JavaBean就是一个java的类,书写javaBean类必须满足以下条件:
- 具有无参构造
- 属性私有化
- 提供get与set方法
作用:一般用来和数据库的字段来做意义映射
七、MVC三层架构
MVC概要
- Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型(domain)或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
- View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
- Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。 也就是说控制器做了个调度员的工作。
八、Filter(过滤器)
什么是Filter
Filter:过滤器 ,用来过滤网站的数据;
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理
Filter开发过程
- 导入包
- 实现javax.servlet包下的Filter接口
- 在web.xml中配置Filter
注:1. 过滤器中的所有代码,在过滤特定请求时都会执行,比如下面案例中:只要请求路径为/a/*,都会执行过滤器中代码
注:2.必须要让过滤器继续通行,将请求向下提交,即实现doFilter()方法中第三个参数特有的doFilter()方法: