Tomcat服务器自动加载监听器
来源:互联网 发布:千人基因组数据库使用 编辑:程序博客网 时间:2024/06/05 00:07
为了在Tomcat启动服务时,开始监听某个端口,使用ServletContextListener在服务器启动和关闭时创建和关闭socket服务器。
1. 在web.xml配置监听器:
<listener> <description>Socket服务随web启动而启动</description> <listener-class>com.testSocket.SocketListener</listener-class> </listener>2. 监听器类
原本是使用注入的方式,从而避免直接获取数据库连接的方式来保存端口取到的数据,实际上,Tomcat不能检测到Spring容器,而是通过反射生成监听器实例,而将监听器类注入到Spring中,Spring容器里面也存在一个监听器实例,Tomcat自己创建的实例根本用不了Spring注入的内容,所以不能采用注入的方式。
public class SocketListener implements ServletContextListener {SocketProcessor process = new SocketProcessor();static Connection conn = null;public void contextDestroyed(ServletContextEvent se) {// 关闭线程try {process.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}public void contextInitialized(ServletContextEvent se) {try {ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(se.getServletContext());DataSource ds = (DataSource) ac.getBean("dataSource");conn = ds.getConnection();process.start();} catch (Exception e) {e.printStackTrace();}}}
3. 数据获取及存储类class SocketProcessor extends Thread {Socket socket = null;ServerSocket serverSocket = null;PreparedStatement pst = null;public void run() {try {serverSocket = new ServerSocket(15000); // 在15000端口监听while (true) {socket = serverSocket.accept();// 获取输入流,读取客户端发送的信息InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);StringBuilder data = new StringBuilder();Scanner scan = new Scanner(isr);boolean done = false;while (!done && scan.hasNext()) {data.append(scan.nextLine());}String[] strs = data.toString().split("/");LineFB fb = SocketDemo1.getLineFBInstance();StringBuilder sql = new StringBuilder();//获取数据库连接Connection conn = SocketListener.conn;sql.append(" inser into tbl_line ('line_no','line_name','note') values(?,?,?)");pst = conn.prepareStatement(sql.toString());for (String str : strs) {Line line = new Line();String[] s = str.split(";");line.setLineNo(s[0].trim() + new Random().nextInt(1000));line.setLineName(new Random().nextInt(1000) + s[1]);//页面formbean表单数据fb.setLineName(line.getLineName());fb.setLineNo(line.getLineNo());fb.setNote(line.getLineName() + " - " + line.getLineNo());pst.setString(1, fb.getLineNo());pst.setString(2, fb.getLineName());pst.setString(3, fb.getNote());pst.addBatch();}//br.close();isr.close();is.close();pst.executeBatch();conn.commit();}} catch (Exception e) {e.printStackTrace();} finally {}}public void close() {try {System.out.println("s=" + socket);if (socket != null) {socket.close();}if (serverSocket != null) {serverSocket.close();}this.stop();System.out.print("socket已经关闭!!!");} catch (IOException e) {e.printStackTrace();}}}4.socket客户端测试类
public class TestSocketClient {private static final String HOST_ID = "127.0.0.1";private static final int HOST_PORT = 15000;public static void main(String[] args) {Socket socket = null;try {while (true) {socket = new Socket(HOST_ID, HOST_PORT);// //获取输入流,读取服务器端传送的数据// InputStream is = socket.getInputStream();// InputStreamReader isr = new InputStreamReader(is);// BufferedReader br = new BufferedReader(isr);// String info = null;// while ((info = br.readLine()) != null) {// System.err.println("收到服务器端信息:" + info);// }// socket.shutdownInput();// 获取输出流,向服务器端反映“已接受到消息”OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os);StringBuilder sb = new StringBuilder();int num = new Random().nextInt(20);sb.append("lineNo_" + num + ";" + num + "_号线/");pw.print(sb);pw.flush();// 关闭资源pw.close();os.close();// br.close();// isr.close();// is.close();if (socket != null) {socket.close();}System.err.println(">>>>>>>" + sb.toString());Thread.sleep(2000);}} catch (UnknownHostException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}}
阅读全文
1 0
- Tomcat服务器自动加载监听器
- Tomcat服务器自动加载监听器(监听器注入Spring Bean)
- Tomcat服务器自动加载监听程序
- 设置Tomcat服务器自动加载web程序
- 设置Tomcat服务器自动加载web程序
- Tomcat服务器自动加载监听程序(转载)
- tomcat监听器ServletContextListener加载web应用数据
- Tomcat 自动加载
- tomcat自动加载问题
- tomcat的自动加载
- tomcat自动加载问题
- tomcat 类自动加载
- tomcat服务器自动开启
- tomcat 自动加载类文件
- tomcat启动时,自动加载
- 关于Tomcat自动加载问题
- 让Tomcat自动加载文件
- Tomcat自动重新加载站点
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数
- 删除大型数据表数据可行性办法
- mysql常用知识点
- HTML常用标签
- Windows下生成txt文件时的换行
- Tomcat服务器自动加载监听器
- 读书笔记_unix网络编程_20170703
- call和apply的区别
- 关于前端js文件校验
- MySQL的安装详细步骤、图解
- 如何更好的设计网页配色
- <load-on-startup>
- python module学习之natsort
- Android