📄 surveyservlet.java
字号:
// SurveyServlet.java
// A Web-based survey that invokes the Vote Web service
// from a servlet.
package com.deitel.jws1.jaxrpc.client.proxy;
// Java core packages
import java.io.*;
import java.util.*;
import java.net.URL;
// Java extension packages
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.rpc.*;
import javax.xml.namespace.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
// third-party packages
import org.w3c.dom.*;
// xrpcc generated stub packages
import vote.Vote;
public class SurveyServlet extends HttpServlet {
// 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(
"/surveyProxy.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" );
// attempt to process a vote and display current results
try {
// specify service WSDL URL
URL serviceWSDLURL = new URL( "http://localhost:8080/" +
"jaxrpc-VoteService/endpoint/VoteService?WSDL" );
// specify service QName
QName serviceQName = new QName(
"http://www.deitel.com/VoteService.wsdl/VoteService",
"VoteService" );
// get Service object from SUN's Service implementation
Service service =
ServiceFactory.newInstance().createService(
serviceWSDLURL, serviceQName );
// specify service port QName
QName portQName = new QName(
"http://www.deitel.com/VoteService.wsdl/VoteService",
"VotePort" );
// get dynamic proxy
Vote proxy = ( Vote ) service.getPort(
portQName, vote.Vote.class );
// get vote information from server
String result = proxy.addVote( name );
StringTokenizer voteTokens =
new StringTokenizer( result );
// 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
// catch connection and XML parser exceptions
catch ( Exception exception ) {
exception.printStackTrace();
}
} // 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 generate XML
// 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 SurveyServlet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -