Проблема со страницей jsp / servlet - PullRequest
0 голосов
/ 06 декабря 2010

Я хочу создать простую страницу JSP.У меня есть EJB, в этом есть сессионный компонент.У меня есть страница JSP и сервлет, но у меня странная ситуация.

Когда я нажимаю «Выполнить» на моей странице, это превращается в белую страницу и не дает мне результата.Я публикую здесь свой код, вы можете мне помочь, пожалуйста.

Сервлет:

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>

1 Ответ

2 голосов
/ 06 декабря 2010

JSP отключится, когда вы используете старомодные скриптлеты (эти <% %> вещи), и один из таких скриптлетов выдал исключение, в то время как ответ уже был зафиксирован,Это слишком поздно, чтобы отобразить страницу с ошибкой.Браузер заканчивается недоделанной HTML-страницей (HTML, сгенерированный JSP, является неполным, и браузер обычно становится пустым).Вы должны прочитать журналы сервера для исключения и исправить код соответствующим образом.


Ваш подход довольно неуклюжий, не связанный с реальной проблемой.Вам не нужны скриптлеты вообще.Просто используйте EL (эти вещи ${}).Имеет мгновенный доступ к параметрам запроса.Например,

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

(для дополнительных пунктов курса: используйте JSTL fn:escapeXml(), чтобы предотвратить XSS)

Вам даже не нужно дублировать их как атрибуты запроса всервлет.Вы также не должны сохранять результат как атрибут сеанса (он будет общим для всех окон / вкладок браузера в одном сеансе, вы не хотите иметь его для переменной на основе запроса).Сохраните его как атрибут запроса

request.setAttribute("result", result);

и получите к нему доступ по EL следующим образом: он имеет мгновенный доступ к атрибутам области страницы / запроса / сеанса / приложения по его имени:

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

Похожие вопросы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...