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指示三层架构的表现层    表现层一般都是和页面相关的

这里写图片描述

原创粉丝点击