servlet总结:
网络程序现在最使用的三层构架 浏览器 web服务器 DB数据库
BS架构的优势:
特点:
数据库只负责数据的管理
web服务器负责业务逻辑的处理
浏览器负责提供页面操作
优点:
不需要单独安装客户端
开发相应的cs简单,客户端和服务端的通信模块都是使用标准的
HTTP协议进行通信
Servlet就是一个扩展web服务器功能的组件规范(即是服务器中的准讯http协议的功能扩展组件)
组件:在软件开发行业 符合一定规范 实现部分功能 并且需要部署到容器中
才能运行的软件模块
容器:符合一定规范 提供组件运行环境的一个程序
servlet运行原理:
浏览器-web服务器(Apache)-servlet容器(Tomcat)
如何开发一个servlet?
安装Tomcat
步骤:
1.编写一个实现Servlet接口或继承HttpServlet的java类
2.用javac命令编译源文件为字节码文件
3.用编完的组件打包
4.部署文件并拷贝到webapps文件下
5.启动并访问地址栏(web.xml中写的地址)
什么是Http?
就是由w3c指定的web服务器和浏览器之间如何交互通信的数据格式
两个对象负责浏览器和服务器之间的数据请求和回应
HttpServletRequest代表客户端的请求 请求中的所有数据都封装在这个对象中 通过这个对象的相关方法可以获取请求数据
作用:
读取和写入Http请求数据
取得和设置Cookies
取得路径信息
表示HTTP会话
实现请求转发
HttpServletResponse对象
代表提供给客户端的响应 封装了Http的相应数据 通过这个对象可以设置状态行 消息头 实体内容
作用:
设置客户端的输出内容
设置相应的是状态吗
设置浏览器的解码方式
设置Cookies
实现重定向
获取请求方法:
getParamter(name)(1:1)
getParamterValues(name)(1:M)
请求方式 (get post head put delete 一般多用get和post)
get请求 当需要向服务器请求指定资源是使用
什么时候浏览器发送get请求:在地址栏输入一个地址 点击链接 表单默认提交
特点:会将数据添加到资源路径后面 只能提交少量的数据
请求参数显示浏览器地址栏上 不安全
post请求
向服务器提交需要处理的数据 这些数据写在请求的内容里 可以导致新资源的产生和已有资源的更新
什么时候浏览器发送post请求
设置表单method属性为post
特点:
请求参数添加到实体内容中 可提交大量数据
不会将请求参数显示在浏览器地址栏 相对安全
乱码问题:
get的解决方式
第一种为在tomcat的文件里修改连接的端口的解码方式:以8080为例,就是在其方法里面添加一行代码:URIEncoding="utf-8";直接在根源处解决,一劳永逸;
第二种则是在Servlet里编写代码对获取到的请求数据进行编译器选择编译。也就是将获取到的乱码String再回炉重造下,代码为:
String code=req.getParameter("code"); code=new String(code.getBytes("iso8859-1"),"utf-8"); 这个方法是在Servlet里解决,灵活性比第一种好。
post方式:
1.在请求前书写代码req.setCharacterEncoding("utf-8");//只对post有效 优点:简单
2.发送响应时:res.setContentType("text/html ;charset=utf-8");//浏览器上显示正确编码
servlet运行步骤:
1.浏览器依据IP建立与容器的连接
2.浏览器请求数据打包
3.容器解析请求数据包 封装对象
4.容器依据路径找到servlet创建对象
5.容器调用servlet对象的service方法
6.容器将相应打包发给浏览器
7.浏览器取出结果 生成页面
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>web01.HelloServlet02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
开发servlet有三种方法:
a,实现servlet接口;
要重写service方法即可
b,继承GenericServet;
c,继承HttpServlet.
需要重写doGet、doPost方法。
重定向:
服务器想浏览器发送一个302状态码及一个Location消息头
浏览器收到后会立即想重定向地址发出请求
早期解决互联网网站跳转问题。在项目里:保存、新增、删除后重定向到查询. (302为重定向 )
如何重定向?
response.sendRedirect(String url)
return "redirect:toindex.do"
重定向特点:
重定向的地址可以市任意的
重定向之后 浏览器地址栏会发生改变
重定向过程中涉及到的web组件并不会共享同一个request和response对象
model 1:
浏览器发请求给服务器----Servlet/JSP-----DAO---DB---DAO---Servlet/jsp---浏览器
model 2:引入了MVC经典设计模式
将服务端代码分为了三部分:按功能划分:1.C 处理请求Controller控制层2.V 显示View视图层3.M 用来处理业务Model
在学习中C为Servlet,V为JSP,M为DAO
可以对代码解耦,便于团队开发。
如何实现一个servlet实现多个请求?
在web.xml中配置:
保留一堆servlet 一对servlet-mapping 在url-pattern中修改内容为*.do
通过request.getRequestURL()方法中获取请求资源路径
分析后分发
if(){
}else if(){
}.....
servlet生命周期:
实例化
容器调用servlet构造器 创建一个servlet对象
初始化
一般由GenericServet创建 不需要我们创建 init()只执行一次
处理请求(业务逻辑)
就绪
容器收到请求后调用servlet()来处理请求
销毁(destroy)
容器依据自身的算法删除servlet()对象 只执行一次
Servlet接口
包括init servlet destroy
GenericServle(抽象类)核心类
实现了servlet的部分方法(init和destroy )和service方法
servlet上下文
上下文是servletcontext 是一个全局的存储信息的空间 服务器启动它就存在 服务器关闭他就释放 为了节省空间 提高效率 他必须存储重要的 所有用户都共享的线程又是安全的信息
servletContext:唯一性 一直存在
获取上下文
GeneriServlet 提供getServletContext()
ServletConfig 提供getServletContext()
HttpSession 提供getServletContext()
FilterConfig 提供getServletContext()
Servlet跳转与EL表达式
在Servlet中操作内置对象
1.取得session对象
操作session依靠request取得
public HttpSession getSession();
2.取得application
public ServletContext getServletContext();
用法:super.getXX();
Servlet跳转
1.使用Servlet采用客户端跳转到jsp页面
response.sendRedirect()实现跳转
无法传递request,几乎不用
2.使用Servlet服务器端跳转到JSP页面
如果在JSP页面上,可以用<jsp:forward />实现服务器端跳转,但是Servlet中并没有此类
标签,如果要实现服务器端跳转,要使用requestDispatcher接口完成。
有两个方法:
1.跳转:public void forward(ServletRequest request , ServletResponse response);
2.包含:public void include (...) ;
获得RequestDispatcher只能用ServletRequest接口取得
public RequestDispatch getRequestDispatcher(String path);
转发
将未完成的处理通过容器转交给另一个web组件继续处理
步骤 1.绑定数据到request对象 2.获取转发器 3.转发
request.setAttribute(String name,Object obj);//绑定数据
request.getAttribute(String name)//获取数据
request.getRequestDispatcher(url)//获取转发器
rd.forward(request,response)//实现转发
requestDispatcher rd=request.getRequestDispatcher(url).forward(request,response)//这句是将第二部和第三步合成一句
removeAttribute移出数据
特点:绑定的数据在整个应用上的所有组件共享 一直可以被访问
注意:转发的目的地是同一个地址 并且forword之后的代码也一定会执行
1. request的setAttribute与getAttribute方法一般都是成对出现的,首先 通过setAttribute方法设置属性与属性值,然后通过getAttribute方法 根据属性获取到与该属性对应的对象值(获取到之后一般都需要进行向下 类型转换,将属性值转换为真正的对象)。setAttribute与 getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端 是否执行过这两个方法。
2. request的getParameter方法的作用是获取到客户端 通过表单或url请求参 数所发送过来的参数值,是客户端与服务器端之间的交互,服务器端要想 获取到客户端发送过来的数据,就需要使用getParameter方法来获取。没 有与getParameter方法对应的setParameter方法。
3. request对象内数据的存活范围就是在request对象的存活范围内,当客户 端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对 象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的 request对象,该request对象与之前的request对象没有任何关系,因此 也无法获得在之前的request对象中所存放的任何数据。
4. session对象内数据的存活范围也就是session对象的存活范围(?只要浏 览器不关闭,session对象就会一直存在?),因此在同一个浏览器窗口中 ,无论向服务器端发送多少个请求,session对象只有一个。
5. application(应用对象):存活范围最大的对象,只要服务器没有关闭, application对象中的数据就会一直存在。在整个服务器运行过程当中, application对象只有一个。
6. request、session以及application这3个对象的范围是逐个增加的: request只在一个请求的范围内;?session是在浏览器窗口的范围内?; application则是在整个服务器的运行过程中。
JSP 本质是servlet 是servlet的简化写法 可以与web servlet相互转换 <% %>
是sun公司指定的一种服务器端动态页面技术的组件规范
(由html和少量java代码构成 用%%包起来)
page指令 用于导包 设置页面属性
include指令 能将其他文件包含进来 也可以是静态的文件
内置对象有(可以直接调取):
request response out session
application pageContext page config exception
如何运行
1.拷贝静态页面代码到JSP页面
2.添加page指令pageEncoding和content
3.修改页面内容与目标页面一致
4.将需要动态生成的内容删除 替换为java代码
异常处理
使用转发进行跳转到指定页面进行提示说明
request.getRequestDispatcher(url).forward(request,response)
抛出异常
throw new ServletException(e)
web.xml文件中配置错误处理页面节点
状态管理
就是对客户端和服务端之间相互交互的数据就行管理或保存修改
客户端状态管理技术 Cookie技术 (将状态保存在客户端)
服务器状态管理技术 session技术 (将状态保存在服务端)
创建cookie
Cookie c=new Cookie(String name,String value);
request.add(c)
查询cookie
Cookie request.getCookies(c)
修改 Cookie[] Cookies=request.getCookies();
if(cookies!=null){
Cookie c=Cookies[0];
String value=c.getValue();
value=URLDecoder.decode(value,"utf-8")
}
Cookie 只能保存少量的数据 个数有限 只能保存字符串
生命周期 默认随着浏览器的关闭而关闭
可通过Cookie.setMaxAge(int seconds)自行设置时间
编码 Cookie c=new Cookie("city",URLEncoder.encode("北京","utf-8"))
session 有id属性
获取session
HttpSession s=request.getsession();
等价于request.getSession(true)
立即删除session对象
session.invadate()
一般先绑定在读取 没有就返回页面(多用于验证 登录)
浏览器若禁用Cookie 则session也不能用 可以使用URL(即:使用修改过的地址)重写来发送sessionid
.cookie和session总结
1.通俗的理解
它们都能用来临时存储数据,并具备如下特征:
所存数据可以在多个请求间共用.
所存数据可以在多个Servlet间共用.
每个浏览器会有一份单独的cookie和session.
2.专业的理解
HTTP协议是一个无状态协议,即协议没有要求服务器记住浏览器.
cookie和session就是用来让服务器记住浏览器的手段,即用来管理状态的.
状态:服务器记住浏览器的证据(数据).
实现重写
若是连接地址和表单提交request.encodeURL(String url)
若是重定向request.encodeRedirectURL(String url)生成重写后的url
session 安全 保存的数据类型丰富 可保存更多数据
JSP标签用来替代java代码
EL表达式是一套简单的计算规则 用于JSP标签的属性赋值 也可以用来直接输出
EL表达式的作用
访问Bean的属性
输出简单的运算结果
获取请求的参数值
${对象名.属性名}
${对象名[“属性名”]}
属性名不能写错 否则报错
容器从pageContext request session application查找对象
JSTL:JSP的标签库
1.将JSTL标签对应的jar文件拷贝到WEB-INF/lib目录下
2.使用taglib指令导入到要使用的JSP标签
<%@taglib uir="" prefix=""%> uir:JSP标签的命名空间
prefix:命名空间的前缀
核心标签-if标签
<c:if test="" var="" scope=""></c:if>
var和scope要配合使用
choose标签
<c:choose>
<c:when test=""></c:when>
</c:choose>
forEach标签
<c:forEach var="" items=""></c:forEach> items指要便利的集合
以及自定义配置标签
JSTL替换形式
<%= %> <% %> 替换为${} <c:xxx >...</c:xxx>
转发与重定向的区别
1)转发
a)地址栏不会改变
b)转发只能转发到当前web应用内的资源
c)可以在转发过程中,可以把数据保存到request域对象中
2)重定向
a)地址栏会改变,变成重定向到地址。
b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
c)不能再重定向的过程,把数据保存到request中。
结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!
当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。
与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
webinf下的数据文件是受保护的
网络程序现在最使用的三层构架 浏览器 web服务器 DB数据库
BS架构的优势:
特点:
数据库只负责数据的管理
web服务器负责业务逻辑的处理
浏览器负责提供页面操作
优点:
不需要单独安装客户端
开发相应的cs简单,客户端和服务端的通信模块都是使用标准的
HTTP协议进行通信
Servlet就是一个扩展web服务器功能的组件规范(即是服务器中的准讯http协议的功能扩展组件)
组件:在软件开发行业 符合一定规范 实现部分功能 并且需要部署到容器中
才能运行的软件模块
容器:符合一定规范 提供组件运行环境的一个程序
servlet运行原理:
浏览器-web服务器(Apache)-servlet容器(Tomcat)
如何开发一个servlet?
安装Tomcat
步骤:
1.编写一个实现Servlet接口或继承HttpServlet的java类
2.用javac命令编译源文件为字节码文件
3.用编完的组件打包
4.部署文件并拷贝到webapps文件下
5.启动并访问地址栏(web.xml中写的地址)
什么是Http?
就是由w3c指定的web服务器和浏览器之间如何交互通信的数据格式
两个对象负责浏览器和服务器之间的数据请求和回应
HttpServletRequest代表客户端的请求 请求中的所有数据都封装在这个对象中 通过这个对象的相关方法可以获取请求数据
作用:
读取和写入Http请求数据
取得和设置Cookies
取得路径信息
表示HTTP会话
实现请求转发
HttpServletResponse对象
代表提供给客户端的响应 封装了Http的相应数据 通过这个对象可以设置状态行 消息头 实体内容
作用:
设置客户端的输出内容
设置相应的是状态吗
设置浏览器的解码方式
设置Cookies
实现重定向
获取请求方法:
getParamter(name)(1:1)
getParamterValues(name)(1:M)
请求方式 (get post head put delete 一般多用get和post)
get请求 当需要向服务器请求指定资源是使用
什么时候浏览器发送get请求:在地址栏输入一个地址 点击链接 表单默认提交
特点:会将数据添加到资源路径后面 只能提交少量的数据
请求参数显示浏览器地址栏上 不安全
post请求
向服务器提交需要处理的数据 这些数据写在请求的内容里 可以导致新资源的产生和已有资源的更新
什么时候浏览器发送post请求
设置表单method属性为post
特点:
请求参数添加到实体内容中 可提交大量数据
不会将请求参数显示在浏览器地址栏 相对安全
乱码问题:
get的解决方式
第一种为在tomcat的文件里修改连接的端口的解码方式:以8080为例,就是在其方法里面添加一行代码:URIEncoding="utf-8";直接在根源处解决,一劳永逸;
第二种则是在Servlet里编写代码对获取到的请求数据进行编译器选择编译。也就是将获取到的乱码String再回炉重造下,代码为:
String code=req.getParameter("code"); code=new String(code.getBytes("iso8859-1"),"utf-8"); 这个方法是在Servlet里解决,灵活性比第一种好。
post方式:
1.在请求前书写代码req.setCharacterEncoding("utf-8");//只对post有效 优点:简单
2.发送响应时:res.setContentType("text/html ;charset=utf-8");//浏览器上显示正确编码
servlet运行步骤:
1.浏览器依据IP建立与容器的连接
2.浏览器请求数据打包
3.容器解析请求数据包 封装对象
4.容器依据路径找到servlet创建对象
5.容器调用servlet对象的service方法
6.容器将相应打包发给浏览器
7.浏览器取出结果 生成页面
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>web01.HelloServlet02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
开发servlet有三种方法:
a,实现servlet接口;
要重写service方法即可
b,继承GenericServet;
c,继承HttpServlet.
需要重写doGet、doPost方法。
重定向:
服务器想浏览器发送一个302状态码及一个Location消息头
浏览器收到后会立即想重定向地址发出请求
早期解决互联网网站跳转问题。在项目里:保存、新增、删除后重定向到查询. (302为重定向 )
如何重定向?
response.sendRedirect(String url)
return "redirect:toindex.do"
重定向特点:
重定向的地址可以市任意的
重定向之后 浏览器地址栏会发生改变
重定向过程中涉及到的web组件并不会共享同一个request和response对象
model 1:
浏览器发请求给服务器----Servlet/JSP-----DAO---DB---DAO---Servlet/jsp---浏览器
model 2:引入了MVC经典设计模式
将服务端代码分为了三部分:按功能划分:1.C 处理请求Controller控制层2.V 显示View视图层3.M 用来处理业务Model
在学习中C为Servlet,V为JSP,M为DAO
可以对代码解耦,便于团队开发。
如何实现一个servlet实现多个请求?
在web.xml中配置:
保留一堆servlet 一对servlet-mapping 在url-pattern中修改内容为*.do
通过request.getRequestURL()方法中获取请求资源路径
分析后分发
if(){
}else if(){
}.....
servlet生命周期:
实例化
容器调用servlet构造器 创建一个servlet对象
初始化
一般由GenericServet创建 不需要我们创建 init()只执行一次
处理请求(业务逻辑)
就绪
容器收到请求后调用servlet()来处理请求
销毁(destroy)
容器依据自身的算法删除servlet()对象 只执行一次
Servlet接口
包括init servlet destroy
GenericServle(抽象类)核心类
实现了servlet的部分方法(init和destroy )和service方法
servlet上下文
上下文是servletcontext 是一个全局的存储信息的空间 服务器启动它就存在 服务器关闭他就释放 为了节省空间 提高效率 他必须存储重要的 所有用户都共享的线程又是安全的信息
servletContext:唯一性 一直存在
获取上下文
GeneriServlet 提供getServletContext()
ServletConfig 提供getServletContext()
HttpSession 提供getServletContext()
FilterConfig 提供getServletContext()
Servlet跳转与EL表达式
在Servlet中操作内置对象
1.取得session对象
操作session依靠request取得
public HttpSession getSession();
2.取得application
public ServletContext getServletContext();
用法:super.getXX();
Servlet跳转
1.使用Servlet采用客户端跳转到jsp页面
response.sendRedirect()实现跳转
无法传递request,几乎不用
2.使用Servlet服务器端跳转到JSP页面
如果在JSP页面上,可以用<jsp:forward />实现服务器端跳转,但是Servlet中并没有此类
标签,如果要实现服务器端跳转,要使用requestDispatcher接口完成。
有两个方法:
1.跳转:public void forward(ServletRequest request , ServletResponse response);
2.包含:public void include (...) ;
获得RequestDispatcher只能用ServletRequest接口取得
public RequestDispatch getRequestDispatcher(String path);
转发
将未完成的处理通过容器转交给另一个web组件继续处理
步骤 1.绑定数据到request对象 2.获取转发器 3.转发
request.setAttribute(String name,Object obj);//绑定数据
request.getAttribute(String name)//获取数据
request.getRequestDispatcher(url)//获取转发器
rd.forward(request,response)//实现转发
requestDispatcher rd=request.getRequestDispatcher(url).forward(request,response)//这句是将第二部和第三步合成一句
removeAttribute移出数据
特点:绑定的数据在整个应用上的所有组件共享 一直可以被访问
注意:转发的目的地是同一个地址 并且forword之后的代码也一定会执行
1. request的setAttribute与getAttribute方法一般都是成对出现的,首先 通过setAttribute方法设置属性与属性值,然后通过getAttribute方法 根据属性获取到与该属性对应的对象值(获取到之后一般都需要进行向下 类型转换,将属性值转换为真正的对象)。setAttribute与 getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端 是否执行过这两个方法。
2. request的getParameter方法的作用是获取到客户端 通过表单或url请求参 数所发送过来的参数值,是客户端与服务器端之间的交互,服务器端要想 获取到客户端发送过来的数据,就需要使用getParameter方法来获取。没 有与getParameter方法对应的setParameter方法。
3. request对象内数据的存活范围就是在request对象的存活范围内,当客户 端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对 象就被销毁了;之后再向服务器端发送新的请求时,服务器会创建新的 request对象,该request对象与之前的request对象没有任何关系,因此 也无法获得在之前的request对象中所存放的任何数据。
4. session对象内数据的存活范围也就是session对象的存活范围(?只要浏 览器不关闭,session对象就会一直存在?),因此在同一个浏览器窗口中 ,无论向服务器端发送多少个请求,session对象只有一个。
5. application(应用对象):存活范围最大的对象,只要服务器没有关闭, application对象中的数据就会一直存在。在整个服务器运行过程当中, application对象只有一个。
6. request、session以及application这3个对象的范围是逐个增加的: request只在一个请求的范围内;?session是在浏览器窗口的范围内?; application则是在整个服务器的运行过程中。
JSP 本质是servlet 是servlet的简化写法 可以与web servlet相互转换 <% %>
是sun公司指定的一种服务器端动态页面技术的组件规范
(由html和少量java代码构成 用%%包起来)
page指令 用于导包 设置页面属性
include指令 能将其他文件包含进来 也可以是静态的文件
内置对象有(可以直接调取):
request response out session
application pageContext page config exception
如何运行
1.拷贝静态页面代码到JSP页面
2.添加page指令pageEncoding和content
3.修改页面内容与目标页面一致
4.将需要动态生成的内容删除 替换为java代码
异常处理
使用转发进行跳转到指定页面进行提示说明
request.getRequestDispatcher(url).forward(request,response)
抛出异常
throw new ServletException(e)
web.xml文件中配置错误处理页面节点
状态管理
就是对客户端和服务端之间相互交互的数据就行管理或保存修改
客户端状态管理技术 Cookie技术 (将状态保存在客户端)
服务器状态管理技术 session技术 (将状态保存在服务端)
创建cookie
Cookie c=new Cookie(String name,String value);
request.add(c)
查询cookie
Cookie request.getCookies(c)
修改 Cookie[] Cookies=request.getCookies();
if(cookies!=null){
Cookie c=Cookies[0];
String value=c.getValue();
value=URLDecoder.decode(value,"utf-8")
}
Cookie 只能保存少量的数据 个数有限 只能保存字符串
生命周期 默认随着浏览器的关闭而关闭
可通过Cookie.setMaxAge(int seconds)自行设置时间
编码 Cookie c=new Cookie("city",URLEncoder.encode("北京","utf-8"))
session 有id属性
获取session
HttpSession s=request.getsession();
等价于request.getSession(true)
立即删除session对象
session.invadate()
一般先绑定在读取 没有就返回页面(多用于验证 登录)
浏览器若禁用Cookie 则session也不能用 可以使用URL(即:使用修改过的地址)重写来发送sessionid
.cookie和session总结
1.通俗的理解
它们都能用来临时存储数据,并具备如下特征:
所存数据可以在多个请求间共用.
所存数据可以在多个Servlet间共用.
每个浏览器会有一份单独的cookie和session.
2.专业的理解
HTTP协议是一个无状态协议,即协议没有要求服务器记住浏览器.
cookie和session就是用来让服务器记住浏览器的手段,即用来管理状态的.
状态:服务器记住浏览器的证据(数据).
实现重写
若是连接地址和表单提交request.encodeURL(String url)
若是重定向request.encodeRedirectURL(String url)生成重写后的url
session 安全 保存的数据类型丰富 可保存更多数据
JSP标签用来替代java代码
EL表达式是一套简单的计算规则 用于JSP标签的属性赋值 也可以用来直接输出
EL表达式的作用
访问Bean的属性
输出简单的运算结果
获取请求的参数值
${对象名.属性名}
${对象名[“属性名”]}
属性名不能写错 否则报错
容器从pageContext request session application查找对象
JSTL:JSP的标签库
1.将JSTL标签对应的jar文件拷贝到WEB-INF/lib目录下
2.使用taglib指令导入到要使用的JSP标签
<%@taglib uir="" prefix=""%> uir:JSP标签的命名空间
prefix:命名空间的前缀
核心标签-if标签
<c:if test="" var="" scope=""></c:if>
var和scope要配合使用
choose标签
<c:choose>
<c:when test=""></c:when>
</c:choose>
forEach标签
<c:forEach var="" items=""></c:forEach> items指要便利的集合
以及自定义配置标签
JSTL替换形式
<%= %> <% %> 替换为${} <c:xxx >...</c:xxx>
转发与重定向的区别
1)转发
a)地址栏不会改变
b)转发只能转发到当前web应用内的资源
c)可以在转发过程中,可以把数据保存到request域对象中
2)重定向
a)地址栏会改变,变成重定向到地址。
b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
c)不能再重定向的过程,把数据保存到request中。
结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!
当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。
与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
webinf下的数据文件是受保护的