day13Servlet交互与JSP.docx
- 文档编号:25270820
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:16
- 大小:687.45KB
day13Servlet交互与JSP.docx
《day13Servlet交互与JSP.docx》由会员分享,可在线阅读,更多相关《day13Servlet交互与JSP.docx(16页珍藏版)》请在冰豆网上搜索。
day13Servlet交互与JSP
Servlet交互与JSP
1主要内容介绍
Ø1.Web页面跳转和信息共享
Ø2.Servlet作用域对象
Ø3.动态网页:
JSP
2Web页面跳转和信息共享
思考(学习过的Servlet):
如何书写Servlet?
Servlet中可以写些什么代码?
以后我们在Servlet中主要写什么代码?
2.1Servlet的三大职责
1.接收请求参数
2.调用业务方法处理请求(暂时从Servlet中直接调用dao层的方法)
3.页面跳转
界面层---》业务层(service)--》数据层(dao)
2.2数据共享与页面跳转
思考:
为什么需要数据共享和页面跳转?
为什么要有跳转:
Servlet需要跳转到其它Servlet中,因为我们需要职责分明,不同Servlet来完成不同的功能
Servlet跳转到JSP中,Servlet输出动态页面实现恶心,咱们需要使用JSP来做页面的显示
为什么要共享:
http是无状态的,因为在不断的跳转过程中我们需要对数据进行共享。
昨天咱们已经学习了一个数据共享Session了。
注:
Session有一个缺陷,咱们不能滥用。
数据共享和页面跳转的方式如下
2.3请求转发(forward)
需求:
AServlet中没有做完的事情跳转到BServlet中继续执行
语法:
req.getRequestDispatcher(Stringpath).forward(ServletRequestreq,ServletResponseresp);
getRequestDispatcher:
获得转发器
path:
跳转到哪里?
forward:
跳转,并带上参数,千万不要忘记调用此方法了!
补充一句:
上面代码写哪里?
AServlet中的service方法里面
示例:
特点:
1.转发过程中浏览器地址栏路径没变
2.只发了一个请求
3.两个Servlet中共享同一个请求(就是请求对象request对象),在请求中共享数据;响应由最后一个决定。
思考如何验证,并完成验证!
只会显示最后一个响应对象中的数据
跳转之后一般都不要写代码
4.只能够访问当前应用中的资源,不能够跨域跳转(老师我想跳转到源代码官网去看视频...)
可以使用相对路径,不推荐
5.可以访问WEB-INF中的资源
6.从html页面跳转到Servlet需要先加上server.xml中的path(如果有),Servlet中的跳转是不需要加的!
7.疑问:
既然可以访问WEB-INF中的资源了,那怎么之前又说放在里安全呢?
a)程序没有提供的路径就不能够访问;
b)在跳转之前可以做权限判断
2.4URL重定向(redirect)
需求:
AServlet中没有做完的事情跳转到BServlet中继续执行
语法:
resp.sendRedirect(Stringpath);
示例:
特点:
测试下面每个点请留意浏览器地址栏!
!
!
1.浏览器中地址会变,相当于访问了两次
注意:
path中应该加上server.xml中的path的值,如果有的话
2.发送了两个请求
3.因为是不同的请求,所以不能够共享请求中的数据
4.最终的响应是由最后一个Servlet决定
5.可以跨域访问资源(尝试访问)
6.不能够访问WEB-INF中的资源(思考为什么?
)
2.5请求包含(include-不用)了解
需求:
AServlet中没有做完的事情跳转到BServlet中继续执行
语法:
req.getRequestDispatcher(Stringpath).include(ServletRequestreq,ServletResponseresp);
特点:
基本上和forward一样,只是把两次响应的结果都输出了
2.6常见面试题:
1.请求转发forward和URL重定向的区别?
回答方式:
①分别解释各自的定义
②罗列各自的特点(最好是表格对比)
③各自的使用场景(其实也是来源于特点)
2.两者如何选择?
①如果需要共享请求中的数据,只能用请求转发
②若要访问WEB-INF中的资源,只能用请求转发
③若要跨域访问,只能用URL重定向
④请求转发可能造成表单重复提交问题
3数据共享与作用域对象
作用域对象存在的意义:
为了在多个web组件之间传递和共享数据。
3.1认识作用域对象与操作
上面的作用域对象其中可以存储一些数据,在某种程度上(作用域)实现数据的共享
面试题:
HttpServletRequestreq中下面两个的区别
HttpServletRequest中有如下的两个方法而已:
req.getParameter(“name”);取到前台请求传入的参数
req.getAttribute(“name”);把req当成作用域对象来存储数据,后台自己把数据存进去,在req传给其它地方,在取出(例如forward)
作用域对象的操作其实就是调方法完成:
1.设置共享信息;
2.获取共享信息;
3.修改共享信息;
4.删除共享信息;
3.2作用域经典案例(测试)
3.3ServletContext对象
1.获得ServletContext对象的方式:
super.getServletContext()
this.getServletContext()
getServletContext()
都是一样的,提示我们这个方法是父类中的
方式3:
Tomcat7才开始支持;
方式4:
支持低版本,古董
方式1:
简单,但是如果我们去拿对象的类本身是一个普通类就只能够是方式3和4了
2.ServletContext中的常用方法:
StringgetContextPath():
获取当前应用的上下文路径.
就是Tomcat/conf/server.xml中的path值
StringgetRealPath(Stringpath):
获取某个资源的绝对路径.
例如获得:
F:
\workspace\servlet_jsp\webapp
StringgetInitParameter(StringparamName);全局初始化参数:
先看传统的Servlet的初始化参数:
因为配置在当前ServletContextDemo中,所以只能被ServletContextDemo使用,其他Servlet无法使用.
而在开发中,多个Web组件(Servlet/Filter)可以拥有共同的初始化参数,此时只能配置N次,不利于维护.
解决方案:
使用全局的初始化参数,Web组件都可以共用,配置问web.xml文件中.
注意:
获取全局的初始化参数,就再也不能使用ServletConfig对象.getInitParameter来获取了.
只能使用,ServletContext对象.getInitParameter(StringparamName);
============================================================================================
面试题1:
req.getParameter("")和req.getAttribute("")的区别?
req.getParameter:
用户传过来的
req.getAttribute:
从作用域里拿的(必需是放到作用域里的)
面试题2:
ServletConfig.getInitParameter
application.getInitParameter有什么区别?
ServletConfig.getInitParameter只作为于一个Servlet
application.getInitParameter整个应用都可以拿到
配置的不同
============================================================================================
4动态网页:
JSP
4.1为什么有了JSP
1.JSP:
JavaServerPages:
Java的服务网页(Java动态网页)
2.Servlet的缺陷:
输出动态网页。
。
。
太恶心了
没有体现责任分离思想(谁擅长做什么就应该做什么)
3.Java实现动态网页的技术
Servlet:
Java代码(主)+html片段(辅)--->动态网页.
JSP:
Java代码(辅)+html页面(主)--->动态网页.(html页面中可以写Java代码)
4.2JSP原理分析(第一个JSP页面)
一个jsp其实就是一个Servlet;
从访问方式来看:
html,通过tomcat和直接访问效果是一样的
jsp如果直接放在浏览器中显示源码,通过tomcat获得是正常内容
jsp中如果有中文,需要把里面的所有编码都修改为UTF-8
可以在Eclipse中的修改总的配置
jsp运行在服务器中
访问方式:
http:
//localhost/xx/hellojsp/Hello.jsp
结果:
一个jsp其实就是一个Servlet
4.3JSP语法
1.注释
i.
--html注释-->直接写html注释,会输出到页面上让用户看到(浏览器查看源码)
ii.<%--jsp注释--%>用户从页面上是看不到的
2.输出数据到页面
<%=hello%>
3.JSP中的Java脚本片段
<%
语句1;
语句2;
%>
上面的代码翻译成java文件放在...service方法中
4.定义类的成员
<%!
Stringstr;
voidtestMethod(){}
%>
5.总结:
JSP中写Java代码相当恶心和Servlet中写html代码有一拼
在JSP里面不要写JAVA代码
在Servlet里面不要写HTML代码
4.4JSP三大指令
标准指令:
设定JSP网页的整体配置信息.
特点:
1:
并不向客户端产生任何输出,
2:
指令在JSP整个文件范围内有效
3:
为翻译阶段提供了全局信息
<%@指令名称属性=属性值属性=属性值%>
---------------------------------------------
1:
page指令:
设置当前JSP配置信息.
errorPage="/myerror.jsp":
如果当前页面出错,就跳转到对应的页面
isErrorPage="true":
这个页面是否是错误页面(当我们要在页面上直接使用exception的时候就可以加上它)
演示1:
局部错误页面跳转
演示2:
全局错误页面
在项目的web.xml中配置
web.xml修改了记得重启哦,亲!
注意:
如果既有全局又有局部将会以局部的为准
2:
include指令:
JSP包含其他文件.
注意:
抽出去的jsp中只需要<%@page...%>和内容即可,否则太多,请查看html页面源码验证
3:
taglib指令:
引人标签库.
4.5JSP九大内置对象和四大作用域对象
还有上面的application
4.6JSP动作元素
JSP动作元素可以取代JSP中的Java代码(使用不多).
5今日要求
1.掌握Servlet跳转(forward与redirect)
2.掌握四大作用域对象
3.ServletContext得到的三种方式
4.什么是JSP-JSP的语法
5.三大指令,九大内置对象,四大作用域对象(面试题)
6作业
1昨天的邮件列表作业改为使用跳转
牢牢记的点:
Servlet里面不要写HTML代码
2完成计数器(作用域经典案例)
3完成一个计算器
今天的内容都比较重要,希望大家多花点时间把上课的代码都好好理解一下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day13Servlet 交互 JSP