الانتقال إلى المحتوى

How To Hide Parameters In Servlet Url


m_rashad2

Recommended Posts

السلام عليكم ورحمة الله وبركاته

 

عندي مشكلة بعد طباعة التقرير باإستخدام Servlet يظهر عنوان التقرير بكامل ال parameters الخاصة بالتقرير وأريد إخفائها أو تشفير العنوان

 

وقبل انا استخدم ال servlet كنت أستخدم الطباعة عن طريق ال bean  ولكن عند الطباعة على صفحة jsff لا يقوم بالطباعة وأستخدمة بعد ذلك ال servlet وأيضا لكي يظهر التقرير فى صفحة منفصلة ويعمل بشكل طبيعيى ولكن اريد تشقير ال url لانه يظهر بالكامل

 

هل هناك حل ؟؟

 

كود ال servlet

package hrss.view;

import hrss.model.app.AppModuleImpl;

import java.io.ByteArrayOutputStream;
import java.io.File;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;


import java.util.HashMap;
import java.util.Locale;
import java.util.Map;


import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.util.SimpleFileResolver;
import net.sf.jasperreports.engine.xml.JRXmlLoader;


import oracle.jbo.client.Configuration;


@WebServlet(name = "DefineLtrRepServlet", urlPatterns = { "/defineltrrepservlet" })
public class DefineLtrRepServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";


    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

     protected Connection getConnection() {

        PreparedStatement st = null;
        String amDef = "hrss.model.app.AppModule";
        String config = "AppModuleLocal";
        AppModuleImpl am = (AppModuleImpl) Configuration.createRootApplicationModule(amDef, config);

        st = am.getDBTransaction().createPreparedStatement("select 1 from dual", 0);
        Connection conn = null;

        try {
            conn = st.getConnection();
            return conn;
        } catch (SQLException e) {
        }

        return null;
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
        //String var0 = "";
        String pSctrId = "";
        String pMgrType = "";
        String pMgrName = "";
        String pLetterType = "";
        String pLetterTo = "";
        try {
            pSctrId = request.getParameter("pSctrId");
            pMgrType = request.getParameter("pMgrType");
            pMgrName = request.getParameter("pMgrName");
            pLetterType = request.getParameter("pLetterType");
            pLetterTo = request.getParameter("pLetterTo");
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.setContentType(CONTENT_TYPE);
        Map parameters = new HashMap();
        parameters.put("format", "pdf");
        String reportsDirPath = this.getServletContext().getRealPath("/Reports/");
        parameters.put("WEBDIR", reportsDirPath);

        System.out.println("reportsDirPath Desc :" + reportsDirPath.toString());
        File reportsDir = new File(reportsDirPath);
        System.out.println("File Desc : file here");

        parameters.put(JRParameter.REPORT_FILE_RESOLVER, new SimpleFileResolver(reportsDir));

        parameters.put("REPORT_LOCALE", new Locale("ar"));

        parameters.put("pSctrId", Integer.valueOf(pSctrId));
        parameters.put("pMgrType", Integer.valueOf(pMgrType));
        parameters.put("pMgrName", new String(pMgrName));
        parameters.put("pLetterType", Integer.valueOf(pLetterType));
        parameters.put("pLetterTo", new String(pLetterTo));
        Connection conn = null;
        InputStream is = null;
        OutputStream out = null;
        try {
            conn = getConnection();
            is = getServletContext().getResourceAsStream("/Reports/" + "HrDefineLtr.jrxml");

            response.setContentType("application/pdf");
            // If we want it to view in pdf viewer
            //response.addHeader("Content-Disposition", "attachment; filename=HrDefineLtr.pdf");
            response.setHeader("Cache-Control", "max-age=0");

            
            JasperDesign jasperDesign = null;
            try {
                jasperDesign = JRXmlLoader.load(is);
                
            } catch (JRException e) {
                // TODO: Add catch code
                System.out.println("error 2  : " + e.getMessage());
            }

            JasperReport jasperReport = null;

            try {
                jasperReport = JasperCompileManager.compileReport(jasperDesign);
                //
                jasperReport = (JasperReport)JRLoader.loadObject(is);
                //
               // report.setWhenNoDataType(WhenNoDataTypeEnum.NO_DATA_SECTION);
            } catch (JRException e) {
                // TODO: Add catch code
                System.out.println("error 3  : " + e.getMessage());
            }            
            
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
            //ByteArrayOutputStream baos = new ByteArrayOutputStream();
            
            
            //ServletOutputStream out = response.getOutputStream();
            
            out = response.getOutputStream();
            
            // If we want it to view in pdf viewer
            //JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
            
            
            //JasperExportManager.exportReportToPdfStream(jasperPrint, baos);
            
            JRExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
            
                exporter.exportReport();            
            
            //out.write(baos.toByteArray());
           
           
           // out.flush();
            //out.close();

            //conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            
            if (out != null) {
                try {
                    closeConnection(conn);
                    out.flush();
                    out.close();
                    if (is != null) {
                        is.close();
                    }                    
                } catch (Exception ex) {
                    System.out.println(ex.getMessage());
                   
                }
            }            
         }
        
          
        // If we want it to view in pdf viewer
/*
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>ReportServlet</title></head>");
        out.println("<body>");
        out.println("<p>The servlet has received a GET. This is the reply.</p>");
        out.println("</body></html>");
        out.close();
*/
    }

    protected static void closeConnection(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (Exception ex) {
              System.out.println("Developer Msg : Exception in printReport1Servlet.closeConnection()");
        }
    }
}

