JSP初步学习

JavaWeb:

虚拟路径:目录路径,可以修改。

JSP:

其根本是一个简化的 Servlet 设计,他实现了在 Java 当中使用HTML标签。JSP是一种动态网页技术标准也是JAVAEE标准。JSP与Servlet一样,是在服务器端运行的。

页面元素构成:

JSP指令:

page 指令:通常位于 jsp 页面顶端,同一个页面可以有多个 page 指令。
include 指令:将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP 语句。
taglib 指令:使用标签库定义新的自定义标签,在 JSP 页面中启用定制行为。

page 指令:


默认 ISO 编码(纯英文),如果想显示中文要改成 UTF-8 编码。

HTML注释:<!--HTML--> 客户端可见 (查看源文件可以看到)
JSP注释: <%--JSP--%> 客户端不可见
JSP脚本(Java)注释: // 或 /**/ 客户端不可见

JSP脚本:

在JSP页面中可以执行的Java代码。
语法:
<% Java代码%>

JSP声明:

在JSP页面中定义变量或者方法。
语法:
<%! Java代码%>
如:

<%!
    String s = "Hello!";         // 声明了一个变量
    int add(int x, int y) {      // 声明了一个函数
        return x+y; 
    }   
%>

JSP表达式:

在JSP页面中执行的表达式。
语法:
<% =表达式 %> // 注意:表达式不以分号结束
如:

<%=s %><br/>
x+y=<%=add(10,5) %><br/>

JSP页面生命周期:

这里写图片描述

jspService() 方法被调用来处理客户端的请求。
对每一个请求,JSP引擎创建一个新的线程来处理该请求。
如果有多个客户端同时请求该 JSP文件,则JSP引擎会创建多个线程。
每个客户端请求对应一个线程。
以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。
但也要注意多线程的编程带来的同步问题,由于该Servlet始终驻于内存,所以响应是非常快的。

例子:打印九九乘法表

  <body>
        <h1>九九乘法表</h1>
    <hr/>
    <% 
        for(int i=1; i<=9; i++) {
            for(int j=1; j<=i; j++) {
                out.print(j + "*" + i + "=" + i*j + "&nbsp;&nbsp;");
            }
            out.print("<br/>");
        }
    %>
  </body>

标签要用输出来进行显示。

JSP内置对象:

JSP内置对象是Web容器创建的一组对象,不使用new关键字就可以使用的内置对象。

Web程序的请求响应模式:
用户发送请求(request)
服务器给用户相应(response)

缓冲区:

Buffer ,所谓缓冲区就是内存的一块区域用来保存临时数据。

out对象:

是 JspWriter 类的实例,是向客户端输出内容常用的对象。
常用方法:

<body>
        <h1>静夜思</h1>
    <hr/>
    <% 
        out.println("床前明月光,疑是地上霜。<br/>");
        out.flush();
        out.clearBuffer();
        out.println("举头望明月,低头思故乡。<br/>");
    %>
    缓冲区大小:<%=out.getBufferSize() %>
    <br/>
    缓存区剩余:<%=out.getRemaining() %>
    <br/>
    是否自动清除:<%=out.isAutoFlush() %>
  </body>

如果 clearBuffer 改成 clear,则页面上只会显示前两句,同时控制台报出异常。(clear 不能跟在 flush 后用,只能是 clearBuffer)

表单提交方式(method) get和post区别:

request对象:

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

常用方法如下:

客户页面设置的name是什么,服务端调用传进去的name就是什么,返回的时候返回的是 value 所设置的值。

response对象:

getWriter:

可以直接在页面打印,打印出来的东西总是位于页面顶端
(即使其语句在 out 语句下面,打印的东西也在 out 打印的东西的前面)

只有在 out 之后 flush(将缓存区内容直接传给客户端),才能让 out 打印的东西出现在 Pw 的前面。

sendRedirect:

请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL会改变。

请求转发:服务器行为,request.getRequestDispatcher().forward(req, resp); 是一次请求,转发后请求对象会保存,地址栏的URL不会改变。

session对象:

session表示客户端与服务器的一次会话
Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间
从上述定义中可以看到,session实际上是一个特定的时间概念

