gpt4 book ai didi

java - jsp/servlet页面的问题

转载 作者:行者123 更新时间:2023-12-02 08:26:47 25 4
gpt4 key购买 nike

我想创建一个简单的 JSP 页面。我有一个EJB,其中有一个 session 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:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h2> <b> Hello World To The Simple Calculator </b> </h2> <% float a=2,b=1; if (request.getAttribute("a")!=null) a=Float.parseFloat(request.getAttribute("a").toString()); if( request.getAttribute("b")!=null) b=Float.parseFloat(request.getAttribute("b").toString()); %> <form method="post" action="calcServlet"> <b>Number 1:</b><input type='text' name='n1' value="<%=a%>" /> <br/>
<b>Number 2:</b><input type='text' name='n2' value="<%=b%>" /> <br/>
<u><b>Options:</b></u> <br/>
<ul>
<li><b>+</b><input type='radio' name="oper" value='+' checked /></li>
<li><b>&nbsp;-</b><input type='radio' name="oper" value='-' /></li>
<li><b>*</b><input type='radio' name="oper" value='*' /></li>
<li>&nbsp; <b>/</b><input type='radio' name="oper" value='/' /></li> </ul>
<b>-------------------------------------------</b> <br/>
<input type="submit" value="Executer" /> </form>
<font color='blue'><b>Result is: </b> <%=session.getAttribute("result")%> </font> <br/> <font color='red' >Error: <%=session.getAttribute("error")%></font>
</body>
</html>

最佳答案

当您使用老式的 scriptlet(那些 <% %> 东西)时,JSP 将会空白,并且这样的 scriptlet 之一在响应已经抛出异常时已 promise 。这时显示错误页面已经太晚了。浏览器最终会得到一个半生不熟的 HTML 页面(JSP 生成的 HTML 不完整,浏览器通常会变成空白)。您应该阅读服务器日志中的异常并相应地修复代码。

<小时/>

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

<input type="text" name="n1" value="${param.n1}" />

(额外类(class)积分:使用 JSTL fn:escapeXml() 防止 XSS)

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

request.setAttribute("result", result);

并通过 EL 访问它,如下所示,它可以通过其名称即时访问页面/请求/ session /应用程序范围的属性:

<b>Result is: </b> ${result}

相关问题:

关于java - jsp/servlet页面的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com