- Web组件(Servlet/JSP)的交互:
Web组件之间的跳转,数据共享. - 不加斜杠表示 不能继承上下文路径,表示相对当前servlet路径;有/表示项目的根路径;以后加/
-
请求转发:
从Servlet1,请求转发到Servlet2.
Servlet1完成一部分的功能,再跳转到Servlet2,继续完成剩下的功能.
语法:
request.getRequestDispatcher(String path).forward(request,response);
参数:path,表示跳转的目标的路径(资源的名称).
注意:别忘了forward.--------------------------------------------------------------
分析请求转发的特点:
1:浏览器地址栏不发生改变,
2:请求转发只发送一个请求.(但是, 请求对象有2个)RequestFacade,ApplicationHttpRequest实验证明:同一个response对象,在servlet2响应后,servlet1就不响应了,但servlet1和servlet2的out.write后的还能执行
3:共享同一个请求中的数据.
4:最终响应给浏览器的由Servlet2来决定.
5:请求转发不能跨域访问,只能跳转到当前应用中的资源.
6:请求转发可以访问WEB-INF目录中的资源.啊啊 请求servlet1之前【】org.apache.catalina.connector.RequestFacade@3b1a81be 请求servlet1之前【】org.apache.catalina.connector.ResponseFacade@3f250205 啊啊 org.apache.catalina.core.ApplicationHttpRequest@3b1db3ba 请求servlet2之前【】org.apache.catalina.core.ApplicationHttpRequest@3b1db3ba 请求servlet2之前【】org.apache.catalina.connector.ResponseFacade@3f250205 请求servlet2之后【】org.apache.catalina.core.ApplicationHttpRequest@3b1db3ba 请求servlet2之后【】org.apache.catalina.connector.ResponseFacade@3f250205 关闭out之后【】 请求servlet1之后【】org.apache.catalina.connector.RequestFacade@3b1a81be 请求servlet1之后【】org.apache.catalina.connector.ResponseFacade@3f250205 关闭out之后
URL重定向:
语法:
response.sendRedirect(String url);
参数:url,表示目标资源地址
--------------------------------------------------------------
分析URL重定向的特点:
1:浏览器地址栏发生改变,从/redirect/s1,变成目标地址(/redirect/s2).
2:URL重定向发了两次请求.但是两次请求响应是同一个request对象和同一个response对象,redirect1执行完才重定向
3:因为URL重定向是两次独立的请求?所以不共享请求中的数据.
4:最终响应给浏览器的由Servlet2来决定(把目标地址拷贝到浏览器地址栏,敲回车).
5:URL重定向能跨域访问,可以访问其他应用中的资源.
6:URL重定向不能访问WEB-INF目录中的资源. -
李 请求redirect1之前【】org.apache.catalina.connector.RequestFacade@1cea71b6 请求redirect1之前【】org.apache.catalina.connector.ResponseFacade@e079e52 请求redirect1之后【】org.apache.catalina.connector.RequestFacade@1cea71b6 请求redirect1之后【】org.apache.catalina.connector.ResponseFacade@e079e52 关闭out之后 null 请求redirect2之前【】org.apache.catalina.connector.RequestFacade@1cea71b6 请求redirect2之前【】org.apache.catalina.connector.ResponseFacade@e079e52 请求redirect2之后【】org.apache.catalina.connector.RequestFacade@1cea71b6 请求redirect2之后【】org.apache.catalina.connector.ResponseFacade@e079e52
-
如果需要跨域访问,避免表单的重复提交,只能使用URL重定向.
-
Servlet的三大作用域对象:
目的:共享数据.
request: 每一次请求都是一个新的request对象,如果在Web组件之间需要共享同一个请求中的数据,只能使用请求转发.
session: 每一次会话都是一个新的session对象,如果需要在一次会话中的多个请求之间需要共享数据,只能使用session.
application: 应用对象,Tomcat启动到Tomcat关闭,表示一个应用,在一个应用中有且只有一个application对象.作用于整个Web应用,可以实现多次会话之间的数据共享.
---------------------------------------------------------------
对象名称 对象的类型
---------------------------------------------------------------
request HttpServletRequest
session HttpSession
application(servletContext) ServletContext
---------------------------------------------------------------
作用域对象如何共享数据:
---------------------------------------------------------------
1:设置作用域中的共享数据.
作用域对象.setAttribute(String name,Object value);
2:获取作用域中的共享数据.
Object value = 作用域对象.getAttribute(String name);
3:删除作用域中的指定的共享数据.
作用域对象.removeAttribute(String name);注意:在哪一个作用域中设置共享数据,就只能从该作用域中取出数据.
-
ServletContext接口:表示Web应用对象,(从Tomcat启动到Tomcat关闭之间,应用中有且只有一个ServletContext对象,而且是在Tomcat启动的时候就创建的在JSP中把该对象称之为:application)
------------------------------------------------------------------------------------
如何获取ServletContext对象:
方式1:在Servlet类中: super.getServletContext();必须servlet子类
方式2:通过请求对象来获取: request.getServletContext(); 该方法是从Tomcat7开始存在的.不许servlet子类,只要用request对象即可调用
方式3:通过session对象来获取:request.getSession().getServletContext();
注意:无论是哪一种方式,获取的都是同一个ServletContext对象.
常用的方法:
1:String getRealPath(String path):根据一个资源的相对于Web根路径的路径,获取它的绝对路径. (伪路径,直接拼接字符串而已拼接到相对路径的磁盘路径) 在文件上传或下载用到C:\work\workSpace\lihj-workSpace1809\javaWeb\webapp\index.html
String realPath = super.getServletContext().getRealPath("/WEB-INF/in.html");
2:String getContextPath():返回当前响应的上下文路径<Context path="XXXX"/>:
--------------------------------------------------------------------------------
全局初始化参数.
获取全局的初始化参数,只能使用以下的两个方法:
String getInitParameter(String name):获取指定名称的全局初始化参数.
Enumeration<String> getInitParameterNames():获取所有全局的初始化参数的名字.注意:
ServletConfig接口中的获取初始化参数的方法,只能获取当前Servlet自身的初始化参数,不能获取全局的初始化参数.
ServletContext接口中的获取初始化参数的方法,只能获取全局的初始化参数,不能获取局部的初始化参数. -
JSP:Java Server Page, Java的动态服务页面
JSP的基本语法:
1、JSP的注释:
作用:注释Java脚本代码
语法:<%--这是JSP注释--%>
2、JSP中的Java脚本片段:
作用:书写Java代码逻辑
语法: <% 语句1; 语句2; %>
原理:其中的语句会原封不动的被服务器翻译到对应的Servlet的_jspService方法中。
3、JSP的Java脚本表达式:
作用:输出数据到页面上
语法:<%=表达式%>(实际上就是调用输出流打印到页面上) out.print(表达式);
4、JSP的声明:
作用:定义类的成员
语法:<%! Java代码 %>
原理:其中的语句会原封不动的被服务器翻译到对应Servlet类中,作为成员变量和方法.JSP的标准指令:设定JSP网页的整体配置信息
特点:
1:并不向客户端产生任何输出;
2:指令在JSP整个文件范围内有效;
3:为翻译阶段提供了全局信息;
每一个JSP都得有page指令,一般放在JSP的第一行.指令的语法
<%@ 指令名称 属性=属性值... %>-------------------------------------------
JSP的三大指令:
1):page
2):include
3):taglib
------------------------------------------page指令:
作用:定义JSP页面的各种属性
属性:
language:指示JSP页面中使用脚本语言。默认值java,目前只支持java。
extends:指示JSP对应的Servlet类的父类。不要修改。
*import:导入JSP中的Java脚本使用到的类或包。(如同Java中的import语句)
JSP引擎自动导入以下包中的类:
javax.servlet.*
avax.servlet.http.*
javax.servlet.jsp.*
注意:一个import属性可以导入多个包,用逗号分隔。
*sessioin:指示JSP页面是否创建HttpSession对象。默认值是true,创建req.getSession(),可用session
*buffer:指示JSP用的输出流的缓存大小.默认值是8Kb。
autoFlush:自动刷新输出流的缓存。
isThreadSafe:指示页面是否是线程安全的(过时的)。默认是true。
true:不安全的。
false:安全的。指示JSP对应的Servlet实现SingleThreadModel接口。
*errorPage:指示当前页面出错后转向(转发)的页面。值是:跳轉到的錯誤頁面的path
目标页面如果以"/"(当前应用)就是绝对路径?或同級下資源名
配置全局错误提示页面:
web.xml
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
*isErrorPage:指示当前页面是否产生Exception对象。為true才可拿到Exception,同session
*contentType:指定当前页面的MIME类型。作用与Servlet中的response.setContentType()作用完全一致
*pageEncoding:通知引擎读取JSP时采用的编码(因为要翻译)等价于resp.setCharacterEncoding("UTF-8");
还有contentType属性的作用。
*isELIgnored:是否忽略EL表达式。${1+1}。默认值是false。request HttpServletRequest 请求对象,一个请求就一个对象
response HttpServletResponse 响应对象
session HttpSession 会话对象,一个会话就一个session对象
pageContext PageContext 页面对象,一个页面一个对象
exception Throwable 异常对象
application ServeltContext web应用对象,一个应用要给ServeltContext
config ServletConfig 当前Servelt的配置信息对象
out JspWriter 输出流对象
page Object 页面对象,一个页面就是一个page对象JSP的四大作用域:
作用域对象就只能在自己的作用范围之内共享数据.pageContext(page) PageContext 当前JSP的作用域对象
request HttpServletRequest 当前请求的作用域
session HttpSession 当前会话的作用域
application ServletContext 当前Web应用的作用域 -
jsp 常用动作元素
<jsp:forward page="要跳转资源路劲"> :jsp页面的请求转发操作
<jsp:param value="参数值" name="参数名"/> : 给请求转发设置参数
</jsp:forward> -
页面包含
静态包含:
语法:
<%@include file="要包含的资源路径"%>
特点:
编译成一个Servelt,把包含的jsp中内容直接拼接到主的页面上
(不能带参数)
动态包含
语法:
<jsp:include page="要包含的资源路径”>
<jsp:param value="xiaoming" name="name"/>
</jsp:include>
特点:
会生成各自独立的Servelt,然后再访问的时候才去动态的包含进去
------------------------------------------------------------------
如何选择包含:
如果需要在包含过程带参数就使用动态包含,其他都可以,使用静态可以提高渲染的速度(性能)
javaweb ---jsp-作用域-错误页面待完成
最新推荐文章于 2022-04-26 10:33:10 发布