• 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是字符流,无法生成非字符内容。

  • 相关阅读:
    毛坯房装修步骤/过程
    编译方向是个值得考虑的选择(转发)
    暖气片安装常识
    装修,别忘了水电改造图纸
    新年走起
    装修中期需要实时监督 水电防水墙体拆改提前核定
    【CF1558D】TopNotch Insertions
    【洛谷P5008】锦鲤抄
    【UOJ#26】Game
    directx学习笔记之四:LPD3DXSPRITE,屏幕输出图片
  • 原文地址:https://www.cnblogs.com/xianglongsdu/p/4803017.html
Copyright © 2020-2023  润新知