web 学习笔记12-JSP技术
来源:互联网 发布:程序员一天工作几小时 编辑:程序博客网 时间:2024/06/06 05:51
1、JSP技术简介:
JSP技术比较简单,是建立在Servlet技术之上。全称Java Server Pages。它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet。JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。jsp就是把数据翻译html格式输出到客户端。如果你自己使用out输出,那么写html会非常复杂。
2、一个简单的jsp页面的编写:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% out.write(new Date().toLocaleString()); %> </body> </html>
基本的格式 <% out.write(new Date().toLocaleString()); %>当你在浏览器输入一个jsp网址时,jsp引擎会将jsp编译为java类,然后去执行service方法。注意了:页面上不要写java代码,这个只是为了学习使用,正真的开发是不会把java代码写在jsp页面中的。
3、为什么可以在jsp页面中直接使用out.write();
因为jsp会被编译为java类,在那个类里面已经帮你定义好了这个对象。你在D:\tomcat\apache-tomcat-7.0.77\work\Catalina\localhost\day10_01_session\..\index_jsp.java的源文件中可以看到
4、Web服务器在调用jsp时,会给jsp提供一些什么java对象呢:
request
response
config
application
exception
Session
page
out
pageContext
5、JSP实践中使用:
不管是JSP还是Servlet,虽然都可以用于开发动态web资源。但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。因此最好的办法就是根据这两门技术的特点,让它们各自负责各得,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。
6、JSP语法-JSP脚本表达式:
例如:<body> <% request.setAttribute("name","你好") ; %> <!-- 上面叫做jsp脚本片段 --> 脚本表达式(输出一个变量):<%= request.getAttribute("name")%><br></body>JSP引擎在翻译脚本表达式时,会将程序数据转成字符串,然后在相应位置用out.print(…) 将数据输给客户端。注意了:JSP脚本表达式中的变量或表达式后面不能有分号(;)。你访问这个jsp的时候,界面上就把 <%= request.getAttribute("name")%> 使用“你好”代替了。就实现了数据动态显示。其实你去看编译后的源码发现,你的这个<%= request.getAttribute("name")%> 会被翻译为:out.print(request.getAttribute("name"));
7、JSP语法-JSP脚本片段:
JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码。语法:<% 多行java代码 %> 例如页面上想输出一个表格,可以这样嵌套书写(html代码不能写在<%%> 里面):
<table border = 1 width = 300> <% for (int i = 1;i<10; i++){ %> <tr> <td><%=i+"" %></td> <td><%=tttt %></td> </tr> <% } %> </table>
界面上就输出了一个10行2列的表格
8、JSP语法-JSP声明:
作用: 可以定义类变量和类方法,实例变量和实例方法。没啥用处JSP页面中编写的所有代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码被翻译到_jspService方法的外面。语法:<%! java代码 %>所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。 例如:<%! int a = 0; public void test(){ System.out.println("hello"); }%>调用方式:<% test();%>
9、JSP语法-JSP注释:
<%-- --%>HTML注释:<!-- --> ,页面源码能看到Java注释: 页面源码看不到Jsp注释: <%-- --%> 页面源码看不到
10、JSP语法-JSP指令(3个):
基本语法格式:<%@ 指令 属性名="值" %>a.page 例如jsp页面第一句就有个page <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> import可以写多个(只有这个import才能单独写), 例如你的工程中有个【com.example.test】包,想要引进来用可以这样写 <%@ page import="com.example.test.*" %>b.include: <%@ include file=”” %> : 静态包含 (将目标页面的源码拷贝一份) (推荐) <jsp:include page= “” > : 动态包含 (执行目标页面,将结果包含) 例如: <%@ include file=”2.jsp” %> 2.jsp是另外一个jsp页面(注意2.jsp里面的path 和 basePath删除,否则重复定义)。 <jsp:include page=”3.jsp” %> 静态包含在开发中使用更多。c.taglib: 导入标签库时用。
11、JSP的9大隐式对象:
在jsp引擎把jsp页面翻译为servlet的时候,在创建service方法时就已经创建好了。pageContext对象,代表的是一个页面的上下文对象。(可以通过它拿到其它的8个对象)3大作用:a.作为域对象,存储数据(本页面)
<body> <% pageContext.setAttribute("name", "你好") ;//存数据 %> <% String name = (String) pageContext.getAttribute("name") ;//取数据 out.write(name) ; %> </body>存储其它域范围: <body> <% pageContext.setAttribute("name1", "你好",PageContext.SESSION_SCOPE) ;//存到session %> </body> 在不关闭浏览器的情况下,访问其它jsp页面 <body> <% String name = (String) session.getAttribute("name1") ;//从session取数据 out.write(name1) ; %> </body> PageContext.PAGE_SCOPE //本页面范围 PageContext.REQUEST_SCOPE //请求范围 PageContext.SESSION_SCOPE //会话范围 PageContext.APPLICATION_SCOPE //全局范围
b.提供了获取其他8大对象的方法: request.setAttribute("name", "你好") ; pageContext.getRequest().setAttribute("name", "你好") ; 以上两句没有任何区别c.提供了请求转发和请求包含: <body> <% request.setAttribute("name", "你好") ; //请求转发 pageContext.forward("/2.jsp") ; //请求包含 pageContext.include("/2.jsp") ; %> </body>
12、四大域对象:
PageContext:页面范围的数据。用的很少ServletRequest:请求范围的数据。用的很多。显示一次数据后就没有用了,这样的数据应该放到该范围中HttpSession:会话范围的数据。用的很多。每次请求和响应都需要共享的数据。比如登录信息,购物信息。ServletContext:应用范围的数据。用的不多。所有客户端都共享的信息。注意同步。
13、JavaWeb开发模型:
a.JavaBean+JSP:只能开发很简单的应用,不适合企业级开发。 业务逻辑都是写在页面上的。b.模型2:MVC:Model+View+Controller(模型+视图+控制器) Model:JavaBean数据 View:JSP显示 Controller:Servlet控制器所以我们现在一般都是用2,三层架构:MVC指示三层架构的表现层 表现层一般都是和页面相关的
阅读全文
0 0
- web 学习笔记12-JSP技术
- Java.Web学习笔记 JSP
- Java web学习笔记一:JSP学习
- 09 12 11 Java Web学习笔记-Jsp简单总结
- JavaWeb学习笔记(10)--JSP技术
- JSP 2.0 技术书籍 学习笔记
- JSP技术学习及其细节笔记
- Java Web学习笔记之JSP基础
- 【Java Web 学习笔记】JSP基础语法
- 【Java Web 学习笔记】JSP内置对象
- Java Web学习笔记——JSP
- web开发学习笔记四:jsp
- JSP/Servlet Web 学习笔记 DayOne
- JSP/Servlet Web 学习笔记 DayTwo
- 12 JSP学习笔记
- Java web学习笔记之servlet技术
- JSP笔记 -Servlet技术
- JSP笔记-JavaBean技术
- VS产生sdf和ipch文件太大处理方案
- Android捕捉未捕捉的异常
- 翻转二叉树
- 设计模式之享元模式
- lintcode 整数排序 II | 快速排序(Java)
- web 学习笔记12-JSP技术
- 【剑指offer】用两个栈实现队列
- Exception in thread “main” java.lang.UnsupportedClassVersionError: com/crunchify/Main : Unsupported
- 工厂模式
- 代码之髓读后感——关于学习
- 链表(单向、双向、单向循环、双向循环)学习过程总结——有源代码、注释和示意图
- spring boot中spring.profiles.active的用法
- Mybatis整理
- springMVC 多图片多name上传