zoukankan      html  css  js  c++  java
  • JSP学习笔记

    1. JSP的4种基本语法

    1.1 JSP注释

    <%-- 注释内容 --%>

    1.2 JSP声明

    <%! 声明部分 %> 声明变量和方法

    例如:

     1 <%!
     2 
     3          Public int count;
     4 
     5          Public String info()
     6 
     7          {
     8 
     9                    Return  “hello”;
    10 
    11          }
    12 
    13 %>

    声明的变量和方法会变为Servlet类的成员变量和方法,可以用public、private等访问修饰符修饰,也可用static修饰。

    1.3 输出JSP表达式

    <%= 表达式 %>

    例如:<%=info()%>

    1.4 JSP脚本

    <% JAVA代码 %>

    JSP脚本将转换为Servlet里_jspService方法的可执行代码,这意味着jsp脚本部分可以声明变量,但这是局部变量,不可用访问修饰符修饰。

    2. JSP的3个编译指令

    JSP的编译指令是通知JSP引擎的消息,它不直接生成输出。

    编译指令的语法格式:<%@ 编译指令名 属性名=”属性值” …. %>

    2.1 Page指令

    Page指令属性:

    Language:默认为java

    Extends:指定jsp页面编译产生的Java类所继承的父类或所实现的接口

    Import:用来导入包。默认导入的包有java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*。

    Session: 设定该页面是否需要session

    Buffer:指定输出缓冲区的大小

    Info:设置该jsp程序的信息

    ErrorPage: 指定错误页面

    isErrorPage:设置本JSP页面是否为错误处理程序

    contentType:设置网页格式和编码

    pageEncoding:指定生成网页的编码字符集

    2.2 Include指令

    <%@ include file=”script.jsp” %>

    3. JSP的7个动作指令

    3.1 Jsp:forward

    Forward指令用于将页面响应转发到另外的页面或servlet中,转发是可以增加额外的参数,参数可以在目标页面中用HttpServletRequest类的getParameter()方法获取。

    命令语法:

    1 <jsp:forward  page=”{relativeURL | <%=expression%}” />
    2     <jsp:param name=”” value=”” />
    3 </jsp:forward>

    例如:

    1 <jsp:forward  page=”result.jsp”>
    2     <jsp:param name=”age” value=”29” />
    3 </jsp:forward>
    1 <h3>目标页面</h3>
    2 <%=request.getParameter(“age”)%>

    3.2 Jsp:include

    用于包含某个页面,它不会导入被include页面的编译指令,仅将页面的body内容插入页面。

    语法格式:

    1 <jsp:include page=”{relativeURL | <%=expression%}” flush=”true”>
    2     <jsp:param name=”” value=”” />
    3 </jsp:include>

    3.3 Jsp:useBean  jsp:setProperty  jsp:getProperty

    useBean指令用于在jsp页面中初始化一个Java实例。setProperty设置JavaBean的属性值,getProperty输出JavaBean的属性值。

    语法格式:

    1 <jsp:useBean  id=”” class=”” scope=”page | request | session | application” />   //id是JavaBean的实例名
    2 <jsp:setProperty name=”” property=”” value=”” />     //name是JavaBean的实例名
    3 <jsp:getProperty name=”” property=”” />

    3.4 Jsp:plugin

    主要用于下载服务器端的JavaBean或Applet到客户端执行

    3.5 Jsp:param

    用于设置参数,不能单独使用,需和include、forward或plugin一起使用。

    4. JSP中的9个内置对象

    1. application:javax.servlet.ServletContext的实例,代表JSP所属的应用本身。常用方法有getAttribute()、setAttribu()和getInitParameter()
    2. config:javax.servlet.ServletConfig的实例,代表该JSP的配置信息。常用方法有getInitParameter()和getInitParameternames()
    3. exception :java.lang.Throwable的实例,只有当编译指令page的isErrorPage属性为true时该对象才可以使用。常用方法有getMessage()和printStackTrace()
    4. out:javax.servlet.jsp.JspWriter的实例,代表JSP页面的输出流
    5. page:代表页面本身,也就是servlet中的this,能用page的地方就可以用this
    6. pageContext:javax.servlet.jsp.PageContext的实例,代表JSP页面上下文,使用该对象可以访问页面中的共享数据。常用方法有getServletContext()和getServletConfig()等
    7. request:javax.servlet.http.HttpServletRequest的实例,获取客户端请求参数必须使用该对象。常用方法有getParameter()、getParameterValues()、setAttribute()和getAttribute等
    8. response :javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。常用方法有getOutputStream()、sendRedirect()等
    9. session :javax.servlet.http.HttpSession的实例,代表依次会话,客户端浏览器与站点建立连接时会话开始,客户端关闭浏览器时,会话结束

     JSP内置对象都是在_jspService 方法中完成初始化,因此只能在JSP脚本、JSP输出表达式中使用这些内置对象,而不能再JSP声明中使用它们。

    4.1 Application对象

    application对象通常有两个作用:

    1)  在整个web应用的多个JSP、Servlet之间共享数据

    2)  访问web应用的配置参数

    4.1.1 让多个JSP、Servlet共享参数

    1 //get-application.jsp
    2 <% ! 3 int i ; 4 %> 5 <% 6 application.setAttribute(‘counter’, String.valueof(++i)) ; 7 %>
    1 //put-application.jsp
    2 <%=application.getAttribute(‘counter’);%>
     1 //Servlet
    2 @WebServlet(name=”get-application”, urlPatterns=(“get-application”)) 3 public class getApplication extends httpServlet { 4 public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { 5 response.setContextType(“text/html;character=gb2312”); 6 PrintWriter out = response.getWriter(); 7 out.println(“<html><head><title>”); 8 out.println(“测试application”); 9 out.println(“</title></head><body>”); 10 ServletContext sc = getServletConfig.getServletContext(); 11 out.println(“application中当前的counter值为:”); 12 out.println(sc.getAttribute(“counter”)); 13 out.println(“</body></html>”); 14 } 15 }

    4.1.2 获得web应用配置参数

    1 //getWebParam.jsp
    2 <%
    3     String driver = application.getInitParameter(“driver”);
    4     String url = application.getInitParameter(“url”);
    5     String user = application.getInitParameter(“user”);
    6     String password = application.getInitParameter(“password”);
    7 %>

    4.2 Config对象

    1 //config.jsp
    2 
    3 name配置参数的值为:<%=config.getInitParameter(“name”)%>
     1 //web.xml
     2 
     3 <servlet>
     4     <servlet-name>config</servlet-name>
     5     <jsp-file>/config.jsp</jsp-file>
     6     <init-param>
     7         <param-name>name</param-name>
     8         <param-value>juedi</param-value>
     9     </init-param>
    10 <servlet-mapping>
    11     <servlet-name>config</servlet-name>
    12     <url-pattern>/config</url-pattern>
    13 </servlet-mapping>

    4.3 Exception对象

    在JSP的异常处理机制中,一个异常处理页面可以处理多个JSP页面脚本部分的异常。异常处理页面通过page指令的errorPage属性指定。

    1 //throwException.jsp
    2 
    3 <%@ page errorPage=”error.jsp”%>
    4 <%
    5     int a = 6;   
    6     int c = a / 0;
    7 %>
    1 //error.jsp
    2 
    3 <%@ page isErrorPage=”true”%>
    4 <body>
    5     异常类型是:<%=exception.getClass()%><br />
    6     异常信息是:<%=exception.getMessage()%>
    7 </body>

    4.4 Out对象

    所有用out的地方,都可以用输出表达式来代替。<%=……%>表达式的本质就是out.write()。

    4.5 pageContext对象

    该对象主要用于访问JSP之间的共享数据,可以访问page、request、session、application范围的变量,可以用pageContext.getAttribute(name, scope)来得到任意作用域的属性值。

    1 //pageContextTest.jsp
    2 
    3 <%
    4     pageContext.setAttribute(“page”, “hello”);
    5     pageContext.setAttribute(‘name’, ‘juedi’ , pageContext.SESSION_SCOPE) ;
    6     pageContext.setAttribute(‘pass’, ‘pass’, pageContext.APPLICATION_SCOPE) ;
    7 %>

    pageContext还可以获得其他对象:

    ServletRequest getRequest()

    ServletResponse getResponse()

    ServletConfig getServletConfig()

    ServletContext getServletContext()

    HttpSession getSession()

    4.6 Request对象

    4.6.1 获取请求头/请求参数

    请求头由浏览器自动添加,请求参数由客户指定。

    获取请求头的方法:

    String getHeader():获取指定请求头的值

    java.util.Enumeration<String> getHeaderNames():获取所有请求头的名称

    java.util.Enumeration<String> getHeaders():获取指定请求头的多个值

    int getIntHeader():获取指定请求头的值并转换为整数

    获取请求参数的方法:

    String getParameter() :获取指定名字的参数的值

    Map getParameterMap():获取参数名和值构成的Map对象

    Enumeration getParameterNames():获取所有请求参数名构成的enumeration对象

    String[] getParameterValues() :获取指定名字的参数的值

     1 //request.jsp
     2 
     3 <%
     4     Enumeration<String> headerNames = request.getHeaderNames() ;
     5     while (headerNames.hasMoreElements())
     6     {
     7         String headerName = headerNames.nextElement();
     8         out.println(headerName + “-->” + request.getHeader(headerName) + “<br />”);
     9     }
    10     String name = request.getParameter(“name”);
    11 %>
    12         

    4.6.2 操作request范围的属性

    1 //draw.jsp
    2 
    3 <body>
    4     <form method=”post” action=”first.jsp”>
    5         取钱:<input type=”text” name=”balance” />
    6         <input type=’submit’ value=’submit’ />
    7     </form>
    8 </body>
    9     
     1 //first.jsp
     2 
     3 <%
     4     String bal = request.getParameter(“balance”);
     5     double qian = Double.parseDouble(bal);
     6     if (qian < 500)
     7         out.println(‘Give you’ + qian);
     8     else
     9     {
    10         List<String> info = new ArrayList<String>();
    11         info.add(“1111”);
    12         info.add(“2222”);
    13         request.setAttribute(“info”, info);
    14     }
    15 %>
    16 <jsp :forward page= ‘second.jsp’ />
    17         
     1 //second.jsp
     2 
     3 <%
     4     String bal = request.getParameter(‘balance’) ;
     5     double qian = Double.parseDouble(bal);
     6     List<String> info = (List<String>)request.getAttribute(‘info’) ;
     7     for (String tmp : info)
     8         out.println(tmp + “<br />”);
     9     out.println(“Give you” + qian);
    10 %>

    forward用户请求时,请求参数和request范围的参数都不会丢失,即forward后还是原来的请求,未再次向服务器发送请求。

    4.6.3 执行forward或include

    HttpServletRequest类提供了一个getRequestDispatcher(String path)方法,其中path是希望forward或include的路径,该方法返回一个RequestDispacher。

    getRequestDispatcher(“a.jsp”).include(request, response)

    4.7 Response对象

    4.7.1 response生成非字符响应

    out对象也可以生成响应,但out是JSPWriter的实例,JSPWriter是Writer的子类,Writer是字符流,无法生成非字符内容。

  • 相关阅读:
    2016"百度之星"
    codeforces 55 div2 C.Title 模拟
    codeforces 98 div2 C.History 水题
    codeforces 97 div2 C.Replacement 水题
    codeforces 200 div2 C. Rational Resistance 思路题
    bzoj 2226 LCMSum 欧拉函数
    hdu 1163 九余数定理
    51nod 1225 余数的和 数学
    bzoj 2818 gcd 线性欧拉函数
    Codeforces Round #332 (Div. 2)D. Spongebob and Squares 数学
  • 原文地址:https://www.cnblogs.com/xianglongsdu/p/4803017.html
Copyright © 2011-2022 走看看