为了保证循序渐进的学习状态,我们这里无可奈何的使用了一些在正式工作时明令禁止的代码,请大家在阅读此章务求领会精神,千万不要死记硬背,以防遗憾终身。
如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章: 第 3 章 请求的跳转与转发
  1. 了解从request中获得参数的方法。
  2. 了解一些jsp指令(directive)。
  3. 了解中文乱码问题。

2.1. 另一个简单jsp

上一篇举的例子很单纯,无论谁向服务器发送请求,服务器都只计算当前系统时间,然后把这个时间制作成http响应发还给浏览器。
可惜这种单向的响应没办法实现复杂的业务,比如像这样:
jsp-ch-02-01-en-01.png
客户在这个页面输入自己的名字,然后提交:
jsp-ch-02-01-en-02.png
服务器会对你说:“你好啊,XXX。”
jsp-ch-02-01-en-03.png
返回刚才的页面,再输入另外一个名字:
jsp-ch-02-01-en-04.png
提交以后就变成这样:
jsp-ch-02-01-en-05.png
呵呵,神奇吧,服务器知道你叫什么名字,而且还会向你问好。
虽然咱们都知道这只是从请求中获得了用户名,加上欢迎信息再发送回浏览器,但最终用户会感到更亲切。下面就让我们来看一下如何从请求获得参数吧。
首先用户输入页面会是这样的:
<form action="test.jsp">
    username : <input type="text" name="username" />
    <br />
    <input type="submit">
</form>
        
这里是一个简单的form,里面只有一个名叫username的文本框,点击提交之后它的值就会提交到后台服务器上的test.jsp。那么在jsp里,咱们如何得到用户输入的username呢?
Hello <%=request.getParameter("username")%>
        
呼呼,原来就这么简单,前面的Hello 是一成不变的,后面紧接<%%>包含的java代码。
只要是<%%>中间的部分就会被当成java代码执行,咱们就来看看jsp里是通过什么途径获得请求中的参数吧。
首先是request,翻译过来就是请求,它被称作jsp九大默认对象之一,与http请求相关的操作都是通过request实现的,你完全可以把它看作是浏览器发送过来的http请求。
请求里就包含了我们需要获得的参数,你想要知道username的值吗?好的,只要调用getParameter("username")就可以获得了,你交给request一个参数名,它会返回对应的参数值,因为http协议的限制,获得的参数值都是字符串,不过在参数不存在的时候,也会返回null,所以一定要记住在使用之前判断是否为null,免得频繁出现NullPointerException。
好了,现在我们把得到的参数值输出即可,你可以对语句前面的等号感到疑惑,它的意思就是把参数值输出到页面上,你也可以使用另一种方法:
Hello <%out.print(request.getParameter("username"));%>
        
上一种方法可以看作是它的简化形式,请注意如果使用第一种方法,是不需要在java代码最后加上分号的,而第二种方法必须加上分号。因为第一种方法是特殊的简化写法,第二种方法是标准的java代码,稍微留意一下就可以区分了。
例子在lingo-sample/02-01/,将目录复制到tomcat的webapp目录下,启动tomcat后可以访问 http://localhost:8080/02-01/进行测试