zoukankan      html  css  js  c++  java
  • jsp学习小结

    一、jsp声明<%! %>

    用于声明变量和方法。似乎不需要定义类就可以直接定义方法,方法似乎可以脱离类独立存在。实际上,JSP声明将会转换成对应Servlet的成员变量或成员方法,因此JSP声明依然符合java语法

    <%!

    public int count;

    public String info(){}

    %>

    jsp页面会编译成一个Servlet类,每个Servlet在容器中只有一个实例;在jsp中声明的变量是成员变量,成员变量只在创建实例时初始化,该变量值将一直保存,直到实例销毁。

    二、输出jsp表达式<%= 表达式%>

    输出表达式语法后不能有分号。

    三、jsp脚本<% %>

    注意,在jsp脚本中声明的变量是局部变量。不能使用private、public等访问控制符修饰,也不可使用static修饰。实际上jsp页面里脚本部分以及静态内容都由sevlet实例的_jspService方法里输出语句来输出。由于jsp脚本将转换成_jspService方法里的可执行性代码,而java语法不允许在方法里定义方法,所以jsp脚本里不能定义方法。

    四、jsp的三个编译指令page,include,taglib

    (1)page指令通常位于jsp页面的顶端,一个jsp页面可以使用多条page指令。

       <%@page

          language=""

         extends=""   //jsp页面编译产生的java类所继承的父类或实现的接口

         import=""   //用来导入包

        session=""  //是否需要HTTP Session

        contentType="text/html;charSet=utf-9"   //用于设定生成网页的文件格式和编码字符集

    %>

    (2)include指令

      使用include指令,可以将一个外部文件嵌入到当前的jsp文件中,同时解析这个页面的jsp语句。

    (3)taglib 用于定义和访问自定义标签

    五、jsp的7个动作指令

    (1)jsp:forward   //执行页面转向,将请求的处理转发到下一个页面。

    (2)jsp:param    //用于传递参数,必须与其他支持参数的标签一起使用。

    (3)jsp:include    //用于动态引入一个jsp页面。

    (4)jsp:plugin      //用于下载javaBean或Applet到客户端执行。

    (5)jsp:useBean    //创建一个javaBean的实例。

    (6)jsp:setProperty   //设置javaBean实例的属性值。

    (7)jsp:getPropert    //输出javaBean实例的属性值。  

    <jsp:param   name="paramName"  vlaue="paramValue"/>

    <jsp:useBean id="name" class="classname" scope="page|request|session|application" />

    <jsp:setProperty name="BeanName"  proterty="propertyName"   value="value"/>

    <jsp:getProperty   name="BeanName"   proterty="propertyName" />

    六、jsp脚本包含9个内置对象.

    这9个内置对象都是Servlet API接口的实例,只是jsp规范对它们进行了默认初始化(由jsp页面对应的Servlet的_jspService()方法来创建这些实例)。也就是说,他们已经是对象,可以直接使用。9个内置对象依次如下:

    (1)application

      javax.servlet.ServetContext的实例。该实例代表jsp所属的web应用本身,可用于jsp页面,或者Servlet之间交换信息。常用的方法有getAttribute(String attName),setAttribute(String attName,String attValue)和getInitParameter(String paramName)等。

    (2)config

      javax.servlet.ServletConfig的实例,该实例代表jsp的配置信息。常见方法有getInitParameter(String paramName)和getInitParameternames()等方法。

    (3)exception

       java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有当编译指令page的isErrorPage属性为true时,给对象才可以使用。

    (4)out

       javax.servlet.jsp.JspWriter的实例,该实例代表jsp页面的输出流,用于输出内容,形成HTML页面。

    (5)page

       代表页面本身,通常没有太大用处,也就是Servlet中的this。

    (6)pageContext

       javax.servlet.jsp.PageContext 的实例,该对象代表jsp页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext()和getServletConfig()等。

    (7)request

       javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都封装在该对象里。这是一个常用对象,获取客户端请求参数必须使用该对象。

    常用方法有getParameter(String paramName) ,  getParameterValues(String paramName)   ,setAttribute(String attrName, 0bject attrValue)   , getAttribute(String attrName)和setCharacterEncoding(String env,   getRequdstDispatcher(String path).foward  //请求转发   )等。

    (8)rssponse

       javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。通常很少使用给对象直接响应,而是使用out对象,除非需要生产非字符响应。response对象常用于重定向,常用的方法有getOutputStream()     ,    sendRedirect(java.lang.String.location) //重定向,       addCookie(Cookie c) //  增加cookie

    (9)session

        javax.servlet.http.HttpSession 的实例,该对象代表一次对话。常用方法有getAttribute(String attrName)  ,  setAttribute(String attrName,Object attrValue)等。

    七、编码技巧

    (1)如果POST请求的请求参数里包含非西欧字符,则必须在获取请求参数之前调用setCharacterEncoding()方法设置编码的字符集。比如,如果发送请求的表单采用gb2312字符集,该表单页发送的请求也采用gb2312字符集,所以必须执行方法:setCharacterEncoding("gb2312");  //设置request编码所使用的字符集。

    (2)如果get方式请求值里包含了非西欧字符,则用setCharracterEncoding();无效,应借助于java.net.URLDecoder类。

        String rawQueryStr = request.getQueryString();  //获取请求里包含的查询字符串

        String queryStr = java.net.URLDecoder.decode(rawQueryStr,"gbk");    //使用URLDecoder解码字符串

       

    (3)如果你不想按(2)的做,还可以在获取请求参数值之后对请求参数值重新编码。也就是先将其转换成字节数组,再将字节数组重新编码成字符串。例如:

       String rawName = request.getParameter("name");  

      byte[] rawBytes = rawName.getByte("ISO-8859-1");     //将请求参数使用ISO-8859-1字符串分解成字节数组。

      String name = new String(rawBytes,"gb2312");          //将字节数组重新编码成字符串

        

     (4)默认情况下,Cookie值不允许出现中午字符,如果我们需要值为中午内容的cookie,就同样可以借助于java.net.URLEncoder先对中午字符串进行编码,将编码后的结果设为cookie值,当程序要读取cookie时,则应先读取,然后用java.net.URLDecoder对其进行编码。

       Cookie c = new Cookie("cnName" ,"java.netURLEncode.encode("孙悟空", "gbk");   //以编码后的字符串为值,创建一个Cookie对象

      response.addCookie(c);

      Cookie[] cookie = request.qetCookie();

     out.println(java.net.URLDecoder.decode(cookie[1].getValue());          //使用URLDecode对cookie值进行解码

    现主要从事PHP、Uinx/Linux、C/C++等方面的项目开发。
  • 相关阅读:
    排序去重
    $(...)[0].attr is not a function问题
    daterangepicker的汉化和简单使用
    wx.openSetting的调整
    css3中-moz、-ms、-webkit与盒子模型
    动态翻滚的导航条
    CSS3 transition 浏览器兼容性
    jq实现两个input输入同时不为空时,改变确认框背景颜色
    js 监听input 实现数据绑定
    关于html 修改滚动条的问题
  • 原文地址:https://www.cnblogs.com/lsl8966/p/2519651.html
Copyright © 2011-2022 走看看