كود ال XML

<af:button text="Define Letter" id="b2" targetFrame="_blank"
                               partialSubmit="true" partialTriggers="soc2 soc3 ItLetterAppName ItLetterTo"
                               binding="#{backingBeanScope.EmpServices.b3}"
                               disabled="#{bindings.DefineTypeName.inputValue == null || bindings.DefineAppName.inputValue == null ? true : false}"
                               />

كود ال Bean

    public void Ltrtoggle(ValueChangeEvent vce) {
                if (vce.getNewValue()!= null){
            pLetterTo = vce.getNewValue().toString();
            b3.setDestination(getDestination() + "&pLetterTo=" + pLetterTo +"");
        }
    }

    public String getDestination() {
        getRepParam();
        try {
            url =
                "/defineltrrepservlet?pSctrId=" + pSctrId + "&pMgrType=" + pMgrType + "&pMgrName=" + pMgrName +
                "&pLetterType=" + pLetterType + "";            
        } catch (Exception e) {
            // TODO: Add catch code
            url = null;
            e.printStackTrace();
        }
        return url;
    }


    public void getRepParam() {
        try {
            BindingContext lBindingContext = BindingContext.getCurrent();
            BindingContainer bindings = lBindingContext.getCurrentBindingsEntry();

            AttributeBinding attrLetterTypeId = (AttributeBinding) bindings.getControlBinding("DefineTypeId1");
            AttributeBinding attrMgrTypeId = (AttributeBinding) bindings.getControlBinding("DefineAppId1");
            AdfFacesContext adfFacesContext = AdfFacesContext.getCurrentInstance();
            Map pageFlowScope = adfFacesContext.getPageFlowScope();
            
            pSctrId = (Integer) pageFlowScope.get("SctrId");
            if (attrLetterTypeId.getInputValue() != null) {
                pLetterType = (Integer) attrLetterTypeId.getInputValue();
            }
            if (itLtrTo.getValue() != null){
            //if (itLtrTo.getValue() != null) {
                //pLetterTo = itLtrTo.getValue().toString();
                pLetterTo = itLtrTo.getValue().toString();
            }
            if (attrMgrTypeId.getInputValue() != null) {
                pMgrType = (Integer) attrMgrTypeId.getInputValue();
            }
            if (itLtrAppName.getValue() != null) {
                pMgrName = itLtrAppName.getValue().toString();
            }
            /*
            System.out.println("pSctrId Desc :" + String.valueOf(pSctrId));
            System.out.println("pLetterType Desc :" + String.valueOf(pLetterType));
            System.out.println("pLetterTo Desc :" + String.valueOf(pLetterTo));
            System.out.println("pMgrType Desc :" + String.valueOf(pMgrType));
            System.out.println("pMgrName Desc :" + String.valueOf(pMgrName));
            */
        } catch (Exception e) {
            // TODO: Add catch code
            e.printStackTrace();
        }

    }
