📄 traderservlet.java
字号:
//声明这个类定义在包examples.jms.trader中
package examples.jms.trader;
//声明这个类引入的其它类或包
import java.io.*;
import javax.naming.*;
import javax.jms.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* 向一个消息主题发送买或卖消息。
* 客户端TraderReceive接收消息并调用EJBean处理消息
*/
public class TraderServlet extends HttpServlet
{
/**
* 定义JMS连接构造器
*/
public final static String JMS_FACTORY="jms.connection.traderFactory";
/**
* 定义JMS主题
*/
public final static String TOPIC="weblogic.examples.jms.exampleTopic";
/**
* service()方法
* @参数 req HTTP servlet 请求对象
* @参数 res HTTP servlet 响应对象
* @异常 IOException I/O 操作发生错误
* @异常 ServletException servlet操作发生错误
*/
public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
//定义变量
String custName;
String tradeType;
String symbol;
int shares;
try {
if (req.getMethod().equals("GET")) {
//如果是“GET“方法
PrintWriter pw = new PrintWriter(res.getOutputStream(),true);
//打印from页,返回到客户端
printForm(pw);
} else {
//否则,该是post方法
//获取请求参数
//用户名
custName = req.getParameterValues("custname")[0];
//交易类型
tradeType = req.getParameterValues("tradetype")[0];
//股票类型
symbol = req.getParameterValues("symbol")[0];
//交易数量
shares = Integer.parseInt(req.getParameterValues("shares")[0]);
//sendTopicMessage是本类定义的方法,向主题发送消息。
sendTopicMessage(custName, tradeType, symbol, shares);
//下面生成返回客户端的html页面
//设置类型
res.setContentType("text/html");
//设置头参数
res.setHeader("Pragma", "no-cache");
PrintWriter pw = new PrintWriter(res.getOutputStream(),true);
//返回html页面
pw.println("<HTML><HEAD><TITLE>Message Status</TITLE></HEAD>");
pw.println("<BODY><img src=images/BEA_Button_Final_web.gif align=right>");
pw.println("Message Submitted");
pw.println("</BODY></HTML>");
pw.close();
return;
}
}
catch (Exception e) {e.printStackTrace();
}
}
/**
* 表单
* @参数 pw print writer
* @异常 Exception 有问题时抛出的异常
*/
public void printForm(PrintWriter pw)
throws Exception
{
//下面向客户端返回html页面,包括一个表单
pw.println("<HTML><HEAD><TITLE>Message Status</TITLE></HEAD>");
pw.println("<BODY>");
pw.println("<p><img src=images/BEA_Button_Final_web.gif align=right>");
pw.println("<FORM METHOD=\"POST\" ACTION=\"./jmstrader\">");
pw.println("<TABLE>");
pw.println("<TR><TD>Customer Name:</TD><TD><INPUT NAME=\"custname\" SIZE=40></TD></TR>");
pw.println("<TR><TD>Trade:</TD>");
pw.println("<TD><select name=tradetype>");
pw.println("<option value=buy selected>Buy");
pw.println("<option value=sell>Sell");
pw.println("</select>");
pw.println("</TR>");
pw.println("<TR><TD>Stock:</TD>");
pw.println("<TD><select name=symbol>");
pw.println("<option value=WEBL selected>BEA Systems");
pw.println("<option value=INTL>Intel Corp");
pw.println("</select>");
pw.println("</TR>");
pw.println("<TR><TD>Number of Shares:</TD><TD><INPUT NAME=\"shares\" SIZE=10></TD></TR>");
pw.println("<TR><TD></TD><TD><INPUT TYPE=\"submit\" VALUE=\"Send Message\"></TD></TR>");
pw.println("</TABLE>");
pw.println("</FORM>");
pw.println("</BODY></HTML>");
pw.close();
}
/**
* 发送主题消息
* @参数 customerName 顾客名
* @参数 tradeType 交易类型
* @参数 symbol 股票代号
* @参数 shares 股票数量
* @异常 NamingException JNDI错误
* @异常 JMSException JMS错误
*/
public void sendTopicMessage(String customerName, String tradeType,
String symbol, int shares)
throws NamingException, JMSException
{
//创建名称服务上下文
Context ctx = new InitialContext();
//声明主题消息连接构造器
TopicConnectionFactory tconFactory;
//声明主题消息连接
TopicConnection connection;
//声明主题消息会话
TopicSession session;
//声明主题消息发布器
TopicPublisher publisher;
//声明主题消息
Topic topic;
//声明消息
MapMessage msg;
//通过JNDI查找主题消息连接构造器
tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
//通过主题消息连接构造器创建连接
connection = tconFactory.createTopicConnection();
//通过主题消息连接创建主题会话
session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
//通过JNDI查找主题消息
topic = (Topic) ctx.lookup(TOPIC);
//通过主题会话创建消息发布器
publisher = session.createPublisher(topic);
//通过主题会话创建消息
msg = session.createMapMessage();
//设置消息对象属性
msg.setString("CustomerName", customerName);
msg.setString("TradeType", tradeType);
msg.setString("Symbol", symbol);
msg.setInt("Shares", shares);
msg.setBooleanProperty("tracing", true);
//发布消息
publisher.publish(msg, DeliveryMode.PERSISTENT, 9, 0);
//关闭对象
publisher.close();
session.close();
connection.close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -