необходимо передать строку внутри метода переопределения, эта строка не может быть глобальной строкой как - PullRequest
0 голосов
/ 18 октября 2019

Я читаю по именам файлов корневого пути для моего wesbite, java shuold читает и записывает в xml файл. Мне не нужно писать некоторые имена файлов в XML-файле. Строка имен файлов генерируется в моем методе createXMLNode. Это переменная расположения String. Мне нужна эта переменная в моем методе doget, чтобы указать, какие имена файлов записать в xml sitemap, который я генерирую для своего сайта. У меня есть строка, которую я должен передать внутри переопределенного метода. Эта строка не может быть глобальной переменной

@Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter out = response.getWriter();

        ResourceResolver resourceResolver = request.getResourceResolver();
        String sitemapRootPath = rootPath;

        LOG.info("sitemapRootPath from servlet = " + sitemapRootPath);
        Resource resource = resourceResolver.getResource(sitemapRootPath);
        if(resource != null) {
            response.setContentType("text/xml;charset=UTF-8");
            Page page = resource.adaptTo(Page.class);
            Iterator<Page> pageIterator = page.listChildren();


            //Initializing the XML document before writing data into the file
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder;
            try {
                LOG.info("Inside Try");
                builder = factory.newDocumentBuilder();
                Document document = builder.newDocument();

                Element rootElement = document.createElement("urlset");
                rootElement.setAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
                document.appendChild(rootElement);




                for(int i = 0; i < staticPageData.length; i ++) {
                    createXMLNodeForStaticPages(document, rootElement, request, staticPageData[i]);
                }






                while(pageIterator.hasNext()) {

                        createXMLNode(document, rootElement, request, pageIterator);


                }



    }

Другой метод вызывается внутри цикла while, но этот метод также генерирует мою строку, которая мне нужна. Значение местоположения String - это то, что мне нужно внутри моего метода doget.

public void createXMLNode(Document document, Element rootElement, SlingHttpServletRequest request, Iterator<Page> pageIterator) {
        Element headElement = document.createElement("url");
        Element locElement = document.createElement("loc");
        Element lastModElement = document.createElement("lastMod");
        Element changefreqElement = document.createElement("changefreq");
        Element priorityElement = document.createElement("priority");

        Node locElementNode = locElement;
        Node lastModElementNode = lastModElement;
        Node changefreqElementNode = changefreqElement;
        Node priorityElementNode = priorityElement;

        Page childPage = pageIterator.next();
        locElementNode.setTextContent(request.getScheme() + "://" + request.getServerName() + childPage.getPath());
        LOG.error("childPage.getLastModified()" + childPage.getLastModified());
        if(null != childPage.getLastModified()) {
            Date date = childPage.getLastModified().getTime();
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
            try {
                dateFormat.parse("2019-07-15");
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            lastModElementNode.setTextContent(dateFormat.format(date));
        }

        changefreqElementNode.setTextContent("weekly");
        String location = request.getScheme() + "://" + request.getServerName() + childPage.getPath();
        locElementNode.setTextContent(location);




        rootElement.appendChild(headElement);
        headElement.appendChild(locElementNode);
        headElement.appendChild(lastModElementNode);
        headElement.appendChild(changefreqElementNode);
        headElement.appendChild(priorityElementNode);

        Iterator<Page> childPageIterator =  childPage.listChildren();
        while(childPageIterator.hasNext()) {

                createXMLNode(document, rootElement, request, childPageIterator);

        }
        priorityElementNode.setTextContent(getPriority(location));
    }

Как я могу получить это значение внутри этого метода или я должен создать отдельный метод и сделать там свой цикл while, поэтому, когда я вызываю этот метод, я могу запустить цикл while со строкой

1 Ответ

0 голосов
/ 18 октября 2019

Параметр doGet сервлета обычно параметризуется путем добавления параметра в HTTP GET: http://localhost/xyz.html?myparam=abc, а затем String myparam = request.getRequestParameter("myparam");.

createXMLNode можно изменить, чтобы он возвращал String, местоположение.

Однако может также случиться так, что вы просто захотите записать текст XML-документа в doGet в ответ.

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