您的位置:首页 > Web前端 > JavaScript

JSP学习笔记

2015-09-12 14:55 821 查看
1. JSP的4种基本语法

1.1 JSP注释

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

1.2 JSP声明

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

例如:

<%!

Public int count;

Public String info()

{

Return  “hello”;

}

%>


声明的变量和方法会变为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()方法获取。

命令语法:

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


例如:

<jsp:forward  page=”result.jsp”>
<jsp:param name=”age” value=”29” />
</jsp:forward>


<h3>目标页面</h3>
<%=request.getParameter(“age”)%>


3.2 Jsp:include

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

语法格式:

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


3.3 Jsp:useBean jsp:setProperty jsp:getProperty

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

语法格式:

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


3.4 Jsp:plugin

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

3.5 Jsp:param

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

4. JSP中的9个内置对象

application:javax.servlet.ServletContext的实例,代表JSP所属的应用本身。常用方法有getAttribute()、setAttribu()和getInitParameter()

config:javax.servlet.ServletConfig的实例,代表该JSP的配置信息。常用方法有getInitParameter()和getInitParameternames()

exception :java.lang.Throwable的实例,只有当编译指令page的isErrorPage属性为true时该对象才可以使用。常用方法有getMessage()和printStackTrace()

out:javax.servlet.jsp.JspWriter的实例,代表JSP页面的输出流

page:代表页面本身,也就是servlet中的this,能用page的地方就可以用this

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

request:javax.servlet.http.HttpServletRequest的实例,获取客户端请求参数必须使用该对象。常用方法有getParameter()、getParameterValues()、setAttribute()和getAttribute等

response :javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。常用方法有getOutputStream()、sendRedirect()等

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共享参数

//get-application.jsp

<% !
int i ;
%>
<%
application.setAttribute(‘counter’, String.valueof(++i)) ;
%>


//put-application.jsp

<%=application.getAttribute(‘counter’);%>


//Servlet

@WebServlet(name=”get-application”, urlPatterns=(“get-application”))
public  class  getApplication extends httpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContextType(“text/html;character=gb2312”);
PrintWriter out = response.getWriter();
out.println(“<html><head><title>”);
out.println(“测试application”);
out.println(“</title></head><body>”);
ServletContext sc = getServletConfig.getServletContext();
out.println(“application中当前的counter值为:”);
out.println(sc.getAttribute(“counter”));
out.println(“</body></html>”);
}
}


4.1.2 获得web应用配置参数

//getWebParam.jsp
<%
String driver = application.getInitParameter(“driver”);
String url = application.getInitParameter(“url”);
String user = application.getInitParameter(“user”);
String password = application.getInitParameter(“password”);
%>


4.2 Config对象

//config.jsp

name配置参数的值为:<%=config.getInitParameter(“name”)%>


//web.xml

<servlet>
<servlet-name>config</servlet-name>
<jsp-file>/config.jsp</jsp-file>
<init-param>
<param-name>name</param-name>
<param-value>juedi</param-value>
</init-param>
<servlet-mapping>
<servlet-name>config</servlet-name>
<url-pattern>/config</url-pattern>
</servlet-mapping>


4.3 Exception对象

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

//throwException.jsp

<%@ page errorPage=”error.jsp”%>
<%
int a = 6;
int c = a / 0;
%>


//error.jsp

<%@ page isErrorPage=”true”%>
<body>
异常类型是:<%=exception.getClass()%><br />
异常信息是:<%=exception.getMessage()%>
</body>


4.4 Out对象

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

4.5 pageContext对象

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

//pageContextTest.jsp

<%
pageContext.setAttribute(“page”, “hello”);
pageContext.setAttribute(‘name’, ‘juedi’ , pageContext.SESSION_SCOPE) ;
pageContext.setAttribute(‘pass’, ‘pass’, pageContext.APPLICATION_SCOPE) ;
%>


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() :获取指定名字的参数的值

//request.jsp

<%
Enumeration<String> headerNames = request.getHeaderNames() ;
while (headerNames.hasMoreElements())
{
String headerName = headerNames.nextElement();
out.println(headerName + “-->” + request.getHeader(headerName) + “<br />”);
}
String name = request.getParameter(“name”);
%>


4.6.2 操作request范围的属性

//draw.jsp

<body>
<form method=”post” action=”first.jsp”>
取钱:<input type=”text” name=”balance” />
<input type=’submit’ value=’submit’ />
</form>
</body>


//first.jsp

<%
String bal = request.getParameter(“balance”);
double qian = Double.parseDouble(bal);
if (qian < 500)
out.println(‘Give you’ + qian);
else
{
List<String> info = new ArrayList<String>();
info.add(“1111”);
info.add(“2222”);
request.setAttribute(“info”, info);
}
%>
<jsp :forward page= ‘second.jsp’ />


//second.jsp

<%
String bal = request.getParameter(‘balance’) ;
double qian = Double.parseDouble(bal);
List<String> info = (List<String>)request.getAttribute(‘info’) ;
for (String tmp : info)
out.println(tmp + “<br />”);
out.println(“Give you” + qian);
%>


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是字符流,无法生成非字符内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: