jsp / servlet页面有问题

我想创建一个简单的JSP页面。 我有一个EJB,在这里有一个会话bean。 我有一个JSP页面和一个Servlet,但我有一个奇怪的情况。

当我点击我的页面上的执行时,这将变为白页并且不会给我结果。 我在这里发布我的代码,请你帮我。

Servlet的:

package web; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import javax.naming.*; import javax.servlet.*; import javax.servlet.*; import javax.servlet.http.*; import ejb.calc; /** * Servlet implementation class calcServlet */ public class calcServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public calcServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(true); RequestDispatcher rd=this.getServletContext().getRequestDispatcher("/index.jsp"); float a=Float.parseFloat(request.getParameter("n1")); float b=Float.parseFloat(request.getParameter("n2")); char oper=request.getParameter("oper").charAt(0); float result=0; try { Context ctx=new InitialContext(); // call the calcImpl class of the SimpleCalculator EJB with the mappedName calc cl=(calc) ctx.lookup("Firstcalc"); switch(oper){ case '+': result=cl.sum(a, b); break; case '-': result =cl.minus(a, b); break; case '*': result =cl.mult(a, b); break; case '/': result =cl.div(a, b); break; } session.setAttribute("result",result); request.setAttribute("a", a); request.setAttribute("b", b); } catch(NamingException e) {session.setAttribute("erreur: ",e.getMessage()); }rd.forward(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } 

JSP:

      Insert title here   

Hello World To The Simple Calculator

Number 1:<input type='text' name='n1' value="" />
Number 2:<input type='text' name='n2' value="" />
Options:
  • +
  •  -
  • *
  •   /
-------------------------------------------
Result is:
Error:

当您使用旧式的scriptlet (那些<% %>东西)时,JSP将被清空,并且这样的一个scriptlet在响应已经提交时抛出了exception。 显示错误页面为时已晚。 浏览器最终会出现半页HTML页面(JSP生成的HTML不完整,浏览器通常会变为空白)。 您应该阅读服务器日志以获取exception并相应地修复代码。


与实际问题无关,你的方法非常笨拙。 你根本不需要scriptlet 。 只需使用EL(那些${}东西)。 它可以即时访问请求参数。 例如

  

(对于额外的课程要点:使用JSTL fn:escapeXml()来防止XSS)

您甚至不需要将它们复制为servlet中的请求属性。 您也不应将结果存储为会话属性(它将在同一会话中的所有浏览器窗口/选项卡之间共享,您不希望将此结果用于基于请求的变量)。 将其存储为请求属性

 request.setAttribute("result", result); 

并通过EL访问它,如下所示,它只能通过其名称即时访问页面/请求/会话/应用程序作用域属性:

 Result is:  ${result} 

相关问题:

  • JSP / Servlet中的简单计算器 (带可选的Ajax)
  • 如何避免JSP文件中的Java代码