wml_10 WML与tomcat服务器上的Servlet进行通信

2009-12-31  分类:J2ME|WML 标签: ,  作者:A-One

一直我们都是在本地学习 wml 和 wmlscript , 那么如果放在服务器上会怎么样呢 ?

或者 我们需要和其他后台进行相互通信, 再结合数据库 又会怎样呢 ?

这次我们学习一下 在 tomcat服务器上 配置 wml 和 servlet 让它们相互通信。

思路是这样的: wml页面提交数据给 servlet , servlet 接收后再进行处理 ,然后返回一个wml页面

给手机进行显示。

==========================================

好,我们先安装一下 tomcat 服务器吧, 这里我使用的版本是 apache-tomcat-5.5.20 ,

在文章的最后我会提供给大家下载, 你可以在网上下载吧。

如果你一直 按照我们这个wml教程来做的话, 那么你已经安装好 JDK 了,也配置好环境了。

如果你还没有的话 请参考

http://www.17rumen.com/archives/175.html  这个视频详细演示了 jdk 1.7安装 和 配置环境变量的。

这里我不重复了, 假设你的电脑已经安装好了 jdk 和 配置好了环境变量。

那么你就可以 解压出 tomcat 就可以使用了。

看我操作吧。

运行 apache-tomcat-5.5.20\bin\startup.bat 就可以测试 一下 是否成功

看到没有出错的信息, 一般正常运行, 可以用浏览器进行测试

http://127.0.0.1:8080/   显示一个 tomcat界面,表示正常了。

===========================================================
下面来编写 servlet 程序。

详细的编写 过程 我就不说了, 还有你需要一定的 java 基础。

特别是 j2ee 这一块的, 特别servlet 这个吧。

这里我主要讲解一下 重点部分

response.setContentType("text/vnd.wap.wml");

这个就是 指定 响应后返回给 客户端界面的格式吧。
如果是 平时我们用的 ie 浏览器这些 电脑浏览器界面, "text/html" 格式的

String userName = request.getParameter("userName");
这个就是得到手机页面传过来的参数的值

  if( !userName.equals("Jack") )
  {
   response.sendRedirect("/wml/wml_06.wml");
  }

然后做一个简单的判断, 如果 手机用户输入的名字 不是Jack 则返回到输入界面
如果输入的名字是 Jack 那么就会显示一个

  out.println("<?xml version=\"1.0\"?>");
  out.println("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"");
  out.println(" \"http://www.wapforum.org/DTD/wml_1.1.xml\">");
  out.println("<wml>");
  out.println("<card title=\"Welcome!\">");
  out.println(" <p align=\"center\">");

  out.println("Hello, "+ userName );

  out.println("</p>");
  out.println("</card>");
  out.println("</wml>");

这样的界面, 内容是  Hello,  Jack

好, Servlet 文件有了, 但是这是一个 .java 源文件,还要编译成 .class 文件才行。

为了编译路径方便, 我们把 MyServlet.java 复制到 c:\ 盘下
C:\>cd \

C:\>javac MyServlet.java

MyServlet.java:2: 软件包 javax.servlet 不存在
import javax.servlet.*;
^
MyServlet.java:3: 软件包 javax.servlet.http 不存在
import javax.servlet.http.*;
^
MyServlet.java:4: 找不到符号
public class MyServlet extends HttpServlet

出现一些错误, 这是一个包的缺省, 一个 j2ee的, tomcat 自带有的,

但是要 配置一下 环境变量 classpath 下面看我配置吧。

在最后加入 

;C:\Documents and Settings\Administrator\桌面\apache-tomcat-5.5.20\common\lib\servlet-api.jar

然后 一定要退出原来的 cmd

再重新执行 cmd

这样就成功编译出  MyServlet.class 文件了。

=============================================

下面我们来 配置一些 这个 wml 文件和 MyServlet.class 这个文件

\apache-tomcat-5.5.20\webapps  在这个目录下 新建 一个 wml 文件夹

然后进入文件夹 再新建一个 WEB-INF文件夹, 再进去新建一个文件夹 classes和一个 web.xml文件。

记事本打开 web.xml 文件 , 内容如下:

<web-app>
 <servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>MyServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/MyServlet</url-pattern>
 </servlet-mapping>
</web-app>

把刚才编译的 MyServlet.class 放入 classes目录下

至于 wml 文件方面,我们用会 第6课的视频教程的代码 wml_06.wml

不过要做一些修改

   <a href="http://127.0.0.1:8080/wml/MyServlet?userName=$(userName)">
    Login
   </a>

很遗憾的是 我们一直使用的 Nokia Mobile Browser Simulator 4.0

不能通过 RUL 来访问 wap网站, 只能本地打开 .wml 文件,可能是我不会设置的原因吧

我现在也可以再测试一下, 是吧,就是这样 一直等下去

http://127.0.0.1:8080/wml/wml_06.wml
这个路径是没有错的。

不说了, 现在我们用另外一个 软件来测试吧。

M3Gate1.2(windows访问wap网站浏览器).7z

你们可以到网上下载,我也会提供给你们下载的。

具体怎样用, 我不说了, 看我操作吧。

这样就打开了

点击 login 后, 出现 404 也就是没有找到 tomcat  上的 servlet

我们可能是刚才配置好了 没有重启 tomcat

我现在关闭了, 再次 启动一下

我找到原因了 , web.xml 文件应该 在 WEB-INF 目录下的。

看到了吧, 现在我们就可以 看到 显示 Hello, Jack 了

这时我们登陆 都不了, 只会再回到 这个界面上去

现在这个服务器只能在 局域网上 访问吧

你可以修改 .wml 中的

   <a href="http://192.168.1.8:8080/wml/MyServlet?userName=$(userName)">
    Login
   </a>

再手机 模拟器上 输入 http://192.168.1.8:8080/wml/wml_06.wml

也是一样的效果, 这时你可以在局域网上 的其他机器进行访问

==================================

下面总结一下吧, 这只是一个简单的 交互程序

你可以做一些扩展, 例如 加上验证密码

还有 用户名和密码 需要从数据库中 得到进行验证

这就涉及到 servlet 和 数据库上的啦。

还有就是 当输入的数据有问题, 做一个 提示页面 告诉用户 重新输入一次

等等。。这些你们都可以进一步学习。 我就演示到这里了 88


“wml_10 WML与tomcat服务器上的Servlet进行通信”没有评论

有任何疑问或建议,可以给作者留言: