使用NetBeans开发WebService

本文旨在介绍如何使用NetBeans开发一个Web服务。

OS:windows Xp

java IDE:NetBeans 7.0.1

日志记录:log4j

数据库:sqlserver2000

一、建立Web项目

1,新建JAVA Web项目

如图-1所示,选择“下一步”

图-1

2,在图-2中填入项目名称,选择正确的项目位置,然后点击下一步。

图-2

3,选择java EE版本、服务器

(服务器需要提前在服务器视图中进行定义,我使用的tomcat6.0),如图-3所示,选择“完成”,

图-3

4,图-4显示已经建立一个web项目,META-INF中的context.xml文件中可以编写数据库连接信息。

如果在tomcat中部署Web项目并且使用了context文件存放数据库连接信息,那么有两种方法

(1)程序会首先在META-INF文件夹中去寻找context.xml文件

(2)如果此文件不存在,那么程序将会到TOMCAT_HOME/conf/context.xml中去寻找相关信息。

建议大家在使用META_INF中的context.xml文件,这是被推荐的方法,但这种方法需要在web.xml中添加相关配置信息,下面将会讲到。

图-4

5,建立源文件包com.boss

(悲催,这个图也被截取下来了??好吧,那就写上吧)

图-5

6,在Web项目的基础上建立Web服务,在项目上右键--新建--Web服务,弹出图-7所示

图-6

7,填写Web服务类,选择服务类存在的包位置,点击“完成”

图-7

8,tomcat不支持JSR-109部署方式(至于这是个什么方式我也不清楚,既然不支持那就点击“是吧”)

图-8

9,建立了Web服务的总体显示图,服务类和服务方法都采用了注释的方法。

图-9

10,可以点击类的“设计”按钮,然后添加你需要添加的服务方法。

图-10

 

二、添加日志服务

(1)下载log4j的jar包,加入项目中。

(2)在com.boss包中加入日志服务类,代码如下:

[java]  view plain copy
  1. package com.boss;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. import org.apache.log4j.PropertyConfigurator;  
  12.   
  13. public class InitLog4j extends HttpServlet implements IConstStr {  
  14.   
  15.     private static final long serialVersionUID = 1L;  
  16.   
  17.     public void destroy() {  
  18.         super.destroy();  
  19.     }  
  20.   
  21.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  22.             throws ServletException, IOException {  
  23.     }  
  24.   
  25.     public void init() throws ServletException {  
  26.         String basePath = getServletContext().getRealPath("/");  
  27.         String confFile = getInitParameter("log4j");  
  28.         String logPathName = basePath + "log";  
  29.         File f = new File(logPathName);  
  30.         if (!f.isDirectory()) {  
  31.             f.mkdir();  
  32.         }  
  33.         if (confFile != null) {  
  34.             PropertyConfigurator.configure(basePath + confFile);  
  35.         } else {  
  36.             System.out.println(LOGCONFFILENOTEXISTS);  
  37.         }  
  38.     }  
  39. }  


 

(3)在WEB-INF文件夹中建立log4j.properties文件(此文件可以在web.xml进行配置),加入下列信息

[java]  view plain copy
  1. log4j.rootLogger=INFO,Rolling_file,console  
  2. #表示console的输出是控制台输出  
  3. log4j.appender.console=org.apache.log4j.ConsoleAppender  
  4.   
  5. log4j.appender.console.layout=org.apache.log4j.PatternLayout  
  6.   
  7. log4j.appender.console.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m%n  
  8. #表示Rolling_file输出是滚动文件输出  
  9. Rolling_filelog4j.appender.Rolling_file=org.apache.log4j.RollingFileAppender  
  10.   
  11. log4j.appender.Rolling_file.File=d:/TedaPortalService_log.html  
  12.   
  13. log4j.appender.Rolling_file.MaxFileSize=100KB  
  14.   
  15. log4j.appender.Rolling_file.MaxBackupIndex=1  
  16. log4j.appender.Rolling_file.layout=org.apache.log4j.HTMLLayout  
  17. log4j.appender.Rolling_file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n  
  18. #表示日志输出级别是INFO级别,也就是优先级大约INFO的可以输出,包括INFO,WARN,ERROR,FATAL  
  19. log4j.logger.com.foo=INFO  
