JAVA开发之旅(十八)###Web开发篇(JSP语法)###

###Web开发篇(JSP语法)###

1. Jsp简介

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

 

2. Jsp页面元素的构成

1)指令:

# page指令:通常位于Jsp页面顶端,同一个页面可以有多个page指令

<%@page 属性1="属性值1"  属性2="属性值2"  ... ... 属性n="属性值n"%>

属性描述默认值
language制定JSP页面使用的脚本语言java
import通过该属性来引用脚本语言中使用到的类文件
contentType用来指定JSP页面所采用的编码方式text/html,ISO-8859-1

include指令: 将一个外部的文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句

taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为

 

2)注释:

HTML注释:<!-- html注释 -->  //客户端可见

JSP注释:<%-- JSP注释 --%>  //客户端不可见

JSP脚本注释: //单行注释

                         /**/多行注释

 

3)Jsp脚本:在Jsp页面中执行的Java代码

<% Java 代码 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>欢迎来到我的个人主页</h1>
  <%
    out.println("这里是jsp脚本");
  %>
  </body>
</html>

 

4)Jsp声明:在JSP页面当中定义变量或者方法

<%! Java代码 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>欢迎来到我的个人主页</h1>
  <%!
  String s = "Andrew";
  int add(int x,int y){
      return x+y;
  }
  %>
  <%
    out.println("这里是jsp脚本");
  %>
  </body>
</html>

 

5)Jsp表达式:在JSP页面当中执行的表达式

<% =表达式 %>  //注:表达式不以分好结束

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>欢迎来到我的个人主页</h1>
  <%!
  String s = "Andrew";
  int add(int x,int y){
      return x+y;
  }
  %>
  <%
    out.println("这里是jsp脚本");
  %>
  <hr>
  <%= s %>
  <br>
  x+y=<%=add(1,2)%>
  </body>
</html>

 

6)Jsp页面生命周期:

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

例题1:当用户第一次请求一个jsp页面时,首先被执行的方法时()

A 构造方法   B jspInit()  C jspService()  D jspDestroy()

例题2:分别使用表达式和脚本实现打印9*9乘法表

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/9/18
  Time: 19:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" import="java.util.*" language="java" %>
<%@ page import="java.io.IOException" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%!
    //返回99乘法表对应的HTML代码,通过表达式调用,在页面显示
    String Mt(){
        String s = "";
        for(int i =1; i<=9;i++){
            for (int j =1; j<=i;j++){
               s+=i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp";
            }
            s+="<br>";
        }
        return s;
    }
    //JSP内置out对象,使用脚本方式调用,打印99乘法表
    void Mt2(JspWriter out) throws IOException {
        for(int i =1; i<=9;i++){
            for (int j =1; j<=i;j++){
                out.println(i+"*"+j+"="+(i*j)+"&nbsp;&nbsp;&nbsp");
            }
            out.println("<br>");
        }
    }
%>
<h1>九九乘法表</h1>
<hr>
<%= Mt() %>
<hr>
<% Mt2(out); %>
</body>
</html>

 

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

<%
int[] value = {1,2,3};
for(int i : value){
out.println(i)
}
%>

常用内置对象:out  request  response  session  application

不常用:Page  pageContext  exception  config

 

1)Web程序的请求响应模式

请求:request

响应:response

 

2)out对象:是JspWriter类的实例,是向客户端输出内容常用的对象

常用方法如下:

#  void println() 向客户端打印字符串

#  void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常

#  void clearBuffer(); 清除缓冲区的内容,如果在flush之后调用不会抛出异常

#  void flush() 将缓冲区内容输出到客户端

#  int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0

#  int getRemaining() 返回缓冲区还剩多少可用

#  boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常

#  void close() 关闭输出流

 

3)get与post区别

<form name="regForm" action="动作" method="提交方式"> </form>

表单有两种方式提交:

get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post高。适合提交数据量不大,安全性不高的数据。

post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。

 

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

常用方法:

# String getParameter(String name) 返回name指定参数的参数值

# String[] getparameterValues(String name) 返回包含参数name所有值得数组

# void setAttribute(String,Object); 存储此请求中的属性

# object getAttribute(String name) 返回指定属性的属性值

# String getContentType() 得到请求的协议类型及版本号

# String getProtocol() 返回请求用的协议类型及版本号

# String getServerName() 返回请求的服务器主机名

实例:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/9/18
  Time: 20:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>用户注册</h1>
<hr>
<form name="regForm" action="request.jsp" method="post">
<table>
    <tr>
        <td>用户名:</td>
        <td><input type="text" name="username" ></td>
    </tr>
    <tr>
        <td>爱好:</td>
        <td>
            <input type="checkbox" name="favorite" value="read">读书
            <input type="checkbox" name="favorite" value="music">音乐
            <input type="checkbox" name="favorite" value="movie">电影
            <input type="checkbox" name="favorite" value="game">游戏
        </td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" value="提交"></td>
    </tr>
</table>
</form>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/9/18
  Time: 20:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>requst内置对象</h1>
<%request.setCharacterEncoding("utf-8");%>
用户名:<%= request.getParameter("username")%><br>
爱好:<%
    String[] f = request.getParameterValues("favorite");
    for (int i = 0; i < f.length; i++){
        out.println(f[i]+"&nbsp;&nbsp;&nbsp;");
    }
%>
<hr>
请求体的MIME类型:<%= request.getContentType()%><br>
协议类型及版本号:<%= request.getProtocol()%><br>
服务琦主机名:<%= request.getServerName()%><br>
服务器端口号:<%= request.getServerPort()%>
</body>
</html>

 

5)response对象:

      response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效

常用方法:

# String getCharaterEncoding() 返回响应用的是何种字符编码

# void setContentType(String type) 设置响应的MIME类型

