JSP语法学习基础版,附带对应小例子程序

directive

  • Directive-page


    directive-page基本格式

其中import contentType两种天天见。
这里重点说一下 errorPage 和 isErrorPage

<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="index.jsp" %>
//在第一个jsp文件中,我们指定跳转到errorPage
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
//在第二个文件中我们将isErrorPage设置为true,这样在第一个页面出错的时候,会友好的跳转到第二个页面
  • Directive-include
    将想要include包含的东西,先原封不动的放在指定位置,然后在整体编译文件
    注意这个顺序。
    一般用来包含无参数的静态代码。
    不能向jspURL中传参数
    效率比较高

  • action
    其中重点讲解

    1. useBean
    2. include 动态编译 要注意和上文中跟在%后面的include作区分


      include使用方法

      小程序示例

- 第一个jsp用于显示
<%--
  Created by IntelliJ IDEA.
  User: allenhsu
  Date: 2018/6/5
  Time: 下午5:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
<html>
  <head>
    <title>compute</title>
  </head>
  <body bgcolor="#f5f5dc">
  <div align="center">
    <form method="post" action="Compute.jsp">
      <p>选择要做的计算
        <input type="radio" name="compute" value="division"  checked>
        除法
        <input type="radio" name="compute" value="multiplication">
        乘法
      </p>
      <p>被除数(被乘数)
        <input type="text" name="value1">
        除数(乘数)
        <input type="text" name="value2">
      </p>
      <p>
        <input type="submit" name="Submit" value="计算结果">
      </p>
    </form>
  </div>
  </body>
</html>
  • 第二个jsp用于逻辑处理与跳转,这里在跳转乘法和除法界面的时候,分别运用了两种include技术
<%--
  Created by IntelliJ IDEA.
  User: allenhsu
  Date: 2018/6/11
  Time: 下午7:07
这个例子主要说明两种include手段
第一种是:include    动态编译,会传参
第二种是:@ include 原封不动拿来
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    //完善写法:检验是否为空值
    String value1 = request.getParameter("value1");
    String value2 = request.getParameter("value2");
%>

<%
    if (request.getParameter("compute").equalsIgnoreCase("division"))
    { %>
<jsp:include page="divide.jsp" flush="true">
    <jsp:param name="v1" value="<%=value1%>"/>
    <jsp:param name="v2" value="<%=value2%>"/>
</jsp:include>
<%
    } else {
%>
<!--这种方式无法传参数 -->
    <%@ include file="multiply.jsp" %>
<% } %>
  • 乘法结果展示
<%--
  Created by IntelliJ IDEA.
  User: allenhsu
  Date: 2018/6/11
  Time: 下午7:18
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>multiply</title>
</head>
<body bgcolor="#7fffd4">
<center>
    <h1>
        <%
            try {
                float dividend = Float.parseFloat(request.getParameter("value1"));
                float dividsor = Float.parseFloat(request.getParameter("value2"));
                double result = dividend * dividsor;
        %>
        <%=result%>
        <%
            }
            catch (Exception e){
                out.println("不合法的被乘数或除数");
            }
        %>
    </h1>
</center>
  • 除法界面展示
<%--
  Created by IntelliJ IDEA.
  User: allenhsu
  Date: 2018/6/11
  Time: 下午7:18
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Divide</title>
</head>
<body bgcolor="#7fffd4">
<center>
    <h1>
        <%
            try {
                float dividend =Float.parseFloat(request.getParameter("v1"));
                float dividsor = Float.parseFloat(request.getParameter("v2"));
                float result = dividend/dividsor;
                %>
        <%=result%>
        <%
            }
            catch (Exception e){
                out.println("不合法的被乘数或除数");
            }
        %>
    </h1>
</center>
</body>
</html>
  1. forward
    1. 用途:当你输入用户名密码之后,自动跳转到对应的forward界面
    2. 带参数param的forword.jsp程序参数同样被传递
    3. 注意 :与response.sendRedirect做区别:
    • forward是服务器端在跳转,客户端不知道服务器端在背后做什么,所以显示在客户端的依旧是跳转前的URL,两个页面中拿到的request都是客户端的request,没有差异
    • response.sendRedirect有一个往返的过程,显示返回到客户端,再从客户端重新跳转到第二个页面,前后两个页面使用的是不同的request
forward相关语法
  1. jsp: useBean
    注意 在jsp中使用javabean要将java代码写入包里,不能裸着出现在src目录下
    bean相关语法

    jsp使用bean时各项参数具体含义

看个使用bean的小例子

  • bean类的定义
package bean;

import java.io.Serializable;

public class CounterBean implements Serializable {
    int count;

    public CounterBean() {
    }

    public int getCount(){
        count++;
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}
  • 在jsp中使用bean
<%@ page contentType="text/html;charset=UTF-8" language="java" import="bean.*" %>
<html>
<head>
    <title>testBean</title>
</head>
<%
    CounterBean cb = new CounterBean();
%>
<body>

<div align="center">
    <font color="#dc143c" size="5">
        <%=cb.getCount()%>
    </font>
</div>
</body>
</html>
  • 第二种在jsp中使用标签语言运用javabean的方法
<jsp:useBean id="bg" class="bean.CounterBean"> //实例化对应的类
</jsp:useBean>

<jsp:setProperty name="bg" property="count" value="55"></jsp:setProperty>
//使用set方法
<jsp:getProperty name="bg" property="count"></jsp:getProperty>
//使用get方法

注意以下:

  • 需要在开头import相关的包
  • 直接使用,不需要像在servlet那样在web.xml中配置
  • 两种写法,上述展示的是java程序写法,还有一种带标签语言的写法,要求能看懂别人写的就行
  • scope的四种范围,它描述的是该实例类的四种生命周期,分别是
    • page:局部变量;
    • request:同一个请求,例如forward跳转的页面
    • session:同一个session连接
    • application: 整个应用程序

jsp内置对象

出个面试题大家回答一下:
请写出jsp常用内置对象以及它的常用方法:

  • out 向客户端输出内容
    还有write方法下图没有列出


    out常用方法
  • request


    请求request常用方法
  • response


    response常见方法
  • exception

  • cookie

  • session

  • application


这三个不常用

  • config
  • page
  • pagecontext

jsp和servlet之间的跳转

  • 下面这个例子是从servlet跳到jsp,再从jsp跳回到servlet的一个例子。看起来跟直接显示servlet内容没有差别,其实背后经历两层传输
    • servlet部分的代码
package Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class servletToJsp extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
//这里的req和response是将Servlet传递过去的
            resp.setContentType("text/html;charset=utf-8");
            req.setAttribute("servletName", "ServletToJsp");
            PrintWriter out = resp.getWriter();
            out.println("this is knowledge from servlet!!");
            getServletConfig().getServletContext().getRequestDispatcher(
                    "/ServletUseJsp.jsp"
            ).forward(req, resp);

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
  • jsp部分的代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ServletUseJsp</title>
</head>
<body>
<h2>从Servlet跳转过来的</h2>
<jsp:forward page="/servlet/servletToJsp"></jsp:forward>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,621评论 18 399
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,434评论 0 13
  • 一. Java基础部分.................................................
    wy_sure阅读 3,810评论 0 11
  • JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...
    JA尐白阅读 1,151评论 1 0
  • 人生如梦,年少争强胜。行走江湖寻出众,留下文章求证。 迎春草木荣荣,山间泉水叮咚,生命本无贵贱,旅行驾车兜风...
    木貞ma阅读 146评论 1 1