按照以下的基本规则使用JSP编写WML程序了。
(1) WML的标签和语句均可直接写在JSP程序中。
(2) 如果想使用JSP来处理WML的标签和语句,则需要使用“<%”和“%>”引起来,格式为:
<%
……(JSP编写的WML语句行);
%>
例如,以下几行语句就是利用JSP的out.println来输出WML的标签和语句:
<%
out.println("<br>");
out.println("Hello from script code!<br/>");
out.println("</p>");
%>
(3) JSP编写的WML语句要用引号(" ")引起来,然后再用括号括起来,而且后面还要加上分号( ; ),格式为:
JSP对象.方法/关键字(" ……WML标签或语句行 ");
例如,下面就是反映JSP书写WML语句格式的例子:
out.println("Hello from script code!<br/>");
(4) WML的文件类型可以使用JSP的response对象进行声明,也可以在声明页面语言时一块儿声明,它们的格式分别如下:
<% response.setContentType("text/vnd.wap.wml"); %>
或
<%@ page language="java" contentType="text/vnd.wap.wml" %>
(5) 最后的程序文件保存时要采用“.jsp”的扩展名,即保存为JSP的程序文件。JSP将被编译成Java源文件,最后成为servlet。
了解了以上基本规则,我们下面给出一个利用JSP向WAP浏览器显示“Hello from script code!”信息的简单程序,通过该程序大家可以进一步认识利用JSP开发WML页面的具体方法。
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/ wml_1.1.xml">
<% response.setContentType("text/vnd.wap.wml"); %>
<wml>
<card>
<do type="accept">
<go href="index.jsp#test"/>
</do>
<p>JSP Test:<br/>
Press accept to continue!<br/>
</p>
</card>
<card>
<do type="prev">
<prev/>
</do>
<%
out.println("<p>");
out.println("Hello from script code!<br/>");
out.println("</p>");
%>
</card>
</wml>
程序举例
我们下面利用JSP和WML实现一个为移动用户定时更新约会的例子。该例的应用程序共包括两个页面。第一个页面的文件是pick_appointment.jsp,它提供了一个选择卡片,当用户选择了其中某一个约会时间时,浏览器就会带着本次约会的ID号进入到第二个页面,即文件名为show_appointment_data.jsp的页面。我们在第二个页面编写了两个卡片,其中第一个卡片用于显示会面的时间,第二个卡片用于显示数据输入,让用户通过输入ID而取消约会。
程序中动态的约会数据是通过Java Bean的实例来取得的,具体过程其实是通过JDBC连接到数据库的过程。取消约会的操作是通过servlet实现的。由于用户可能随时取消某个约会,所以我们需要对pick_appointment.jsp页面进行定时刷新。下面我们就给出这一应用程序的源程序。
pick_appointment.jsp页面文件的程序代码如下:
<%@ page language="java" contentType="text/vnd.wap.wml" %>
<jsp:useBean>
<%!
// 下面创建针对每次约会的选项<option>元素
private String getOptions(mwebber.samples.AppointmentBean appointmentBean)
{
StringBuffer sb = new StringBuffer();
int[] appointmentIDs = appointmentBean.getAppointmentIDs();
for(int i=0; i<appointmentIDs.length; i++) {
sb.append("<option onpick=\"show_appointment_data.jsp?id=");
sb.append(i);
sb.append("\">");
sb.append(appointmentBean.getAppointmentTime(i));
sb.append("</option>");
}
return sb.toString();
}
%>
<%! String strXMLPrologue = ""; %>
<%-- WML内容开始 --%>
<%= strXMLPrologue %>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/ wml_1.1.xml">
<wml>
<card>
<!-- 每分钟刷新一次卡片组 -->
<onevent type="ontimer">
<go href="pick_appointment.jsp"/>
</onevent>
<timer value="600"/>
<!-- 回显卡片 -->
<do type="prev">
<prev/>
</do>
<!-- 为要选择约会而显示"select" -->
<p>
<select title="Appointments">
<%= getOptions(appointmentBean) %>
</select>
</p>
</card>
</wml>
<%-- WML内容结束 --%>
show_appointment_data.jsp页面文件的程序代码如下:
<%@ page language="java" contentType="text/vnd.wap.wml" %>
<jsp:useBean>
<%
// 使用request对象的方法获取"id"参数的值
int intAppointmentID = Integer.parseInt(request.getParameter("id"));
%>
<%! String strXMLPrologue = ""; %>
<%-- WML内容开始 --%>
<%= strXMLPrologue %>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/ wml_1.1.xml">
<wml>
<card>
<p align="center">
<b>
<%= appointmentBean.getAppointmentTime(intAppointmentID) %>
</b>
</p>
<p>
<br/>
<%= appointmentBean.getAppointmentDetails(intAppointmentID) %>
<br/>
<a href="#check_off">Check off this appointment</a><br/>
<a href="http://localhost:8080/pick_appointment.jsp">Back to appointments list</a>
</p>
</card>
<card>
<!--设置向服务器发送输入数据的选择项 -->
<do type="accept">
<go href="/servlet/ProcessCheckOff" method="post">
<postfield>
</go>
</do>
<p>
<input>
</p>
<p>
<a href="#main_data">Back to appointment data</a>
<br/>
<a href="http://localhost:8080/pick_appointment.jsp">Back to appointments list</a>
</p>
</card>
</wml>
<%-- WML内容结束 --%>
Servlet技术在WAP开发中的应用
WAP开发中应用Servlet技术时要利用专用WAP服务器软件,如Nokia WAP Server等提供的开放程序接口来编写具体的程序。
我们仍以WML为例,它应用Servlet编程的规则与应用JSP时的规则基本相同,我们不再逐条给出解释。
通过下面的简单例子,结合JSP的编写规则,大家不难了解Servlet编写WML页面的基本规则:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class WapServlet extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
{
response.setContentType("text/vnd.wap.wml");
PrintWriter out = response.getWriter();
xmlHeader(out);
out.println("<wml>");
out.println("<card title = \"JavaTest\">");
out.println("<p>Hello! This comes from a servlet!</p>");
out.println("</card>");
out.println("</wml>");
}
public void xmlHeader(PrintWriter out)
{
out.println("<?xml version=\"1.0\"?>");
out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" "+
"\"http://www.wapforum.org/DTD/wml_1.1.xml\">");
}
}
下面我们给出一个简单的Servlet程序,它可在WAP浏览器上显示“The simple HelloWorld servlet.”的信息。程序清单如下:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
String m_text;
public void init(ServletConfig config) throws ServletException
{
super.init(config);
m_text = config.getInitParameter("text");
if (m_text == null)
{
m_text = "This is a simple test servlet.";
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException
{
PrintWriter out = response.getWriter();
out.println("<?xml version=\"1.0\"?>");
out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML1.1//EN\"\"http://www. wapforum.org/DTD/wml_1.1.xml/">");
out.println("<wml>");
out.println("<card id=\"card1\" title=\"Hello World\">");
out.println("<p>");
out.println(m_text);
out.println("</p>");
out.println("</card>");
out.println("</wml>");
// Remember to close the out object
out.close();
}
public String getServletInfo( )
{
return "The simple HelloWorld servlet.";
}
}
(1) WML的标签和语句均可直接写在JSP程序中。
(2) 如果想使用JSP来处理WML的标签和语句,则需要使用“<%”和“%>”引起来,格式为:
<%
……(JSP编写的WML语句行);
%>
例如,以下几行语句就是利用JSP的out.println来输出WML的标签和语句:
<%
out.println("<br>");
out.println("Hello from script code!<br/>");
out.println("</p>");
%>
(3) JSP编写的WML语句要用引号(" ")引起来,然后再用括号括起来,而且后面还要加上分号( ; ),格式为:
JSP对象.方法/关键字(" ……WML标签或语句行 ");
例如,下面就是反映JSP书写WML语句格式的例子:
out.println("Hello from script code!<br/>");
(4) WML的文件类型可以使用JSP的response对象进行声明,也可以在声明页面语言时一块儿声明,它们的格式分别如下:
<% response.setContentType("text/vnd.wap.wml"); %>
或
<%@ page language="java" contentType="text/vnd.wap.wml" %>
(5) 最后的程序文件保存时要采用“.jsp”的扩展名,即保存为JSP的程序文件。JSP将被编译成Java源文件,最后成为servlet。
了解了以上基本规则,我们下面给出一个利用JSP向WAP浏览器显示“Hello from script code!”信息的简单程序,通过该程序大家可以进一步认识利用JSP开发WML页面的具体方法。
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/ wml_1.1.xml">
<% response.setContentType("text/vnd.wap.wml"); %>
<wml>
<card>
<do type="accept">
<go href="index.jsp#test"/>
</do>
<p>JSP Test:<br/>
Press accept to continue!<br/>
</p>
</card>
<card>
<do type="prev">
<prev/>
</do>
<%
out.println("<p>");
out.println("Hello from script code!<br/>");
out.println("</p>");
%>
</card>
</wml>
程序举例
我们下面利用JSP和WML实现一个为移动用户定时更新约会的例子。该例的应用程序共包括两个页面。第一个页面的文件是pick_appointment.jsp,它提供了一个选择卡片,当用户选择了其中某一个约会时间时,浏览器就会带着本次约会的ID号进入到第二个页面,即文件名为show_appointment_data.jsp的页面。我们在第二个页面编写了两个卡片,其中第一个卡片用于显示会面的时间,第二个卡片用于显示数据输入,让用户通过输入ID而取消约会。
程序中动态的约会数据是通过Java Bean的实例来取得的,具体过程其实是通过JDBC连接到数据库的过程。取消约会的操作是通过servlet实现的。由于用户可能随时取消某个约会,所以我们需要对pick_appointment.jsp页面进行定时刷新。下面我们就给出这一应用程序的源程序。
pick_appointment.jsp页面文件的程序代码如下:
<%@ page language="java" contentType="text/vnd.wap.wml" %>
<jsp:useBean>
<%!
// 下面创建针对每次约会的选项<option>元素
private String getOptions(mwebber.samples.AppointmentBean appointmentBean)
{
StringBuffer sb = new StringBuffer();
int[] appointmentIDs = appointmentBean.getAppointmentIDs();
for(int i=0; i<appointmentIDs.length; i++) {
sb.append("<option onpick=\"show_appointment_data.jsp?id=");
sb.append(i);
sb.append("\">");
sb.append(appointmentBean.getAppointmentTime(i));
sb.append("</option>");
}
return sb.toString();
}
%>
<%! String strXMLPrologue = ""; %>
<%-- WML内容开始 --%>
<%= strXMLPrologue %>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/ wml_1.1.xml">
<wml>
<card>
<!-- 每分钟刷新一次卡片组 -->
<onevent type="ontimer">
<go href="pick_appointment.jsp"/>
</onevent>
<timer value="600"/>
<!-- 回显卡片 -->
<do type="prev">
<prev/>
</do>
<!-- 为要选择约会而显示"select" -->
<p>
<select title="Appointments">
<%= getOptions(appointmentBean) %>
</select>
</p>
</card>
</wml>
<%-- WML内容结束 --%>
show_appointment_data.jsp页面文件的程序代码如下:
<%@ page language="java" contentType="text/vnd.wap.wml" %>
<jsp:useBean>
<%
// 使用request对象的方法获取"id"参数的值
int intAppointmentID = Integer.parseInt(request.getParameter("id"));
%>
<%! String strXMLPrologue = ""; %>
<%-- WML内容开始 --%>
<%= strXMLPrologue %>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/ wml_1.1.xml">
<wml>
<card>
<p align="center">
<b>
<%= appointmentBean.getAppointmentTime(intAppointmentID) %>
</b>
</p>
<p>
<br/>
<%= appointmentBean.getAppointmentDetails(intAppointmentID) %>
<br/>
<a href="#check_off">Check off this appointment</a><br/>
<a href="http://localhost:8080/pick_appointment.jsp">Back to appointments list</a>
</p>
</card>
<card>
<!--设置向服务器发送输入数据的选择项 -->
<do type="accept">
<go href="/servlet/ProcessCheckOff" method="post">
<postfield>
</go>
</do>
<p>
<input>
</p>
<p>
<a href="#main_data">Back to appointment data</a>
<br/>
<a href="http://localhost:8080/pick_appointment.jsp">Back to appointments list</a>
</p>
</card>
</wml>
<%-- WML内容结束 --%>
Servlet技术在WAP开发中的应用
WAP开发中应用Servlet技术时要利用专用WAP服务器软件,如Nokia WAP Server等提供的开放程序接口来编写具体的程序。
我们仍以WML为例,它应用Servlet编程的规则与应用JSP时的规则基本相同,我们不再逐条给出解释。
通过下面的简单例子,结合JSP的编写规则,大家不难了解Servlet编写WML页面的基本规则:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class WapServlet extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
{
response.setContentType("text/vnd.wap.wml");
PrintWriter out = response.getWriter();
xmlHeader(out);
out.println("<wml>");
out.println("<card title = \"JavaTest\">");
out.println("<p>Hello! This comes from a servlet!</p>");
out.println("</card>");
out.println("</wml>");
}
public void xmlHeader(PrintWriter out)
{
out.println("<?xml version=\"1.0\"?>");
out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" "+
"\"http://www.wapforum.org/DTD/wml_1.1.xml\">");
}
}
下面我们给出一个简单的Servlet程序,它可在WAP浏览器上显示“The simple HelloWorld servlet.”的信息。程序清单如下:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
String m_text;
public void init(ServletConfig config) throws ServletException
{
super.init(config);
m_text = config.getInitParameter("text");
if (m_text == null)
{
m_text = "This is a simple test servlet.";
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException
{
PrintWriter out = response.getWriter();
out.println("<?xml version=\"1.0\"?>");
out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML1.1//EN\"\"http://www. wapforum.org/DTD/wml_1.1.xml/">");
out.println("<wml>");
out.println("<card id=\"card1\" title=\"Hello World\">");
out.println("<p>");
out.println(m_text);
out.println("</p>");
out.println("</card>");
out.println("</wml>");
// Remember to close the out object
out.close();
}
public String getServletInfo( )
{
return "The simple HelloWorld servlet.";
}
}