# PrintWriter getWriter() 返回可以向客户端输出字符的一个对象(ps:PrintWrite与内置out对象的区别

# sentRedirect(java.lang.String location) 重新定向客户端的请求

 

6)请求转发与请求重定向的区别

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

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

 

4. session

# session表示客户端与服务器的一次对话

# Web中的session指的是用户在浏览某个网站是,从进入网站到浏览器关闭所经历的这段时间,也就是用户浏览这个网站所花费的时间。

# 从上述定义中可以看出,session实际上是一个特定的时间概念。

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

1)session对象

# session对象是一个JSP的内置对象

# session对象在第一个JSP页面被装在时自动创建,完成回话期管理

# 从一个客户打开浏览器并链接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话

# 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象

# session对象是HttpSession类的实例对象

常用方法:

# long getCreationTime():返回SESSION创建时间

# public String getId():返回SESSION创建时JSP引擎为它设的唯一ID号

# public Object setAttribute(String name, Object value):使用指定名称将对象绑定到此会话

# public Object getAttribute(String name):返回与此会话中指定命长绑定在一起的对象,如果没有对象绑定在该名称下,则返回null

# String[] getValueNames():返回一个包含此SESSION种所有可能属性的数组

# int getMaxInactiveInterval():返回朗次请求间隔多长时间此SESSION被取消

 

2)session的声明周期

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

活动:# 某次会话当中通过超链接打开新的页面属于同一次会话

           # 只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话

           # 除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话

          PS:注意原有的会话还存在,只是这个旧的SessionId仍然存在于服务端,只不过再也没有客户端会携带它然后交予服务端校验

销毁:Session的销毁只有三种方式:

           # 调用了session.invalidate()方法

           # Session过期(超时)

           # 服务器重新启动

# Tomcat默认session超时时间为30mins,设置session超时有两种方式

    #1)session.setMaxInactiveInterval(时间);  //单位是秒

    #2)在Web.xml配置

           <session-config>

           <session-timeout>

           10

           </session-timeout>

           </session-config>  //单位是分钟

 

5. application对象:

# application对象实现了用户间数据共享,可存放全局变量。

# application开始于服务器启动,终止于服务器关闭。

# 在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。

# 在任何地方对application对象属性的操作,都将影响到其他用户对此的访问。

# 服务器的启动和关闭决定了application对象的生命。

# application对象是ServletContext类的实例

常用方法:

# public void setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话

# public Object getAtrribute(String name) 返回此会话中的指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null

# Enumeration getAttributeNmaes() 返回所有可用的属性名的枚举

# String getServletInfo() 返回JSP(SERVLET)引擎名及版本号

 

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

常用方法:

# class getClass() 返回此Object的类

# int hashCode() 返回此Object的hash码

# boolean equals(Object obj) 判断此Object是否与指定的Object对象相等

# void copy(Object obj) 把此Object拷贝到指定的Object对象中

# Object clone() 克隆此Object独享

# String toString() 把此Object对象转换成String类的对象

# void notify() 唤醒一个等待的线程

# void notifyAll() 唤醒所有等待的线程

# void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒

# void wait() 使一个线程处于等待直到被唤醒

 

7. pageContext对象

# 提供了对JSP页面内所有的对象及名字空间的访问

# 可以访问到本页所在的session,也可以取本页面所在的application的某一属性值

# 相当于页面中所有功能的集大成者

# 其本类名也叫pageContext

常用方法:

# JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)

# HttpSession getSession() 返回当前页面中的HttpSession对象(session)

# Object getPage() 返回当前页的Object对象(page)

# ServletRequest getRequest() 返回当前页的ServletRequest对象(request)

# ServletRequest getResponse() 返回当前页的ServletResponse对象(response)

# void setAttribute(String name,Object attribute) 设置属性及属性值

# Object getAttribute(Sting name,int scope) 在指定范围内取属性的值

# int getAttributeScope(String name) 返回某属性的作用范围

# void forward(String relativeUrlPath) 使当前页面重导到另一页面

# void Include(String reativeUrlPath) 在当前位置包含另一文件

 

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

常用方法:

# ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象

# String getInitParameter(String name) 返回初始化参数的值

# Enumeration getInitParameterNames() 返回Servlet初始化所需所有参数的枚举

 

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

常用方法:

# String getMessage() 返回描述异常的消息

# String toString() 返回关于异常的剪短描述消息

# void printStackTrace() 显示异常及其栈轨迹

# Throwable FillinStackTrace() 重写异常执行栈轨迹

 

例题:实现用户登录

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/9/18
  Time: 22:21
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<div id="container">
    <div id="box">
        <form action="dologin.jsp" method="post">
            <p class="main">
                <label>用户名:</label>
                <input name="username" value="" />
                <label>密码:</label>
                <input type="password" name="password" value="" >
            </p>
            <p class="space"> <input type="submit" value="登陆" class="login" style="cursor: pointer"></p>
        </form>
    </div>
    </div>
</div>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/9/18
  Time: 22:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String username = "";
    String password = "";
    request.setCharacterEncoding("utf-8");
    username = request.getParameter("username");
    password = request.getParameter("password");
    if("admin".equals(username)&&"admin".equals(password)){
        request.getRequestDispatcher("login_success.jsp").forward(request,response);
    }
    else {
        response.sendRedirect("login_failure.jsp");
    }
%>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/9/18
  Time: 22:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<div id="container">
    <div id="box">
        欢迎您,登陆成功
    </div>
</div>
</div>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/9/18
  Time: 22:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<div id="container">
    <div id="box">
        您输入的用户名或密码错误 <br>
        <a href="login.jsp">返回登陆界面</a>
    </div>
</div>
</div>
</body>
</html>

 

 

 

 

###END###

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值