在服务器的内存当中保存着不同用户的session

是一个JSP内置对象。
在第一个JSP页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。
session对象是HttpSession类的实例。

常用方法:

因为浏览器关闭或页面过期才会结束session,所以可以在下一个页面中调出上一个页面的信息。
如果设置session存在时间,那么当打开新的页面的时候,就创建一个新的session。
保存用户状态。

生命周期:
创建:
当客户端第一次访问某个jsp或者Servlet的时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验。

活动:
某次会话当中通过超链接打开的新页面属于同一次会话。
只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话。
**注意:原有会话还存在,这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它交予服务端校验。(只有等它超时过期才会消失)

销毁:
调用session.invalidate()方法。
session过期(超时)。
服务器重新启动。
(设置超时时间有两种方式,一种是直接调用方法,一种是在web.xml中配置:
<session-config>
<session-timeout>
10
</session-timeout>
</session-config> // 单位是分钟

application对象:

实现了用户间的数据的共享,可存放全局变量。
开始于服务器的启动,终止于服务器的关闭。
在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。
在任何地方对application对象属性的操作,都将影响到其他用户对此的访问。
服务器的启动和关闭决定了application对象的生命。
application对象是ServletContext类的实例。

方法:

page对象:

page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。

方法:

pageContext对象:

提供了对JSP页面内所有的对象及名字空间的访问。
可以访问到本页所在的session,也可以取本页面所在的application的某一属性值。
相当于页面中所有功能的集大成者。
本类名也叫pageContext。

方法:

include:可以包含另一个页面(显示另一个页面打印的内容)

Config对象:

config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

方法:

exception对象:

异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。
如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。
它实际上是java.lang.Throwable的对象。

方法:

在page中加入 errorPage=”文件”属性可以表明出现异常后交给哪个文件去处理。
在被跳转的页面page中加入 isErrorPage 属性并设置为true。

JavaBean:

Javabeans就是符合某种特定的规范的Java类。
使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。

设计原则:

什么是JSP动作:

JSP动作元素,动作元素为请求处理阶段提供信息。
动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。

使用Javabeans:

1、如普通JAVA类一样,创建javabeans实例。

在src中新建一个java类,满足设计原则,在WEB页面可以直接new出来这个类然后调用方法。

2、在Jsp页面中通常使用jsp动作标签使用javabeans
useBeans动作
setProperty动作
getProperty动作

  <body>
  <jsp:useBean id="u" class="com.po.Users" scope="page"/>

<h1>使用普通方式创建JB实例</h1>
  <br/>
  用户名:<%=u.getUsername() %><br/>
  密码:<%=u.getPassword() %><br/>
  </body>

第一种:property设置为 * 表示根据 name 从表单当中进行匹配。
最后一种:action=”*.jsp?xxx=111” 如果设param=xxx,则所设JB属性就为111

  用户名:<jsp:getProperty name="u" property="username"/><br/>
  密码:<jsp:getProperty name="u" property="password"/>

Javabeans的四个作用域范围:

说明:使用useBeans的scope属性可以用来指定javabean的作用范围。

Model1:

JSP状态管理:

http协议的无状态性:

无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求。
但是当同一浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器。
简单来说:服务器不会记得你(无法保存用户状态)

保护用户状态的两大机制:

Session。
Cookie。

Web服务器保存在客户端的一系列文本信息。
典型应用一:判定注册用户是否已经登陆网站。
典型应用二:“购物车”的处理。

作用:
对特定对象的追踪。
保存用户网页浏览记录与习惯。
简化登陆。

安全风险:容易泄露用户信息。

创建与使用:

方法:

Session与Cookie的对比:

include指令:

语法:<%@ include file="URL" %>

include动作:

语法:<jsp:include page="URL" flush="true|false"/>

page:要包含的页面。
flush:被包含的页面是否从缓冲区读取。

include指令和动作的区别:

forward动作:

param动作:

可以传递参数(或者修改参数):

<jsp:forward page="uuser.jsp">
    <jsp:param name="email" value="[email protected]"/>
</jsp:forward>

猜你喜欢

转载自blog.csdn.net/abc67509227/article/details/80134760