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

原文地址:https://www.cnblogs.com/xianglongsdu/p/4803017.html