Jsp编码规范
1.1 文件后缀(File Suffixes)
文件类别 文件后缀
--------------------------------------
Java源文件 .java
Java字节码文件 .class
动态页面 .jsp
静态页面 .html
脚本文件 .js
1.2 常用文件名(Common File Names)
文件名 用途
------------------------------------------------
README 概述特定目录下所含内容的文件的首选文件名
2 缩进排版(Indentation)
4个空格常被作为缩进排版的一个单位。缩进的确切解释并未详细指定(空格 vs. 制表符)。一个制表符等于8个空格(而非4个)。
3 注释(Comments)
Jsp程序有两类注释:静态页面注释和Java注释.
静态页面注释: <!— express -->
Jsp注释: <%-- express --%>
4 Jsp语法(Syntax)
① JSP Element
② Syntax
③ Interpretation
---------------------------------------------------------------------------------------------
① JSP Expression
② <%= expression %>
③ Expression is evaluated and placed in output.
---------------------------------------------------------------------------------------------
① JSP Scriptlet
② <% code %>
③ Code is inserted in service method.
---------------------------------------------------------------------------------------------
① JSP Declaration
② <%! code %>
③ Code is inserted in body of servlet class, outside of service method.
---------------------------------------------------------------------------------------------
① JSP page Directive
② <%@ page att="val" %>
③ Directions to the servlet engine about eneral setup.
---------------------------------------------------------------------------------------------
① JSP include Directive
② <%@ include file="url" %>
③ A file on the local system to be included when the JSP page is translated into a servlet.
---------------------------------------------------------------------------------------------
① The jsp:include Action
② <jsp:include page="relative URL" flush="true"/>
③ Includes a file at the time the page is requested.
---------------------------------------------------------------------------------------------
① The jsp:useBean Action
② <jsp:useBean att=val*/> or <jsp:useBean att=val*>...</jsp:useBean>
③ Find or build a Java Bean.
---------------------------------------------------------------------------------------------
① The jsp:setProperty Action
② <jsp:setProperty att=val*/>
③ Set bean properties, either explicitly or by designating that value comes from a request parameter.
---------------------------------------------------------------------------------------------
① The jsp:getProperty Action
② <jsp:getProperty name="propertyName" value="val"/>
③ Retrieve and output bean properties.
---------------------------------------------------------------------------------------------
① The jsp:forward Action
② <jsp:forward page="relative URL"/>
③ Forwards request to another page.
---------------------------------------------------------------------------------------------
① The jsp:plugin Action
② <jsp:plugin attribute="value"*> ...</jsp:plugin>
③ Generates OBJECT or EMBED tags, as appropriate to the browser type, asking that an applet be run using the Java Plugin.
---------------------------------------------------------------------------------------------
5 注意事项
在编写Jsp页面时要注意以下事项:
1、整个jsp/jsp bean表示层应当尽可能的瘦和简单化。
2、牢记大多数的JSP都应当是只读的视图,而由页面bean来提供模型。
3、应当一起设计JSP和JSP bean
4、在尽可能合理的情况下,把业务逻辑从JSP中移走。具体于HTTP的逻辑(如,对Cookie的处理)属于bean或支持类中,而不是JSP中。
5、尽量把条件逻辑放在控制器中而不是放在视图中。
6、为JSP、包含的文件、JSP Bean和实现扩展标记的类使用遵循标准的命名惯例如:
jsp控制器 xxxxController.jsp
被包含的jsp _descriptiveNameOfFragment.jsp
jsp页面模型bean : <pagename>Bean 如loginBena.java
jsp会话bena : xxxxSessionBean
标记类 : xxxxTag,xxxxTagExtraInfo
7、应当在JSP中避免使用页面引入指令。import指令会促使类的实列化而不是jsp bean的实例化不用:<%@ page import = "com.java.util.*" %>
而用:<% java.util.List l = new java.util.LinkedList(); %>
8、jsp不应该直接去访问请求参数。bean应当执行这样的处理过程并且输出所处理的模型数据。
9、jsp不应当访问属性文件,或者使用JNDI。bean可以访问属性。
10、如果jsp bean具有的所有的属性不能够从页面请求中被映射到,就要尽力在<jsp:useBean>标记中设置属性。
11、应当避免设计既显示表单又处理结果的页面。
12、在jsp中避免代码重复。把要重复的功能放在一个包含的jsp、bean或标记扩展中,使得它能够被重用。
13、jsp bean应当永远不要去产生HTML
14、在jsp中应该避免使用out.println()发放来产生页面内容。
15、jsp层不应该直接访问数据,这包括JDBC数据库访问和EJB访问。
16、在长度上,scriptlests的代码最好不要超过5行。
17、除了jsp bean之外,jsp不应当去实例化复杂的可读写的对象。如果这样的话,就有可能在jsp中去执行不适当的业务逻辑。
18、jsp bean中不应当包含大量的数据。
19、如果使用了<jsp:forward>和<jsp:include标记>,并且必须使用简单类型的值来与外部页面进行通讯的话,就应当使用一个或多个<jsp:param>元素
20、定制标记应当用在适当把逻辑从jsp中移走的地方。
21、应当谨慎地使用<jsp:forward>标记,在jsp中它是一个等价的goto。
22、应当使用隐藏的注释来阻止输出的HTML过大。
23、在jsp中避免进行异常处理
24、每个jsp文件中都应当使用一个错误页面来处理不能够从中恢复的异常。
25、在jsp错误页面中,使用HTML注释来显示传递到该页面中的异常跟踪信息。
26、只有在能够获得性能上的好处时,才使用jspInin()方法和jspDestroy()方法。获取和放弃资源是jsp beans和标记处理器的事,而不是由jsp来负责的。
27、如果没有充分的理由,就不要在jsp中定义方法和内部类。
三、Servlet编码规范
Servlet编码规范遵循java代码编写规范,为了明确标明此java文件是servlet程序,规定所有Servlet文件名都以Servlet结尾,例如:UploadServlet.java。
四、Jsp和servlet编程注意事项
在编写Servlet/JSP程序时,对实例变量一定要小心使用。因为实例变量是非线程安全的。在Servlet/JSP中,变量可以归为下面的几类:
1. 类变量
request,response,session,config,application,以及JSP页面内置的page, pageContext。其中除了application外,其它都是线程安全的。
2. 实例变量
实例变量是实例所有的,在堆中分配。在Servlet/JSP容器中,一般仅实例化一个Servlet/JSP实例,启动多个该实例的线程来处理请求。而实例变量是该实例所有的线程所共享,所以,实例变量不是线程安全的。
3. 局部变量
局部变量在堆栈中分配,因为每一个线程有自己的执行堆栈,所以,局部变量是线程安全的。
所以应该在Servlet/JSP中尽量避免使用实例变量