2016-09-08 8 views
0

次のコードでサーブレットを使用して図形を描画しようとしていますが、コードワードは、JSPとサーブレットを別々に使用する場合には問題ありませんが、コード全体をサーブレットに入れても機能しません。次のコードでサーブレットを使用して図形を描画しようとしていますが、画像が表示されていません。

これは私のコードです:

import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.ServletOutputStream; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

    /** 
    * Servlet implementation class CreateShapes 
    */ 
    @WebServlet("/CreateShapes") 
    public class CreateShapes extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

     HttpSession sessionvar; 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     // response.getWriter().append("Served at: 
     // ").append(request.getContextPath()); 
     // response.setContentType("text/html"); 
     ServletOutputStream sos = response.getOutputStream(); 
     sos.println("<html><body>"); 
     sos.println("<form method='get' action='CreateShapes'>"); 
     sos.println(
       "<input type='submit' name='btn' value='Circle'><br><input type='submit' name='btn' value='Square'><br><input type='submit' name='btn' value='Rectangle'>"); 
     sos.println("</form></body></html>"); 

     String shapeselected = request.getParameter("btn"); 

     if (shapeselected.length() > 0) { 
      sessionvar = request.getSession(); 
      sessionvar.setAttribute("selectedshape", shapeselected); 
      sos.flush(); 

     } 

     // sos = response.getOutputStream(); 
     response.setContentType("image/jpeg"); 
     sos.println("session value\t" + sessionvar.getAttribute("selectedshape").toString()); 
     BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB); 

     Graphics2D g = bi.createGraphics(); 
     // g.setBackground(Color.WHITE); 
     // g.clearRect(0, 0, 300, 300); 

     if (sessionvar.getAttribute("selectedshape").toString().equals("Circle")) { 

      g.setColor(Color.RED); 
      g.fillOval(30, 30, 150, 150); 
      g.dispose(); 
      ImageIO.write(bi, "jpeg", sos); 
     } else if (sessionvar.getAttribute("selectedshape").equals("Square")) { 

      g.setColor(Color.GREEN); 
      g.fillRect(80, 80, 100, 100); 
      ImageIO.write(bi, "jpeg", sos); 
     } else { 

      g.setColor(Color.BLUE); 
      g.fillRect(80, 80, 200, 150); 
      ImageIO.write(bi, "jpeg", sos); 
     } 
     sos.flush(); 
     // sos.close(); 

    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doGet(request, response); 
    } 
} 
+0

はあなたが達成したいのか、理解するために、動作するコードを表示します。 **とにかく**、あなたは一つのサーブレットメソッドからHTML **と**イメージの両方を出力することはできません(実際、Michael Akermanの答えはかなり正確です、元の質問のあいまいさを考えると、なぜ誰かがそれをdownvotedしたのか分かりません)。 –

答えて

-1
import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.ServletOutputStream; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class CreateShapes 
*/ 
@WebServlet("/CreateShapes") 
public class CreateShapes extends HttpServlet 
{ 
    protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     response.setContentType("text/html"); 
     ServletOutputStream sos = response.getOutputStream(); 

     sos.println("<html><body>"); 
     sos.println("<form method='post' action='CreateShapes'>"); 
     sos.println("<input type='submit' name='btn' value='Circle'><br><input type='submit' name='btn' value='Square'><br><input type='submit' name='btn' value='Rectangle'>"); 
     sos.println("</form></body></html>"); 
     sos.close(); 
    } 

    protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     response.setContentType("image/jpeg"); 
     ServletOutputStream sos = response.getOutputStream(); 

     BufferedImage bi = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = bi.createGraphics(); 
     // g.setBackground(Color.WHITE); 
     // g.clearRect(0, 0, 300, 300); 

     String shapeselected = request.getParameter("btn"); 
     if (shapeselected.equals("Circle")) 
     { 
      g.setColor(Color.RED); 
      g.fillOval(30, 30, 150, 150); 
      g.dispose(); 
      ImageIO.write(bi, "jpeg", sos); 
     } 
     else 
     { 
      if (shapeselected.equals("Square")) 
      { 
       g.setColor(Color.GREEN); 
       g.fillRect(80, 80, 100, 100); 
       ImageIO.write(bi, "jpeg", sos); 
      } 
      else 
      { 
       g.setColor(Color.BLUE); 
       g.fillRect(80, 80, 200, 150); 
       ImageIO.write(bi, "jpeg", sos); 
      } 
     } 

     sos.close(); 
    } 
} 
+0

ありがとう@MichealAkermanあなたの答えはいくつかの私の問題を解決したが、私は、表示された図形と一緒に画面上にボタンを残すしたい。 –

関連する問題