错误信息如下:
org.apache.jasper.JasperException: /admin/update_password_do.jsp(14,57) Expecting "jsp:param" standard action with "name" and "value" attributes
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
at org.apache.jasper.compiler.Parser.parseParam(Parser.java:802)
at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1645)
at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:979)
at org.apache.jasper.compiler.Parser.parseForward(Parser.java:843)
at org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1095)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1424)
at org.apache.jasper.compiler.Parser.parse(Parser.java:130)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:612)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)
at java.lang.Thread.run(Thread.java:745)
update_password_do.jsp文件如下:
<%@page contentType="text/html" pageEncoding="GBK"%>
<%@page import="org.mldn.yq.util.*,org.mldn.yq.vo.Admin,org.mldn.yq.factory.*"%>
<html>
<head><title>www.mldnjava.cn, JAVA高端培训</title></head>
<% request.setCharacterEncoding("GBK"); %>
<body>
<% String lto = "no"; // 表示登录超时,即login timeout的缩写
try {
Admin admin = (Admin)session.getAttribute("admin");
if (null == admin) { // 判断浏览器中保存的session对象是否超时
lto = "yes";
%>
<jsp:forward page="../error_page.jsp">
<jsp:param name="lto" value="<%=lto%>"/> <%-- 参数值为"yes"表示登录超时 --%>
</jsp:forward>
<%
}
String oldPW = request.getParameter("oldPW");
if (null == oldPW) {
oldPW = "";
}
oldPW = new MD5Code().getMD5ofStr(oldPW); // 使用MD5Code对象加密
if (!admin.getPassword().equals(oldPW)) { // 判断输入的原密码是否正确
%>
<jsp:forward page="update_password.jsp">
<jsp:param name="info" value="原密码输入错误!"/>
</jsp:forward>
<%
}
String newPW = request.getParameter("newPW");
if (null == newPW) {
newPW = "";
}
newPW = new MD5Code().getMD5ofStr(newPW);
admin.setPassword(newPW);
if (DAOFactory.getIAdminDAOInstance().updateById(admin.getAdminid(), admin)) {
request.setAttribute("head", "密码修改成功!");
} else {
request.setAttribute("head", "密码修改失败!");
}
request.setAttribute("str", "秒后自动跳转...");
request.setAttribute("url", "admin_privilege.jsp");
%>
<jsp:forward page="../countdown_jump_page.jsp"/>
<%
} catch(Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
错误原因在于:<jsp:forward>标签的开始与结束之间不能有注释<%-- --%>!
<jsp:forward page="../error_page.jsp">
<jsp:param name="lto" value="<%=lto%>"/> <%-- 参数值为"yes"表示登录超时 --%>
</jsp:forward>
去掉注释就不再报错了。
总结该错误可能出现的原因:
1.标签的开始和结束不一致:比如我犯的这个错
2.没有结束标签:<jsp:forward page="../error_page.jsp">,应该是<jsp:forward page="../error_page.jsp"/>
3.没有参数的标签,结束时不能换行:
<jsp:forward page="testTag.jsp">
</jsp:forward>
应该是<jsp:forward page="testTag.jsp"></jsp:forward>
4、标签的开始与结束之间不能有注释,如上所示。