(4)在web.xml中加入下面的代码
[java]  view plain copy
  1. <servlet>  
  2.     <servlet-name>InitLog4j</servlet-name>    
  3.         <servlet-class>com.boss.InitLog4j</servlet-class>  
  4.         <init-param>  
  5.             <param-name>log4j</param-name>  
  6.             <param-value>WEB-INF/log4j.properties</param-value>  
  7.         </init-param>    
  8.         <load-on-startup>1</load-on-startup>  
  9. </servlet>  
  10. <!--  
  11. InitLog4j是起一个servlet名字,和提供日志服务的类名一致。  
  12. com.boss.InitLog4j,这个要根据你日志服务类的完整限定名进行更改.  
  13. <param-name>log4j</param-name>这个参数名和代码中String confFile = getInitParameter("log4j")一致,也就是代码中要寻找xml文件中名称log4j的信息,所以二者要一致  
  14. <param-value>WEB-INF/log4j.properties</param-value>,这个参数列出log4j配置文件的位置  
  15. -->  

 

(5)至此,log4j配置就完成,在代码中声明,然后调用即可

三、数据库连接信息配置

(1)连接sqlserver2000,在context.xml文件中加入如下的代码:

[sql]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Context docBase="Test" path="/Test" reloadable="true">  
  3.   
  4. <WatchedResource>WEB-INF/web.xml</WatchedResource>  
  5.   
  6. <Resource name="jdbc/Test" auth="Container" type="javax.sql.DataSource"  
  7.                maxActive="100" maxIdle="30" maxWait="10000"  
  8.                username="sa" password="sa" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"  
  9.                url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=Test" />  
  10. </Context>  


(2)在java源代码中加入数据库建立连接和关闭连接的相关类

[java]  view plain copy
  1. package com.boss.configuration;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7.   
  8. import javax.naming.Context;  
  9. import javax.naming.InitialContext;  
  10. import javax.naming.NamingException;  
  11. import javax.sql.DataSource;  
  12.   
  13. import org.apache.log4j.Logger;  
  14.   
  15. public final class JdbcUtilsSing implements IConstStr {  
  16.   
  17.     private static Logger logger = Logger.getLogger(JdbcUtilsSing.class);  
  18.     private Connection conn = null;  
  19.     private static JdbcUtilsSing instance = null;  
  20.   
  21.     private JdbcUtilsSing() {  
  22.     }  
  23.   
  24.     public static JdbcUtilsSing getInstance() {  
  25.         if (instance == null) {  
  26.             synchronized (JdbcUtilsSing.class) {  
  27.                 if (instance == null) {  
  28.                     instance = new JdbcUtilsSing();  
  29.                 }  
  30.             }  
  31.         }  
  32.         return instance;  
  33.     }  
  34.   
  35.     public Connection getConnection() throws SQLException {  
  36.         Context ctx = null;  
  37.         DataSource ds = null;  
  38.         Context envctx = null;  
  39.   
  40.         try {  
  41.             ctx = new InitialContext();  
  42.             logger.info(DBINITIALCONTEXTSUCC);  
  43.         } catch (NamingException e) {  
  44.             logger.info(DBINITIALCONTEXTFAIL);  
  45.             throw new DaoException(e.getMessage(), e);  
  46.         }  
  47.   
  48.         try {  
  49.             envctx = (Context) ctx.lookup("java:comp/env");  
  50.             logger.info(DBJAVAENVSUCC);  
  51.         } catch (NamingException e) {  
  52.             logger.info(DBJAVAENVFAIL);  
  53.             throw new DaoException(e.getMessage(), e);  
  54.         }  
  55.   
  56.         try {  
  57.             ds = (DataSource) envctx.lookup("jdbc/Test");//这里的jdbc/Test名字和context.xml文件中写的Resource name是一致的。  
  58.             logger.info(DBJNDISUCC);  
  59.         } catch (NamingException e) {  
  60.             logger.info(DBJNDIFAIL);  
  61.             throw new DaoException(e.getMessage(), e);  
  62.         }  
  63.   
  64.         try {  
  65.             conn = ds.getConnection();  
  66.             logger.info(DBCONNSUCC);  
  67.         } catch (SQLException e) {  
  68.             logger.info(DBCONNFAIL);  
  69.             throw new DaoException(e.getMessage(), e);  
  70.         }  
  71.         return conn;  
  72.     }  
  73.   
  74.     public void dbFree(ResultSet rs, Statement st, Connection conn) {  
  75.         try {  
  76.             if (rs != null)  
  77.                 try {  
  78.                     rs.close();  
  79.                     logger.info(RSCLOSESUCC);  
  80.                 } catch (SQLException e) {  
  81.                     logger.info(RSCLOSEFAIL);  
  82.                     throw new DaoException(e.getMessage(), e);  
  83.                 }  
  84.         } finally {  
  85.             try {  
  86.                 if (st != null)  
  87.                     try {  
  88.                         st.close();  
  89.                         logger.info(STCLOSESUCC);  
  90.                     } catch (SQLException e) {  
  91.                         logger.info(STCLOSEFAIL);  
  92.                         throw new DaoException(e.getMessage(), e);  
  93.                     }  
  94.             } finally {  
  95.                 if (conn != null)  
  96.                     try {  
  97.                         conn.close();  
  98.                         logger.info(DBCONNCLOSESUCC);  
  99.                     } catch (SQLException e) {  
  100.                         logger.info(DBCONNCLOSEFAIL);  
  101.                         throw new DaoException(e.getMessage(), e);  
  102.                     }  
  103.             }  
  104.   
  105.         }  
  106.     }  
  107. }  

