⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diisurveyservlet.java

📁 java web services how to program
💻 JAVA
字号:
// DIISurveyServlet.java
// A Web-based survey that invokes the Web service 
// from a servlet using DII.
package com.deitel.jws1.jaxrpc.client.dii;

// Java core packages
import java.io.*;
import java.util.*;

// Java extension packages
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

// Java XML packages
import javax.xml.rpc.*;
import javax.xml.namespace.QName;
import javax.xml.rpc.encoding.*;

// JWSDP reference implementation
import com.sun.xml.rpc.client.*;
import com.sun.xml.rpc.client.dii.*;
import com.sun.xml.rpc.encoding.*;
import com.sun.xml.rpc.encoding.soap.*;
import com.sun.xml.rpc.soap.streaming.*;

// third-party packages
import org.w3c.dom.*;

public class DIISurveyServlet extends HttpServlet {
   
   // servlet attributes
   private String surveyText;
   private String pageTitle;
   private String submissionIdentifier;
   
   // display survey form
   protected void doGet( HttpServletRequest request,
      HttpServletResponse response )
         throws ServletException, IOException
   {
      // setup response to client
      response.setContentType( "text/html" ); 
      PrintWriter out = response.getWriter();

      // get XML document and transform for browser client
      try {
      
         // get DocumentBuilderFactory for creating 
         // DocumentBuilder (i.e., an XML parser)
         DocumentBuilderFactory factory =
            DocumentBuilderFactory.newInstance();

         // get DocumentBuilder for building DOM tree
         DocumentBuilder builder = 
            factory.newDocumentBuilder();

         // open InputStream for XML document
         InputStream xmlStream = 
            getServletContext().getResourceAsStream(
               "/survey.xml" );

         // create Document based on input XML file
         Document surveyDocument = builder.parse( xmlStream );

         // open InputStream for XSL document
         InputStream xslStream = 
            getServletContext().getResourceAsStream(
               "/surveyDII.xsl" );

         // transform XML document using XSLT
         transform( surveyDocument, xslStream, out );

         // flush and close PrinterWriter
         out.flush();
         out.close();

      } // end try

      // catch XML parser exceptions
      catch( Exception exception ) {
         exception.printStackTrace();
      }

   } // end method doGet
   
   // process survey response
   protected void doPost( HttpServletRequest request,
      HttpServletResponse response )
         throws ServletException, IOException
   {
      // setup response to client
      response.setContentType( "text/html" ); 
      PrintWriter out = response.getWriter();

      // read current survey response
      String name = request.getParameter( 
         "favoriteLanguage" );

	  // read service endpoint
	  String endpoint = request.getParameter( "endpoint" );

      // attempt to process vote and display current results
      try {

         // QName for xml representation of string
         QName xmlString = new QName( 
            "http://www.w3.org/2001/XMLSchema", "string" );

         // QName for service port
         QName servicePort = new QName( 
            "http://www.deitel.com/VoteService.wsdl/VoteService",
            "VotePort" );

         // QName for service name
         QName serviceName = new QName( "VoteService" );

         // get Service object from SUN's Service implementation
         Service service = 
            ServiceFactory.newInstance().createService( 
               serviceName );

         // create Call object 
         Call call = service.createCall();
         call.setPortTypeName( servicePort );
         call.setTargetEndpointAddress( endpoint );

         // set call properties
		 call.setProperty( Call.SOAPACTION_USE_PROPERTY, 
            new Boolean( true ) );
         call.setProperty( Call.SOAPACTION_URI_PROPERTY, "" );
         String ENCODING_STYLE_PROPERTY = 
            "javax.xml.rpc.encodingstyle.namespace.uri";
         call.setProperty( ENCODING_STYLE_PROPERTY, 
            "http://schemas.xmlsoap.org/soap/encoding/" );

         // set call operation name and its input and output
		 QName addVoteOperation = new QName( 
            "http://www.deitel.com/VoteService.wsdl/VoteService", 
            "addVote" );
         call.setOperationName( addVoteOperation );
         call.addParameter( "String_1", xmlString, 
            ParameterMode.IN );
         call.setReturnType( xmlString );
         Object[] callInputs = 
            new Object[] { name };

         // invoke addVote method 
         String callOutput = ( String ) call.invoke(
            addVoteOperation, callInputs );
		 
		 StringTokenizer voteTokens = 
            new StringTokenizer( callOutput );

         // get DocumentBuilderFactory for creating 
         // DocumentBuilder (i.e., an XML parser)
         DocumentBuilderFactory factory =
            DocumentBuilderFactory.newInstance();

         // get DocumentBuilder for building DOM tree
         DocumentBuilder builder = 
            factory.newDocumentBuilder();

         // create Document (empty DOM tree)
         Document resultDocument = builder.newDocument();

         // generate XML from result and append to Document
         Element resultElement = generateXML( 
            voteTokens, resultDocument );
         resultDocument.appendChild( resultElement );

         // open InputStream for XSL document
         InputStream xslStream =
            getServletContext().getResourceAsStream(
               "/surveyresults.xsl" );

         // transform XML document using XSLT
         transform( resultDocument, xslStream, out );

         // flush and close PrintWriter
         out.flush();
         out.close();

      } // end try

      // return error page on exception
      catch ( Exception exception ) {
         exception.printStackTrace();
         out.println( "<title>Error</title>" );
         out.println( "</head>" );  
         out.println( "<body><p>Error occurred: " );
		 out.println( exception.getMessage() );
         out.println( "</p></body></html>" );
         out.close();
      }

   }  // end method doPost 

    // generate vote information XML representation
   private Element generateXML( StringTokenizer voteTokens,
      Document document )
   {
      // create root element
      Element root = document.createElement( "surveyresults" );

      Element language;
      Element name;
      Element vote;

      // create language element for each language
      while ( voteTokens.hasMoreTokens() ) {
         language = document.createElement( "language" );
         name = document.createElement( "name" );
         name.appendChild( document.createTextNode( 
            voteTokens.nextToken() ) );

         language.appendChild( name );
         vote = document.createElement( "vote" );
         vote.appendChild( document.createTextNode(
            voteTokens.nextToken() ) );
         language.appendChild( vote );
         root.appendChild( language );
      }

      return root; // return root element

   } // end method generateXML

   // transform XML document using XSLT InputStream
   // and write resulting document to PrintWriter
   private void transform( Document document, 
      InputStream xslStream, PrintWriter output )
   {
      // transform XML to XHTML
      try {
         
         // create DOMSource for source XML document
         Source xmlSource = new DOMSource( document );

         // create StreamSource for XSLT document
         Source xslSource = new StreamSource( xslStream );

         // create StreamResult for transformation result
         Result result = new StreamResult( output );

         // create TransformerFactory to obtain Transformer
         TransformerFactory transformerFactory = 
            TransformerFactory.newInstance();

         // create Transformer for performing XSL transformation
         Transformer transformer =
            transformerFactory.newTransformer( xslSource );

         // perform transformation and deliver content to client
         transformer.transform( xmlSource, result );

      } // end try

      // handle exception when transforming XML document
      catch( TransformerException exception ) {
         exception.printStackTrace( System.err );
      }

   } // end method transform

} // end class DIISurveyServlet

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -