JavaWeb详解

四种范围对象(小——>大)

pageContext  	        JSP页面容器(page对象)     当前页面有效
request   		请求对象		 	同一次请求有效
session   		会话对象			同一次会话有效
appliation 		全局对象			全局有效(整个项目有效)
以上4个对象共有的方法:
Object getAttribute(String name):根据属性名,或者属性值
void setAttribute(String name,Object obj) :设置属性值(新增,修改)
setAttribute("a","b") ;//如果a对象之前不存在,则新建一个a对象 ;
				 如果a之前已经存在,则将a的值改为b
void removeAttribute(String name):根据属性名,删除对象
a.
pageContext 当前页面有效 (页面跳转后无效)

b.
request   同一次请求有效;其他请求无效 (请求转发后有效;重定向后无效)

c.
session  同一次会话有效  (无论怎么跳转,都有效;关闭/切换浏览器后无效 ; 从 登陆->退出 之间 全部有效)

d.
application
	全局变量;整个项目运行期间 都有效 (切换浏览器 仍然有效);关闭服务、其他项目 无效

->多个项目共享、重启后仍然有效 :JNDI

1.以上的4个范围对象,通过 setAttribute()复制,通过getAttribute()取值;
2.以上范围对象,尽量使用最小的范围。因为 对象的范围越大,造成的性能损耗越大。

jsp九大内置对象

1、out:输出对象,向客户端输出内容
2、request:请求对象;存储“客户端向服务端发送的请求信息”
request对象的常见方法:
    String getParameter(String name) :根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)
    String[] getParameterValues(String name): 根据请求的字段名key ,返回多个字段值value  (checkbox)
    void setCharacterEncoding("编码格式utf-8") :设置post方式的请求编码  (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
    getRequestDispatcher("b.jsp").forward(request,response) ;  :请求转发 的方式跳转页面   A - > B
    ServletContext getServerContext():获取项目的ServletContext对象
3、pageContext  JSP页面容器
4、session   会话对象
5、appliation 全局对象
6、response  响应对象
7、config  配置对象(服务器配置信息)
8、page   当前JSP页面对象(相当于java中的this)
9、exception 异常对象

重定向与请求转发

重定向

  • 重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果,客户端浏览器地址变为新请求地址。
  • 重定向通过HttpServletRequest对象的sendRedirect()方法实现,该方法会通过客户端去重新访问新指定的URL地址,其语法格式如下:
public void sendRedirect(String location)throws java.io.IOException
  • 其中:
    location参数用以指定重定向的URL,它可以是相对路径或绝对路径。
  • 示例
response.sendRedirect("/chapter02/index.jsp");
  表示重定向到当前应用程序(chapter02)的根目录下的index.jsp页面

请求转发

  • 请求转发是指将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。

  • 请求转发的过程发生在服务器内部,对客户端是透明的。服务器只能从当前应用内部查找相应的转发资源,而不能转发到其他应用的资源。
  • 请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。
  • RequestDispatcher接口有以下俩个方法:
    1、forward()方法: 将请求转发给其他资源。
    2、include()方法:将其他资源并入到当前请求中。
  • 请求转发语法
RequestDispatcher dispatcher = request.getRequestDispatcher(String path);
dispatcher.forward(ServletRequest request,ServletResponse response);
  • 其中:
    1、path参数用以指定转发的URL,只能是相对路径;
    2、request和response参数取值为当前请求所对应的HttpServletRequest和HttpServletResponse对象。

  • 请求转发示例

RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp).forward(request,response);

表示请求转发到当前项目站点的根目录下的index.jsp页面


请求转发与重定向的区别

重定向和请求转发都可以让浏览器获得另外一个URL所指向的资源,但俩者的内部运行机制有很大的区别:
1、转发只能将请求转发给同一个Web应用中的组件;而重定向不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,或者重定向到其他站点的资源;
2、重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而请求转发过程结束后,浏览器地址栏保持初始的URL地址不变;
3、重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;请求转发在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为;
4、请求转发调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;重定向调用者与被调用者使用各自的request对象和response对象,它们属于俩个独立的访问请求和响应过程。
				请求转发				重定向

地址栏是否改变		        不变				改变

是否保留第一次		        保留				不保留	   --4种范围对象
请求时的数据

请求的次数			1				2

跳转发生的位置		        服务端				客户端发出的第二次跳转
转发:  
	张三(客户端)     ->    【 服务窗口 A (服务端 )    ->  服务窗口B  】

重定向:
	张三(客户端) 	 -> 	 服务窗口 A (服务端 ) ->去找B

	张三(客户端)     -> 	 服务窗口 B (服务端 ) ->结束

cookie和session

session(服务端)
Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。
相当于 本地缓存的作用: 客户端(hello.mp4,zs/abc)->服务端(hello.mp4;zs/abc)
作用:提高访问服务端的效率,但是安全性较差。

session机制:
客户端第一次请求服务端时,(jsessionid-sessionid)服务端会产生一个session对象(用于保存该客户的信息); 
并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
服务端由会 产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
然后 服务端会在 响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID);
因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)

客户端第二/n次请求服务端时:服务端会先用客户端cookie种的JSESSIONID  去服务端的session中匹配sessionid,如果匹配成功(cookie  jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;

cookie和session的区别:
			session		cookie
保存的位置	        服务端	        客户端
安全性		        较安全		较不安全
保存的内容	        Object		 String		
有事评论区留言,也欢迎一起学习的伙伴
原文地址:https://www.cnblogs.com/wt9866/p/13628994.html