رابط هذا التعليق
شارك

طبيعى لازم يظهر ف ال url لانك بتبعت القيم ف ال request وبتستقبل ال parameters دى وتشتغل عليها
الافضل انك تبعتها من خلال Map 
مثال 
 

 pSctrId = request.getParameter("pSctrId");
            pMgrType = request.getParameter("pMgrType");
            pMgrName = request.getParameter("pMgrName");
            pLetterType = request.getParameter("pLetterType");
            pLetterTo = request.getParameter("pLetterTo");

بدلها ب 
 

 Map param = (Map) request.getSession().getAttribute("MapParam");

ال param تبعتها ع طول ف السطر ده
 

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, conn);

طيب انا عاوز املا المتغيرات بتاعتى قبل ما انادى ع سيرفرت ده بتاع التقرير 
 fill variables and values and set it in Map in Bean
 

 Map map = new LinkedHashMap();
 map.put("bellNo", bellNo1.bigDecimalValue());
 map.put("bellNo2", bellNo2.bigDecimalValue());
map.put("bellNo2", bellNo3.bigDecimalValue());
 public  void runMyJasperReport(String repprtPath, Map params)
  { 
    try
    {
      FacesContext context = FacesContext.getCurrentInstance();
      String url = "/MyJasperservlet";
      ADFJSFUtils.storeOnSession("MapParam", param);
      String contextPath = context.getExternalContext().getRequestContextPath();
      System.out.println("contextPath " + contextPath);
      ExtendedRenderKitService erks =
        (ExtendedRenderKitService) Service.getRenderKitService(context, ExtendedRenderKitService.class);
      StringBuilder script = new StringBuilder();
      script.append("window.open(\"" + contextPath + url + "\");");
    erks.addScript(FacesContext.getCurrentInstance(), script.toString());

    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

فانت كده بتنفذ الموجود  فالسيرفلت بدون ما ترسل parameters  شغال sesscionScope variables

 

رابط هذا التعليق
شارك

طبيعى لازم يظهر ف ال url لانك بتبعت القيم ف ال request وبتستقبل ال parameters دى وتشتغل عليها

الافضل انك تبعتها من خلال Map 

مثال 

 

 pSctrId = request.getParameter("pSctrId");
            pMgrType = request.getParameter("pMgrType");
            pMgrName = request.getParameter("pMgrName");
            pLetterType = request.getParameter("pLetterType");
            pLetterTo = request.getParameter("pLetterTo");

بدلها ب 

 

 Map param = (Map) request.getSession().getAttribute("MapParam");

ال param تبعتها ع طول ف السطر ده

 

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, conn);

طيب انا عاوز املا المتغيرات بتاعتى قبل ما انادى ع سيرفرت ده بتاع التقرير 

 fill variables and values and set it in Map in Bean

 

 Map map = new LinkedHashMap();
 map.put("bellNo", bellNo1.bigDecimalValue());
 map.put("bellNo2", bellNo2.bigDecimalValue());
map.put("bellNo2", bellNo3.bigDecimalValue());
 public  void runMyJasperReport(String repprtPath, Map params)
  { 
    try
    {
      FacesContext context = FacesContext.getCurrentInstance();
      String url = "/MyJasperservlet";
      ADFJSFUtils.storeOnSession("MapParam", param);
      String contextPath = context.getExternalContext().getRequestContextPath();
      System.out.println("contextPath " + contextPath);
      ExtendedRenderKitService erks =
        (ExtendedRenderKitService) Service.getRenderKitService(context, ExtendedRenderKitService.class);
      StringBuilder script = new StringBuilder();
      script.append("window.open(\"" + contextPath + url + "\");");
    erks.addScript(FacesContext.getCurrentInstance(), script.toString());

    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

فانت كده بتنفذ الموجود  فالسيرفلت بدون ما ترسل parameters  شغال sesscionScope variables

 

الكلام دا كويس جدا  يا مهندس أحمد بس فيه import مش موجود خاص بال ADFJSFUtils

 

انا ممكن ابعتها فى ال session كدا ولا لازم استخدم ال class دا

cont.getExternalContext().getSessionMap().put("Mymap", Map);

بس حابب أجرب الطريقة دي بالكامل

 

حابب اعرف ال class دا لو تكرمت علشان اجرب والطريقة دي هتطلع التقرير فى tap  تاني ولا  popup ؟ وسؤال كمان والأفضل استخد كدا button  ولا commandbutton ؟

تم تعديل بواسطة m_rashad2
رابط هذا التعليق
شارك

 

طبيعى لازم يظهر ف ال url لانك بتبعت القيم ف ال request وبتستقبل ال parameters دى وتشتغل عليها

الافضل انك تبعتها من خلال Map 

مثال 

 

 pSctrId = request.getParameter("pSctrId");
            pMgrType = request.getParameter("pMgrType");
            pMgrName = request.getParameter("pMgrName");
            pLetterType = request.getParameter("pLetterType");
            pLetterTo = request.getParameter("pLetterTo");

بدلها ب 

 

 Map param = (Map) request.getSession().getAttribute("MapParam");

ال param تبعتها ع طول ف السطر ده

 

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, conn);

طيب انا عاوز املا المتغيرات بتاعتى قبل ما انادى ع سيرفرت ده بتاع التقرير 

 fill variables and values and set it in Map in Bean

 

 Map map = new LinkedHashMap();
 map.put("bellNo", bellNo1.bigDecimalValue());
 map.put("bellNo2", bellNo2.bigDecimalValue());
map.put("bellNo2", bellNo3.bigDecimalValue());
 public  void runMyJasperReport(String repprtPath, Map params)
  { 
    try
    {
      FacesContext context = FacesContext.getCurrentInstance();
      String url = "/MyJasperservlet";
      ADFJSFUtils.storeOnSession("MapParam", param);
      String contextPath = context.getExternalContext().getRequestContextPath();
      System.out.println("contextPath " + contextPath);
      ExtendedRenderKitService erks =
        (ExtendedRenderKitService) Service.getRenderKitService(context, ExtendedRenderKitService.class);
      StringBuilder script = new StringBuilder();
      script.append("window.open(\"" + contextPath + url + "\");");
    erks.addScript(FacesContext.getCurrentInstance(), script.toString());

    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

فانت كده بتنفذ الموجود  فالسيرفلت بدون ما ترسل parameters  شغال sesscionScope variables

 

الكلام دا كويس جدا  يا مهندس أحمد بس فيه import مش موجود خاص بال ADFJSFUtils

 

انا ممكن ابعتها فى ال session كدا ولا لازم استخدم ال class دا

cont.getExternalContext().getSessionMap().put("Mymap", Map);

بس حابب أجرب الطريقة دي بالكامل

 

حابب اعرف ال class دا لو تكرمت علشان اجرب والطريقة دي هتطلع التقرير فى tap  تاني ولا  popup ؟ وسؤال كمان والأفضل استخد كدا button  ولا commandbutton ؟

 

تستطيع الإرسال في session

رابط هذا التعليق
شارك

 

 

استخدم post بدلاً من get

انا مستخدم post  يا مهندس مصطفي

 

إذن لا يمكن أن تظهر في url

 

 

 

بس لو حضرتك خدت بالك فى الكود انا بستخدم post ومع ذلك بتظهر بالكامل عموما انا هجرب موضوع ال session واشوف

تم تعديل بواسطة m_rashad2
رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية