Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jsp中的_jspInit()和jspInit()之间的区别_Java_Jsp - Fatal编程技术网

Java jsp中的_jspInit()和jspInit()之间的区别

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

jspInit()和_jspInit()之间有什么区别?我能够重写jspInit(),并在servlet初始化时调用它。但是_jspInit()是空方法,我无法重写它。为什么我们有两个不同的版本来实现相同的功能?jspDestroy也一样吗? JSP版本为2.2,带有Tomcat7

更新: PFB jsp文件:

<%@ 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()也可以调用和重写