Java Web复习Day1
JavaWeb
一、Servlet的作用:
一般用于控制器,内容比较简单,通常包含以下内容:
1)获得请求参数
2)根据请求参数调用业务方法
3)根据业务方法返回值,决定跳转到哪个页面
4)在跳转页面之前,可以携带数据
Servlet原理
当浏览器访问web容器中的对应资源时,对应的资源会根据Request、Response这两个参数,传递相应的信息,再跳转到Servlet中的service方法,根据我们自己编写的类,处理相应的请求,最终将信息返回。
Mapping
将这个理解成映射即可。在我们的web.xml配置文件中,servlet中的配置我们自己编写的处理类,servlet-mapping中配置我们的访问的时候的url路径。
ServletContext
ServletContext类想一个大容器,他可以用来存放每一个Servlet中的数据。我们只需要使用 .setAttribute(“xx”,xx) 就可以手动的将我们Servlet中的数据放置进那个大容器。
重定向和请求转发(重点)
重定向:
请求转发:.forward()
两者的区别:
1.重定向改变地址url,转发地址栏不变
2.重定向可以访问外部资源,转发只能访问内部
3.重定向是客户端跳转,转发为服务器跳转
4.重定向是两次请求,转发是一次请求
请求转发,当A请求C的资源,但是A无法直接访问到,但是B能访问到,所以我们就访问B,以此来达到A访问C的目的
重定向,当A需要访问某资源的时候,先去访问B,但是B没有对应的资源,不过B却告诉A应该访问A,于是就去A再去访问C,继而拿到了对应的资源
二、四种属性范围(作用域):
用于传递数据(有效范围)
setAttribute(key, value); //存放数据
getAttribute(key); //读取数据
removeAttribute(key); //移除数据
page:只在当前JSP页面内有效(没啥用)
request:在一次请求内有效(最常用),请求结束时释放内存
服务器端跳转可以获得,但客户端跳转不能获得
session:在一次会话内有效(尽量少用,会加重服务器的负载),会话失效时释放内存
会话失效:关闭浏览器、会话超时、调用 session.invalidate()
application:在整个应用内有效(基本不用,只用于缓存),服务器关闭才释放内存
JSP内置对象的4中属性范围
Page:只在一个页面中保存属性,跳转之后无效
Repuest:只在一次请求中保存属性,服务器跳转后依然有
Session:在一次会话范围中保存,无论何种跳转都可以用,但新开浏览器无法使用
Application:在整个服务器中保存,所有用户都可以使用。
注意:尽量使用范围比较小的作用域
page < request < session < application
三、页面跳转方式
1)服务器端跳转:(主要的方法)
特点:浏览器地址栏不发生改变,是同一个请求,可以使用request传递数据
问题:刷新页面,可能导致表单重复提交
2)客户端跳转(重定向):(解决表单重复提交)
特点:浏览器地址栏发生改变,是同一个请求,可以使用request传递数据
问题:不能通过request传递数据,一般通过QueryString方式传递,即 ?id=xx&name=xx
四、Session会话:
通过客户端技术实现的一种服务器端技术,通常使用cookie实现,也可以使用url重写
cookie实现:每次请求会携带一个cookie:JSESSIONID
URL重写:每个URL后面都带上?JSESSIONID=xxxx
每个用户,在服务器端都有一个Session空间,所以尽量不使用session传递数据
一般使用session保存用户登陆信息,或者购物车对象
五、JSP的九个内置对象:
在JSP页面的<%%>中,内置对象,可以直接使用
out, request, response, pageContext, session, application, page, config
exception:只在<%@ page isErrorPage="true"%>时才存在
9个内置对象:
pageContext request response session application config out page exception
几种重要对象的功能:
pageContext对象:表示一个JSP页面的下文。
request对象:接收客户端发送而来的请求信息。
Response对象: 对客户端的请求进行回应,将Web服务器处理后的结果发回给客户端。
Session对象:完成用户的登录、注销等。
Application对象:用来存储和获取可以被所有用户之间进行共享的信息
Config对象:取得,此初始化的配置信息。
Out对象:完成页面的输出操作,使用printin()或print()方法输出信息。
六、JSP的语法:
JSP本质上是一个模板文件,由html代码+Java代码片段
注意:以后尽量在JSP文件中不要使用Java代码,而应该使用JSTL标签库+EL表达式
<% Java语句 %> : 必须以分号结尾
<%= 表达式 %> : 不能以分号结尾,等价于 <% out.print(表达示); %>
<%-- 注释 --%>
<%! 属性或方法的声明 %>
<%@ 指令 属性值1 属性值2 %>
七、JSP指令:
page: import, pageEncoding
include: 包含1个外部文件(可能不是JSP页面), 类似于 #include <xx>
taglib: 引入标签库
注意:自定义标签文件中,还有一些指令
八、EL表达式的隐含对象:${pageScope}
<br/>---------------从指定的page域中查找数据------------------------<br/>
<!-- pageScope——代表page域中用于保存属性的Map对象 -->
<%
pageContext.setAttribute("name","aaa"); //map
%>
${pageScope.name }
<br/>---------------从request域中获取数据------------------------<br/>
<!-- requestScope——代表request域中用于保存属性的Map对象 -->
<%
request.setAttribute("name","bbb"); //map
%>
${requestScope.name }
<br/>---------------从session域中获取数据------------------------<br/>
<!-- sessionScope——代表session域中用于保存属性的Map对象 -->
${sessionScope.user }
<!--applicationScope——代表application域中用于保存属性的Map对象 -->
<br/>--------------获得用于保存请求参数map,并从map中获取数据------------------------<br/>
<!-- param——表示一个保存了所有请求参数的Map对象 -->
<!-- http://localhost:8080/day12/3.jsp?name=aaa -->
${param.name }
<!-- 此表达式会经常用在数据回显上 -->
<!-- 模拟的应用场景是表单提交到后台校验没有通过,回到注册页面时的数据回显 -->
<form action="${pageContext.request.contextPath }/servlet/RegisterServlet" method="post">
<input type="text" name="username" value="${param.username }">
<input type="submit" value="注册">
</form>
<br/>--------------paramValues获得请求参数 //map{"",String[]}------------------------<br/>
<!-- paramValues——表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[] -->
<!-- http://localhost:8080/day12/3.jsp?like=aaa&like=bbb -->
${paramValues.like[0] }
${paramValues.like[1] }
<br/>--------------header获得请求头------------------------<br/>
<!-- header——表示一个保存了所有http请求头字段的Map对象 -->
${header.Accept }
${header["Accept-Encoding"] }<!-- 通过.运算符解决不了,用[] -->
<br/>--------------获取客户机提交的cookie------------------------<br/>
<!-- cookie——表示一个保存了所有cookie的Map对象 -->
<!-- 从cookie隐式对象中根据名称获取到的是cookie对象,要想获取值,还需要.value -->
${cookie.JSESSIONID.value }
<br/>--------------获取web应用初始化参数------------------------<br/>
<!-- initParam——表示一个保存了所有web应用初始化参数的map对象 -->
${initParam.xxx } //servletContext中用于保存初始化参数的map
${initParam.root }
九、标签库
JSP 标准标签库(JSTL)
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签
格式化标签
SQL 标签
XML 标签
JSTL 函数
JSTL 库安装
十、JavaScript