(3)加入其他类(属于自定义的,不一定按照此种写法)

[java]  view plain copy
  1. package com.boss.configuration;  
  2.   
  3. public class DaoException extends RuntimeException {  
  4.   
  5.     private static final long serialVersionUID = 1L;  
  6.   
  7.     public DaoException() {  
  8.     }  
  9.   
  10.     public DaoException(String message) {  
  11.         super(message);  
  12.     }  
  13.   
  14.     public DaoException(Throwable cause) {  
  15.         super(cause);  
  16.     }  
  17.   
  18.     public DaoException(String message, Throwable cause) {  
  19.         super(message, cause);  
  20.     }  
  21.   
  22. }  


 

[java]  view plain copy
  1. package com.boss.configuration;  
  2.   
  3. public interface IConstStr {  
  4.     String DBINITIALCONTEXTSUCC = "初始化Context文件成功\n";  
  5.     String DBINITIALCONTEXTFAIL = "初始化Context文件失败\n";  
  6.   
  7.     String DBJAVAENVSUCC = "系统提取comp/env成功\n";  
  8.     String DBJAVAENVFAIL = "系统提取comp/env失败\n";  
  9.   
  10.     String DBJNDISUCC = "初始化JNDI成功";  
  11.     String DBJNDIFAIL = "初始化JNDI失败";  
  12.   
  13.     String DBCONNSUCC = "数据库连接建立成功\n";  
  14.     String DBCONNFAIL = "数据库连接建立失败\n";  
  15.       
  16.     String FUNINVOKESUCC = "函数%s调用成功\n";  
  17.     String FUNINVOKEFAIL = "函数%s调用失败\n";  
  18.       
  19.     String RSCLOSESUCC = "数据集关闭成功\n";  
  20.     String RSCLOSEFAIL = "数据集关闭失败\n";  
  21.       
  22.     String STCLOSESUCC = "SQL语句关闭成功\n";  
  23.     String STCLOSEFAIL = "SQL语句关闭失败\n";  
  24.       
  25.     String DBCONNCLOSESUCC = "数据库连接关闭成功\n";  
  26.     String DBCONNCLOSEFAIL = "数据库连接关闭失败\n";  
  27.       
  28.     String LOGCONFFILELOADSUCC = "Log4j配置文件载入成功";  
  29.     String LOGCONFFILELOADFAIL = "Log4j配置文件载入失败";  
  30.       
  31.     String LOGCONFFILENOTEXISTS = "Log4j配置文件不存在";  
  32. }  


一个带有日志输出的web服务已经建立,下一步部署在web服务容器中即可

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值