jsp总结
来源:互联网 发布:有哪些数据库管理系统 编辑:程序博客网 时间:2024/06/06 16:35
回顾:
javaScript的这个页面它是往html里面进行嵌套的,依赖于html, 单独运行js文件,你肯定运行不了
所有的东西都是往服务器上搭, tomcat就是一个平台,可以接收好多的项目,可以去加载,访问的时候就去服务器里面找,看有没有该项目
jsp就是servlet, 只不过一个是图形化的,一个是代码的
所谓javaweb指的就是动态web资源的开发
什么是servlet?
servlet是运行在web服务器中的小型Java程序(即:服务器端的小应用程序). servlet通常通过HTTP(超文本传输协议)接收和响应来自客户端的请求.
html, xml ,jsp 页面的标签属性值必须用引号引起来。单双引号都行
这也说明了为什么在servlet中可以这样写
out.print("\t\t姓名:<input type=\"text\" name=\"name\"><br/>\r\n");
out.print("<a href='https://www.baidu.com'>点我<a>");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubrequest.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.print("登录成功");out.print("\t\t姓名:<input type=\"text\" name=\"name\"><br/>\r\n");out.print("点击跳转\r\n");out.print("<a href='https://www.baidu.com'>点我<a>");}
点访问该servlet时,浏览器上可以看到返回给客户端的html文本
一、 jsp入门
sun公司推出的一种用于开发动态web资源的技术
JSP 全名为 java server pages ,中文名叫 java服务器页面, 其根本是一个简化的Servlet设计.
JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm, *.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成jsp文件,后缀名为(.jsp).
用JSP开发的Web应用是跨平台的, 即能在Linux下运行,也能在其他操作系统上运行, JSP与Servlet一样,是在服务器端执行的,通常返回给客户端的就是
一个HTML文本, 因此客户端只要有浏览器就能浏览.
1. web资源的运行原理
html:静态web资源,DefaultServlet读取html文件,通过response输出给IE浏览器
Servlet:动态web资源,web容器(Servlet引擎)解析web.xml文件,找到url对应的java类
通过反射创建Servlet对象,调用service方法
Class.forName(“cn.itcast.servlet.Servlet1”).newInstance();
jsp: 动态web资源
jsp页面在第一次被访问的时候,web容器(jsp引擎)会将jsp翻译成一个Servlet,然后调用servlet的
service方法
jsp 被编译后会生成Servlet,生成的Servlet会被放到
%tomcat安装目录%\work\Catalina\localhost\webcontext
注意:
若你的tomcat配置在Eclipse的Server中了,则在Eclipse中运行tomcat后,工程的jsp文件被编译成servlet文件后,不是放在tomcat中,
而是放在Eclipse的workspace目录的 .metadata目录下.
我的工程中的JSP文件被编译后就放在
workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\工程名\org\apache\jsp\路径下
第二次访问jsp的时候如果jsp没有任何的改动,
web容器就不会翻译了而是找刚才的Servlet为用户服务
2. jsp是什么
实际上jsp 的本质就是 Servlet,只是提供了一种比较直观的书写方式,因为写jsp就像在写Html
jsp中可以写 java代码,有两种写法
1) jsp(输出)表达式
内容会被放到 out.print()里面输出给浏览器
<%=new Date() %>
2) jsp脚本
jsp脚本里可以包含任何想执行的java代码,内容会原封不动地被翻译到 Servlet的service方法中
<% // java 代码 %>
3. jsp和 Servlet的区别
1) Servlet适合写java代码,因为Servlet就是一个java类
在开发中使用Servlet对用户发送的请求进行处理并做出响应
2) jsp适合做数据美化,作为数据显示模板
因为jsp页面直接书写HTML标签
3)项目中的web层通常使用mvc设计模式 Servlet+jsp+javabean
其中, Servlet做控制器,处理用户请求
jsp作为显示模板
javabean 作为封装数据的实体
4)如何养成一种良好的编码风格
在Servlet中应避免做任何的数据输出
在 jsp中应避免去直接书写java代码,而实际上要做到这点很难,所以需要用到 el和 jstl
二、 jsp语法
1.模板元素
在 jsp页面中所有的 html标签部分被称作模板元素,用于对整个网页进行布局
2. jsp脚本
jsp中的java代码被称作jsp脚本
有三种形式
1) 脚本表达式
被翻译到 out.print()方法中
<%=new Date() %>
2) 脚本片段
被翻译到 service方法中
<% for(int i=0; i<10; i++) { System.out.println(i); } %>
3) jsp 声明
被翻译到 service方法外面
写成员变量\成员方法\静态代码块
<%! private String name; static { ....... } %>
3. jsp指令
include指令用于包含一个页面
taglib指令用于引入标签库文件
page指令用于说明jsp的页面情况
page指令一般都放在页面的开头,但是不管放在哪都对整个页面起作用
page指令常用的主要有以下几个:
1) import导包,导入多个包时需要以“,”隔开 也可以分作多条指令书写
2) session说明是否使用session
默认值为true,被翻译的Serlvet中会自动获得Session
如果将该值指定为false被翻译的Servlet的service方法中将不获取session
3) errorPage指定错误跳转的页面
在 web.xml文件中同样可以配置错误页面
可根据异常类型或错误编码进行配置
error-page
4) pagaEncoding
通知jsp引擎在翻译jsp的过程中以什么编码方式来解码jsp文件
通知 Servlet引擎 response编码方式,相当于 response.setContentType()
说白了
只要给jsp指定了 pageEncoding=”utf-8”
jsp引擎在翻译jsp时,就会自动加上一句
response.setContentType(“text/html;charset=utf-8”)
扩展 : jsp乱码问题
在 tomcat6以后jsp就没有乱码问题了,如果是使用tomcat5才会出现乱码问题
a.jsp
中国
gb2312码
98 99
jsp引擎
iso-8859-1解码
%¥%
Servlet
%¥%
Servlet引擎
response
编码 iso-8859-1
98 99
response.setContentType
%¥% gb2312 编码乱上加乱
IE浏览器
98 99
iso-8859-1 %¥%
gb2312 中国
jsp乱码解决 告诉jsp引擎jsp页面是什么码,这样翻译才不会错
告诉response用什么码编码再发给浏览器
三、 jsp九个内置对象 (面试)
1.面试题:
列举出jsp页面的九个内置对象,并加以说明
2. out对象
JspWriter类型,带缓冲的字符流 类似BufferedWriter
写入该流的数据最终会被刷新到 response , 调用response.getWriter().write()方法
什么情况下 JspWriter会将数据刷新
1)缓冲区写满(默认大小为8kb,可以在page指令中通过 buffer属性设置缓冲区大小)
2) jsp页面结束
注意:
1)jsp中输出数据尽量使用 out不要使用response直接获得流输出
原因在于,写入 out的数据会进缓冲区再刷新到response,如果两个都用,会导致后写的数据显示在前面
2)jsp页面结束时会自动调用 response.getWriter()将数据刷新
所以在jsp中不要调用 getOutputStream()
当然也不方便做文件下载
3. pageContext对象
主要功能,用于获得其他8大隐式对象
这样做的意义:
需要移除jsp中的java代码,就需要将java代码写到一个java类的成员方法中,然后想办法在jsp
页面中调用该方法,以达到代码复用的目的
由于在jsp中的java代码难免会访问8个隐式对象,因为这些对象都是和web开发相关的对象
要移除这部分java代码就需要将8个对象传递给java类的方法,为了方便,我们通常的做法是只传递一个
pageContext对象过去,这样在方法中就可以通过该对象很轻松地获得其他8个对象了
pageContext也是一个域对象,但只是在当前jsp页面有效
重点:
1) 默写9个对象, (具体描述9个对象怎么用)
2) 理解pageContext对象的意义 (获得其他8个对象)
pageContext有个特殊的方法 findAttribute()
四、jsp的6个动作
<jsp:include page="header.jsp"></jsp:include>
五、 web开发中的四个域(重点)
范围由小到大: page(jsp有效) request(一次请求) session(一次会话) application(当前web应用)
1.这4个对象的生命周期?
声明周期就是指对象的创建到销毁的期间
page: jsp 页面被执行,生命周期开始,jsp页面执行完毕,生命周期结束
request :用户发送一个请求,开始,服务器返回响应,请求结束,生命周期结束
session :用户打开浏览器访问,创建session(开始),session超时或被声明失效,该对象生命周期结束
application: web应用加载的时候创建(开始), web应用被移除或服务器关闭,对象销毁(结束)
2.四个域的作用范围
什么是域?为什么把这4个对象叫做域对象呢?
域:即范围的意思
web中的域对象,可以存储对象,在作用范围内都可以取到
内部是Map集合的实现 Map<String, Object>
page: 只在当前jsp页面有效
request:只在当前请求有效,每次请求分别对应不同的request域
// session:默认情况下,同一个浏览器来访问有效(发送同一个sessionid)
session:只在一次会话中有效,会话结束就无法取到数据了 (特殊情况,发送Cookie)
application:在一个web应用中有效 (只要服务器不关,web应用不移除就可以取数据)
四个域对象的范围由小到大排列依次为: page request session application
3.哪种情况下用哪种域对象。
原则:四个域对象在选择的时候,能用范围小的绝不用范围大的
page:数据只是暂时存在集合,在jsp页面的其他地方要用,用page(页面中自定义的map)
什么时候需要用map了,就用page
request:数据只是做显示的,看完了就没用了,就存request域
请求转发, Servlet产生的处理结果(数据)交给jsp显示,
session:数据给用户看完了,一会还要用,会话结束了就没用了
用户登陆,用户信息发给客户端看,看完了,一会访问别的页面还要看用户信息
购物车,购物成功了,给用户看购物车,待会随时可以查看购物车
请求重定向,因为是两次请求,第一次请求的数据,第二次请求还要看
application :数据给一个用户用完了,别人还要用
聊天室,聊天记录,需要给所有的用户看
统计网站在线人数,所有人看到的应该是一个数
总结:需要定义Map不如用page,请求转发Servlet带给jsp的数据存request
请求重定向带过去的数据存Session,全局的数据存application
六、 jsp细节
1. jsp出错
1)被翻译的Servlet不能编译,语法错,这时会报告是因为jsp中的哪行导致不能编译
2)翻译的Servlet在运行期间出现异常,报告是jsp的哪行导致的异常
此时会进一步报告导致异常的原因,在Servlet中的哪行出现异常
2. jsp映射也是通过servlet元素
七、内省
1. javabean
固定写法的java类
1)必须有无参构造函数
2)属性必须私有,我们称为字段
3)提供标准的getter和setter
例: name字段的getter: String getName() settter: void setName(String name)
2.通过反射的方式访问javabean
BeanUtils
setProperty(bean, name, value)
copyProperties(target, source);
可以支持String到8中基本数据类型转换
其他引用数据类型都需要注册转换器 ConvertUtils.register(Converter, Class)
3. WebUtils工具类
实现任何request提交的表单封装到对应的javabean
八、 jsp标签
为了移除jsp页面的java代码,sun公司提供了一些内置的标签
我们称为jsp标签,或jsp动作元素
1. <jsp:include>相当于 RequestDispatcher对象的页面引入
dispatcher.include 实现 Servlet包含
dispatcher.forward 实现servlet转发
forward 在转发时 web容器会清空response中的数据
在转发之后就无法向response写入数据
动态引入方式,在程序运行期间引入,jsp被翻译成两个
include指令也能实现页面的引入,静态引入,将两个jsp翻译成一个Servlet
包含和被包含的jsp页面指令不能发生冲突
其中,import可以冲突
2. <jsp:forward>实现请求转发
结合 <jsp:param>标签传参,自动进行url编码,编码的方式参照request编码
3. <jsp:useBean id class scope>内省
反射创建javabean,以id作为key存入指定的域
其实在创建之前,会先去域中找,找到了则不创建
4. <jsp:setProperty>设置属性值
<jsp:setProperty name=”user” property=”username” value=”zs” />
<jsp:setProperty name=”user” property=”username” param=”username” />
<jsp:setProperty name=”user” property=”*” /> 批量
5. <jsp:getProperty>获得属性值
九、jsp的3个指令
1、page:
2、include:
3、taglib
- JSP总结
- jsp总结
- JSP总结
- jsp总结
- JSP总结
- jsp总结
- jsp 总结
- JSP总结
- JSP总结
- jsp总结
- jsp总结
- JSP总结
- JSP总结
- JSP总结
- jsp总结
- jsp总结
- jsp总结
- JSP总结
- 一台电脑上的两台linux使用VMnet8模式实现互通(静态ip地址)
- Unity制作游戏在部分手机上显示黑白屏幕
- 面试题30:最小的K个数及topK问题的解决
- HDU6153 A Secret(扩展KMP)2017中国大学生程序设计竞赛
- POJ 2352 Stars
- jsp总结
- nyoj61传纸条(一) 双线DP
- 20170819考试总结
- Unity2--利用脚本打印图形
- java爬取下载文件
- 聊聊鹅厂及鹅厂出来的coder们的面试套路
- 【剑指offer】面试题 39:数组中出现次数超过一半的数字
- Luogu P1311 [NOIp提高组2011]选择客栈
- Friend-Graph 2017中国大学生程序竞赛网络赛