jsp基础

来源:互联网 发布:sql 多个结果合并 编辑:程序博客网 时间:2024/06/01 10:33

概述

jsp = html+js+css+java代码+jsp标签
动态web技术
在html中嵌套java代码

jsp代码是怎么运行的

将jsp使用out.write() 输出

out为什么不用创建

out为jsp的内置对象,jsp共有9个内置对象

为什么能输出j?

    <%        int i=90;        int j=i+10;     %>     <h1>sum=</h1>     <%        out.print(j);      %>

翻译成servlet后 i 和j 都是在一个函数中的变量

提供的9个内置对象 (常用前6个)

  • out
    相当于servlet的PrintWrite, 向客户端输出数据
  • request
    接受客户端的 http请求 相当于 servlet的HttpServletRequest
    getParamenter(String name);
    getParameterValues(String name);
    setAttribute(name, value);
    getAttribute(name);
    getCookie();
  • response
    产生响应 , 相当于 servlet的HttpServletResponse
    addCookie(Cookie cookie);
    sendRedirect(“路径”); 请求重定向
  • session
    保存用户信息, 跟踪用户行为 相当于 servlet的HttpSession
    setAttribute(String name, Object obj);
    getAttribute(String name);
  • application
    多个用户共享对象, 计数器功能
  • pageContext 作用范围在本页面
    <% pageContext.setAttribute(“a”, “aaa”); %>
    <% out.print((String)pageContext.getAttribute(“a”));%>
  • exception
    运行的一个异常
  • page
    代表jsp实例本身, 在servlet中相当于this
  • config
    jsp对应的servlet的配置,可以的得到web.xml的参数

  • jsp的语法

    指令元素

    从jsp发送到一个数据到容器,设置全局变量,文字编码,引入包<li>page指令        language 嵌入的代码是什么        import 导入的包,供给jsp代码使用        session 默认为true 表示允许使用session对象,反之不允许        buffer 给out对象使用的缓存区大小, 默认8kb, 作用是out对象积攒到缓冲区大小后将内容提交        autoFlash 默认true 是否自动刷新到浏览器        isThreadSafe 默认true jsp的线程安全        errorPage 当jsp页面出现错误时 转到指定界面上                   errorPage="error.jsp"        contenType 指定网页以什么方式显示页面        pageEncoding servlet引擎以什么方式翻译 从jsp ->servlet<li>include指令     <%@ include file="b.jsp" %> 静态引入,把b.jsp引入, b.jsp只保留信息即可<li>taglib标签指令

    脚本元素

    就是java片段1.<%java代码 %>2.<%= 表达式 %>变量声明问题     在<% int i; %>声明的变量是局部变量     在<%!int i; %>中的是全局变量,jsp对应的sevlet的成员变量        <%! int i=0; %>        <% int i =1; %>        <%out.print(i);%>        输出1 局部变量优先

    动作元素

     <jsp:forward page="b.jsp"></jsp:forward>      页面跳转到b.jsp中 <jsp:include page="b.jsp"></jsp:include>      动态引入      和指令的include相同点  引入一个文件      和指令的include不同点 生成的是两个不同的servlet,分别对待。

    两种注释

    <li><!-- 注释 --> 用户能看见<li><%-- 注释 --> 用户看不见, 较为安全

    tomcat保护机制

    把jsp文件放在WEB-INF中, 防止用户通过浏览器直接输入地址访问,目的是保护这些jsp文件,可以创建一个入口页面,通过页面转发进入这些保护的文件,访问格式


    jsp版计算器

    计算界面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <script type="text/javascript" src="js/js1.js"></script>  </head>  <body>    <form action="/myjsp/result.jsp" method="post" onsubmit="return checkNum()">        num1:<input type="text" id="num1" name="num1"><br>        num2:<input type="text" id="num2" name="num2"><br>        运算符:<select name="oper">            <option value="+">+</option>            <option value="-">-</option>            <option value="*">*</option>            <option value="/">/</option>        </select><br>        <input type="submit" value="计算" onclick="return checkNum()">    </form>  </body></html>

    结果界面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>  </head>  <body>    <%        String num1 = request.getParameter("num1");        String num2 = request.getParameter("num2");        String oper = request.getParameter("oper");        double n1,n2,res=0;        n1 = Double.parseDouble(num1);        n2 = Double.parseDouble(num2);        System.out.println(n1+" "+n2);                if (oper.equals("+")){            res = n1+n2;        }        if (oper.equals("-")){            res = n1-n2;        }        if (oper.equals("*")){            res = n1*n2;        }        if (oper.equals("/")){            res = n1/n2;        }        out.print(res);     %>  </body></html>

    js验证输入

    /** * 验证用户的输入是否为空 */function checkNum(){    //获取num1, num2的值    var num1 = document.getElementById("num1").value;    var num2 = document.getElementById("num2").value;    if (num1=="" || num2==""){        alert("输入不能为空");        return false;    }    var reg=/^[0-9]*$/i;    if (!reg.test(num1) || !reg.test(num2)){        alert("非数字");        return false;    }}

    将两个文件合二为一(js文件不变)

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <script type="text/javascript" src="js/js1.js"></script>  </head>  <%    String num1 = request.getParameter("num1");    String num2 = request.getParameter("num2");    String oper = request.getParameter("oper");    double n1=0,n2=0,res=0;    if (num1 != null && num2 != null && oper != null){        n1 = Double.parseDouble(num1);        n2 = Double.parseDouble(num2);        if (oper.equals("+")){            res = n1+n2;        }        if (oper.equals("-")){            res = n1-n2;        }        if (oper.equals("*")){            res = n1*n2;        }        if (oper.equals("/")){            res = n1/n2;        }    }   %>  <body>    <form action="/myjsp/calculator.jsp" method="post" onsubmit="return checkNum()">        num1:<input type="text" id="num1" name="num1"><br>        num2:<input type="text" id="num2" name="num2"><br>        运算符:<select name="oper">            <option value="+">+</option>            <option value="-">-</option>            <option value="*">*</option>            <option value="/">/</option>        </select><br>        <input type="submit" value="计算" onclick="return checkNum()"><br>        结果:<%= res%>    </form>  </body></html>