about using scriplets in JSP
我刚接触JSP。我使用JSP创建了一个Web应用程序。
我在JSP脚本中编写了Java代码(EDOCX1,0)。对于数据库连接,我也采用了同样的方式。例子:
1 2 3 4 5 6 7 8 9 10 11 12
| html code;
<%
database connectivity code;
%>
some jquery code;
<%
again database connectivity code;
%> |
但有些人告诉我,它有一个很大的缺点。"通过使用Scriptlet声明,一次只能有一个人使用您的网站而不会发生冲突"我做得对吗?以这种方式构建Web应用程序是正确的方法吗?
- 不,这是编写Web应用程序的糟糕方法。从jsp开始,查看我们的各种wiki网站。
- stackoverflow.com/questions/5818101/&hellip;
- 忘记JSP,从servlet开始使用,JSP通常用于简单的常量页。
- 当然不是只有1个人能一次使用你的网站。最大的问题是代码遇到的任何错误都可能显示给用户。如果您将数据库连接字符串放入JSP中,并且数据库变得不可访问,那么抛出的错误可能会向用户显示您的数据库密码。如果继续使用scriptlet,至少在类中创建一个函数来建立数据库连接并处理可能的错误,然后在scriptlet中使用该类。
这是个坏主意,但这并不是因为一次只能有一个人使用这个网站。这是个坏主意,因为代码将变得难以维护。数据库连接代码应该与视图逻辑分开。也许把它放在一个servlet中(理想情况下它会被抽象到某个持久层中)。servlet将从数据库中获取数据,并使其可供JSP呈现。
如果您在脚本中放入的代码会导致这种情况发生,JSTL、Struts等都会生成Java代码,就像JSP脚本生成的代码一样。
也就是说,使用scriptlet被认为是一种糟糕的实践,因为它会导致复杂的代码。尝试使用JSTL使用bean,而将Java逻辑放在它们中。您的JSP看起来会更好,并且更容易维护。
和servlet一样,JSP也被转换成servlet,然后被编译,所以无论您在JSP声明块(即<%! ... %>中声明什么,都将直接在转换后的servlet中声明。至于servlet,在整个服务器生命周期中只有一个servlet实例,并且只有一个服务方法是由该实例中新创建的线程调用的。因此,如果同时发生请求,它们可能会更改相同的数据成员,并可能导致意外的结果。
- 无论您在JSP声明块中声明什么,都将被视为已转换servlet的属性这是错误的,scriptlets中声明的变量将在_jspService方法中被视为局部变量。
- 我提到了声明块,意思是<!%%>不是Scriplet块<%%>
- 我看不出在你的回答中有什么地方你明确地展示了<%! ... %>的用法。
- JSP声明块将被视为已翻译servlet的属性。JSP声明块声明为<!%%>
- 顺便说一下,它是<%! ... %>而不是。请参阅docs.oracle.com/javaee/5/tutorial/doc/bnaos.html_bnaot
- 是的,就像你提到的,我以前做过,所以小错误会发生。为此道歉
- 让我们在聊天中继续讨论