📄 diisurveyservlet.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 + -