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

简介: 你应该了解的JSP开发细节之out对象(一)

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


问题描述


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


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


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


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


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



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


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

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


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


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


问题分析


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


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



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


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


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


编写如下代码:

最终我们看到的结果为:


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


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


解决方案


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



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


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

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


总结


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


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

目录
相关文章
|
5月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
35 0
|
7月前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
129 12
|
7月前
|
前端开发 安全 Java
Java服务器端开发实战:利用Servlet和JSP构建动态网站
【6月更文挑战第23天】**Servlet和JSP在Java Web开发中扮演关键角色。Servlet处理业务逻辑,管理会话,JSP则结合HTML生成动态页面。两者协同工作,形成动态网站的核心。通过Servlet的doGet()方法响应请求,JSP利用嵌入式Java代码创建动态内容。实战中,Servlet处理数据后转发给JSP展示,共同构建高效、稳定的网站。虽然新技术涌现,Servlet与JSP仍为Java Web开发的基石,提供灵活且成熟的解决方案。**
93 8
|
7月前
|
搜索推荐 Java 数据库连接
探索Java Web开发:Servlet与JSP的协同工作原理
【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
79 7
|
7月前
|
缓存 安全 小程序
从基础到进阶:掌握Java中的Servlet和JSP开发
【6月更文挑战第23天】Java Web开发中的Servlet和JSP是关键技术,用于构建动态网站。Servlet是服务器端小程序,处理HTTP请求,生命周期包括初始化、服务和销毁。基础Servlet示例展示了如何响应GET请求并返回HTML。随着复杂性增加,JSP以嵌入式Java代码简化页面创建,最佳实践提倡将业务逻辑(Servlet)与视图(JSP)分离,遵循MVC模式。安全性和性能优化,如输入验证、HTTPS、会话管理和缓存,是成功应用的关键。本文提供了一个全面的学习指南,适合各级开发者提升技能。
65 7
|
7月前
|
存储 缓存 安全
Servlet与JSP在Java服务器端开发中的实践与优化
【6月更文挑战第23天】本文探讨了Java中Servlet与JSP在在线书店系统开发中的应用,强调了它们在动态网站构建和Web效率中的作用。通过实例,展示了Servlet如何作为控制器处理用户登录,JSP则利用EL表达式呈现数据。此外,文章提及了性能优化如分页和缓存,以及安全措施如防止SQL注入和XSS攻击,强调了全面掌握和应用这些技术的重要性,以创建高效、安全的Web应用。
62 7
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 10
JSP隐式对象是预定义的Java对象,如request、response、out、session、application等,直接供开发者使用。out对象是JspWriter实例,用于向网页输出内容,类似PrintWriter但有缓存处理和抛出IOException。exception对象保存了页面的异常信息,用于错误处理。
47 3
|
7月前
|
SQL druid Java
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
javaweb案例实训之基于jsp和servlet的用户管理开发[增删改查及登录注销]
54 0
|
8月前
|
缓存 Java 开发者
JSP 教程 之 JSP 隐式对象 9
JSP隐式对象是预定义的Java对象,无需声明即可直接使用。包括9大对象:request(HttpServletRequest)、response(HttpServletResponse)、out(JspWriter,用于输出到网页)、session(HttpSession)、application(ServletContext)、config(ServletConfig)、pageContext(PageContext,访问所有对象和命名空间)、page(页面实例,等同于Java的this)和Exception(异常对象)。
47 0
|
8月前
|
缓存 Java 对象存储
JSP 教程 之 JSP 隐式对象 8
JSP隐式对象是预定义的Java对象,如request、response、out等,无需声明即可直接使用。out对象是JspWriter实例,用于向response输出内容,支持print和println方法,可抛出IOException。pageContext对象代表整个JSP页面,提供访问页面信息和不同scope的对象,如request、response、session等,并有removeAttribute()方法管理页面属性。
41 0