web 学习笔记12-JSP技术

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

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值