微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。

本系列博客将为大家介绍JSP开发中一些不为人所知的一些细节方面的问题,有些问题可能会比较简单,您可能已经知道了答案,但是未必了解背后的一些原理。我们将从发现问题、分析问题、解决问题的思路来深入的阐述这些不为人知的细节。

问题描述


我们要实现的功能很简单,在页面上显示一个简单的表达式的值,如下所示:

你应该了解的JSP开发细节之out对象(一)_解决方案

在正式阅读之前,请大家思考实现这样的功能,利用JSP技术有哪些途径呢?

1)最简单的方式莫过于直接写上一行静态网页代码如下:

你应该了解的JSP开发细节之out对象(一)_ascii码_02

一个p标签加上一行表达式文字,简单粗暴的完成任务。

2)上面的实现方式过于简单,我们使用稍微高级的一点做法吧。

你应该了解的JSP开发细节之out对象(一)_编程之美_03

利用JSP的内置隐含对象out的write方法,向页面输出一个p标签。

3)在上面的基础上,我们稍微改进一下,表达式的值通过Java来计算。

你应该了解的JSP开发细节之out对象(一)_ascii码_04

4)还是利用out对象,把p标签写在外面吧,利用Java的表达式进行计算,然后将结果输出到页面。


你应该了解的JSP开发细节之out对象(一)_ascii码_05

这种做法比上一种做法确实改进了不少,但是当我们运行的时候,发现页面并没有输出8,而是出现了下面的结果:

你应该了解的JSP开发细节之out对象(一)_解决方案_06

p标签中写上了表达式文字,然后利用Java语言来计算表达式的值,得到结果为8,最后通过表达式的值向页面输出8啊,最后得到的HTML代码应该是'<p>5+3=8</p>'这个啊,​但是为什么结果会出错呢?

问题分析

看似简单的问题,但是你是否能够很清晰的告诉别人这是为什么呢?还是你只是简单的知道这个问题的答案而并不明白是什么原因导致的呢。

最好的解决方法就是直接看源码,这是最权威的地方。将鼠标放在write,按ctrl+B键进入源码。

你应该了解的JSP开发细节之out对象(一)_ascii码_07

5+3进行计算得到结果为8,因此调用的是write(int)方法。通过上图红框标记的结果可以看到,这个整数8会被强制类型转为char类型,即8所对应的ascii码。

你应该了解的JSP开发细节之out对象(一)_编程之美_08

而8对应的ascii码为『退格』,这是一个不可显示字符,故在我们的页面上无法看到退格键的显示。

为了验证确实是这个原因,我们计算另外一个表达式「30+12=42」,而42所对应的ascii码为「*」。

你应该了解的JSP开发细节之out对象(一)_解决方案_09

编写如下代码:

你应该了解的JSP开发细节之out对象(一)_编程之美_10

最终我们看到的结果为:

你应该了解的JSP开发细节之out对象(一)_编程之美_11

上述实验证明了我们的想法是正确的。

综上所述,我们得出问题的原因在于write(int)该方法会将整数强制转化为ascii码,然后向页面输出。

解决方案

上面的分析得出不能使用write(int)这个方法,而使用另外一个方法。

你应该了解的JSP开发细节之out对象(一)_编程之美_12

上图为write的所有方法列表。

你应该了解的JSP开发细节之out对象(一)_编程之美_13

通过分析得出write(String)这个方法比较适合。

你应该了解的JSP开发细节之out对象(一)_ascii码_14

在知晓问题产生的原因之后,我们就能很快的知道如何解决问题。直接将5+3的结果整数转化为String类型即可。

总结

本文从一个简单的表达式问题入手,逐步深入的分析问题产生的原因,在了解原因后,非常快速的给出了问题的解决方案。

还有其他哪些做法?欢迎下方留言。



更多精彩文章



 where2go 团队




微信号:算法与编程之美          

你应该了解的JSP开发细节之out对象(一)_解决方案_15


长按识别二维码关注我们!


写留言”发表评论,期待您的参与!欢迎转发!