Java jsp中的_jspInit()和jspInit()之间的区别
jspInit()和_jspInit()之间有什么区别?我能够重写jspInit(),并在servlet初始化时调用它。但是_jspInit()是空方法,我无法重写它。为什么我们有两个不同的版本来实现相同的功能?jspDestroy也一样吗? JSP版本为2.2,带有Tomcat7 更新: PFB jsp文件:Java jsp中的_jspInit()和jspInit()之间的区别,java,jsp,Java,Jsp,jspInit()和_jspInit()之间有什么区别?我能够重写jspInit(),并在servlet初始化时调用它。但是_jspInit()是空方法,我无法重写它。为什么我们有两个不同的版本来实现相同的功能?jspDestroy也一样吗? JSP版本为2.2,带有Tomcat7 更新: PFB jsp文件: <%@ page language="java"%> <!DOCTYPE html> <html> <body> <%! publi
<%@ page language="java"%>
<!DOCTYPE html>
<html>
<body>
<%! public void jspInit(){
System.out.println("In jspInit");
}
%>
<% System.out.println("Hello world"); %>
</body>
</html>
PFB生成的Servlet文件
public final class A_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
public void jspInit(){
System.out.println("In jspInit");
}
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
return _jspx_dependants;
}
public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
// some code
}
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
// some code
}
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
// some code
try {
//some code
out.write("\r\n");
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<body>\r\n");
out.write("\r\n");
out.write("\r\n");
System.out.println("Hello world");
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (java.lang.Throwable t) {//some code
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
public final class A_jsp扩展org.apache.jasper.runtime.HttpJspBase
实现org.apache.jasper.runtime.JspSourceDependent{
public void jspInit(){
System.out.println(“In-jspInit”);
}
私有静态最终javax.servlet.jsp.JspFactory\u jspxFactory=
javax.servlet.jsp.JspFactory.getDefaultFactory();
私有静态java.util.Map_jspx_依赖项;
私有volatile javax.el.ExpressionFactory\u el\u ExpressionFactory;
私有volatile org.apache.tomcat.InstanceManager_jsp_InstanceManager;
public java.util.Map GetDependents(){
返回受抚养人;
}
public javax.el.ExpressionFactory_jsp_getExpressionFactory(){
//一些代码
}
public org.apache.tomcat.InstanceManager_jsp_getInstanceManager(){
//一些代码
}
公共空间{
}
公共空间{
}
public void_jspService(最终javax.servlet.http.HttpServletRequest请求,最终javax.servlet.http.HttpServletResponse响应)
抛出java.io.IOException、javax.servlet.ServletException{
//一些代码
试一试{
//一些代码
out.write(“\r\n”);
out.write(“\r\n”);
out.write(“\r\n”);
out.write(“\r\n”);
out.write(“\r\n”);
out.write(“\r\n”);
System.out.println(“你好世界”);
out.write(“\r\n”);
out.write(“\r\n”);
请写出(“”);
}catch(java.lang.Throwable t){//一些代码
}最后{
_releasePageContext(_jspx_page_context);
}
}
}
注意:我用注释替换了一些代码。它有一个空的_JspInit()并重写了JspInit()。我知道我不应该在服务器端代码上使用
System.out
。这是为了理解。请纠正我的错误
当jsp页面被翻译成Servlet时,jspinit()就会被转换成_jspinit()方法。请纠正我的错误 当jsp页面转换为Servlet时,jspinit()将转换为_jspinit()方法。核心区别:
\u jspInit()
方法由容器生成,如果JSP中使用了任何自定义标记。否则它将不会生成
若您试图重写\u jspInit()
并使用自定义标记,容器将抛出编译错误,并显示-replicate方法。(将有两个签名相同的\u jspInit()
方法)
重写jspInit()和jspService()之间的区别在于-\u jspService()将始终存在于任何JSP->java文件中,并将优先使用,并且我们的jspService()方法永远不会被使用
但是_jspInit()方法有条件地出现在jsp->java文件中。因此,我们的jspInit()方法将在没有_jspInit()方法时被调用,这是完全可能的
看看这个漂亮的核心区别:
\u jspInit()
方法由容器生成,如果JSP中使用了任何自定义标记。否则它将不会生成
若您试图重写\u jspInit()
并使用自定义标记,容器将抛出编译错误,并显示-replicate方法。(将有两个签名相同的\u jspInit()
方法)
重写jspInit()和jspService()之间的区别在于-\u jspService()将始终存在于任何JSP->java文件中,并将优先使用,并且我们的jspService()方法永远不会被使用
但是_jspInit()方法有条件地出现在jsp->java文件中。因此,我们的jspInit()方法将在没有_jspInit()方法时被调用,这是完全可能的
看看这个漂亮的“jspInit()是空的”意思是你在代码中将它定义为空体?我猜对了吗?@vishalgajera不!在生成的Servlet中_jspinit()为空。我刚刚重写了jspInit()。我无法重写_jspInit()。请参考我的答案“_jspInit()为空”是指在代码中您将其定义为空体?我猜对了吗?@vishalgajera不!在生成的Servlet中_jspinit()为空。我刚刚重写了jspInit()。我无法覆盖_jspInit()。请参考我的回答我们无法访问通用Servlet的服务方法。容器总是倾向于使用HttpServlet类的service()方法,然后决定使用doget()还是dopost()。destroy()也可以调用和重写我们不能访问通用Servlet的服务方法。容器总是倾向于使用HttpServlet类的service()方法,然后决定使用doget()还是dopost()。destroy()也可以调用和重写