加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用NetBeans开发WebService

发布时间:2020-12-17 00:21:18 所属栏目:安全 来源:网络整理
导读:本文旨在介绍如何使用NetBeans开发一个Web服务。 OS:windows Xp java IDE:NetBeans 7.0.1 日志记录:log4j 数据库:sqlserver2000 一、建立Web项目 1,新建JAVA Web项目 如图-1所示,选择“下一步” 图-1 2,在图-2中填入项目名称,选择正确的项目位置,然

本文旨在介绍如何使用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. import?org.apache.log4j.PropertyConfigurator;??
  11. public?class?InitLog4j?extends?HttpServlet?implements?IConstStr?{??
  12. ????private?static?final?long?serialVersionUID?=?1L;??
  13. void?destroy()?{??
  14. ????????super.destroy();??
  15. ????}??
  16. void?doGet(HttpServletRequest?request,?HttpServletResponse?response)??
  17. ????????????throws?ServletException,?IOException?{??
  18. void?init()?throws?ServletException?{??
  19. ????????String?basePath?=?getServletContext().getRealPath("/");??
  20. ????????String?confFile?=?getInitParameter("log4j");??
  21. ????????String?logPathName?=?basePath?+?"log";??
  22. ????????File?f?=?new?File(logPathName);??
  23. if?(!f.isDirectory())?{??
  24. ????????????f.mkdir();??
  25. ????????}??
  26. ????????if?(confFile?!=?null)?{??
  27. ????????????PropertyConfigurator.configure(basePath?+?confFile);??
  28. ????????}?else?{??
  29. ????????????System.out.println(LOGCONFFILENOTEXISTS);??
  30. ????????}??
  31. ????}??
  32. }??


?

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

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

 

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

三、数据库连接信息配置

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

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


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

copy
    package?com.boss.configuration;??
  1. import?java.sql.Connection;??
  2. import?java.sql.ResultSet;??
  3. import?java.sql.SQLException;??
  4. import?java.sql.Statement;??
  5. import?javax.naming.Context;??
  6. import?javax.naming.InitialContext;??
  7. import?javax.naming.NamingException;??
  8. import?javax.sql.DataSource;??
  9. import?org.apache.log4j.Logger;??
  10. class?JdbcUtilsSing?static?Logger?logger?=?Logger.getLogger(JdbcUtilsSing.class);??
  11. ????private?Connection?conn?=?null;??
  12. static?JdbcUtilsSing?instance?=?null;??
  13. private?JdbcUtilsSing()?{??
  14. static?JdbcUtilsSing?getInstance()?{??
  15. if?(instance?==?synchronized?(JdbcUtilsSing.class)?{??
  16. ???????????????? ????????????????????instance?=?new?JdbcUtilsSing();??
  17. ????????????????}??
  18. ????????????}??
  19. return?instance;??
  20. public?Connection?getConnection()?throws?SQLException?{??
  21. ????????Context?ctx?=? ????????DataSource?ds?=? ????????Context?envctx?=?try?{??
  22. ????????????ctx?=?new?InitialContext();??
  23. ????????????logger.info(DBINITIALCONTEXTSUCC);??
  24. catch?(NamingException?e)?{??
  25. ????????????logger.info(DBINITIALCONTEXTFAIL);??
  26. ????????????throw?new?DaoException(e.getMessage(),?e);??
  27. ????????????envctx?=?(Context)?ctx.lookup("java:comp/env");??
  28. ????????????logger.info(DBJAVAENVSUCC);??
  29. ????????????logger.info(DBJAVAENVFAIL);??
  30. ????????????ds?=?(DataSource)?envctx.lookup("jdbc/Test");//这里的jdbc/Test名字和context.xml文件中写的Resource?name是一致的。??
  31. ????????????logger.info(DBJNDISUCC);??
  32. ????????????logger.info(DBJNDIFAIL);??
  33. ????????????conn?=?ds.getConnection();??
  34. ????????????logger.info(DBCONNSUCC);??
  35. catch?(SQLException?e)?{??
  36. ????????????logger.info(DBCONNFAIL);??
  37. return?conn;??
  38. void?dbFree(ResultSet?rs,?Statement?st,?Connection?conn)?{??
  39. try?{??
  40. if?(rs?!=?null)??
  41. ????????????????????rs.close();??
  42. ????????????????????logger.info(RSCLOSESUCC);??
  43. ????????????????}?catch?(SQLException?e)?{??
  44. ????????????????????logger.info(RSCLOSEFAIL);??
  45. ???????????????????? ????????}?finally?{??
  46. ????????????????if?(st?!=? ???????????????????? ????????????????????????st.close();??
  47. ????????????????????????logger.info(STCLOSESUCC);??
  48. ????????????????????}? ????????????????????????logger.info(STCLOSEFAIL);??
  49. ???????????????????????? ????????????????????}??
  50. ????????????}?if?(conn?!=?null)??
  51. ????????????????????????conn.close();??
  52. ????????????????????????logger.info(DBCONNCLOSESUCC);??
  53. ????????????????????}? ????????????????????????logger.info(DBCONNCLOSEFAIL);??
  54. ???????????????????????? ????????????????????}??
  55. ????????????}??
  56. (3)加入其他类(属于自定义的,不一定按照此种写法)

    copy
      class?DaoException?extends?RuntimeException?{??
    1. public?DaoException()?{??
    2. public?DaoException(String?message)?{??
    3. super(message);??
    4. public?DaoException(Throwable?cause)?{??
    5. super(cause);??
    6. public?DaoException(String?message,?Throwable?cause)?{??
    7. super(message,?cause);??
    8. }??


    ?

    copy
      interface?IConstStr?{??
    1. ????String?DBINITIALCONTEXTSUCC?=?"初始化Context文件成功n";??
    2. ????String?DBINITIALCONTEXTFAIL?=?"初始化Context文件失败n";??
    3. ????String?DBJAVAENVSUCC?=?"系统提取comp/env成功n";??
    4. ????String?DBJAVAENVFAIL?=?"系统提取comp/env失败n";??
    5. ????String?DBJNDISUCC?=?"初始化JNDI成功";??
    6. ????String?DBJNDIFAIL?=?"初始化JNDI失败";??
    7. ????String?DBCONNSUCC?=?"数据库连接建立成功n";??
    8. ????String?DBCONNFAIL?=?"数据库连接建立失败n";??
    9. ??????
    10. ????String?FUNINVOKESUCC?=?"函数%s调用成功n";??
    11. ????String?FUNINVOKEFAIL?=?"函数%s调用失败n";??
    12. ??????
    13. ????String?RSCLOSESUCC?=?"数据集关闭成功n";??
    14. ????String?RSCLOSEFAIL?=?"数据集关闭失败n";??
    15. ????String?STCLOSESUCC?=?"SQL语句关闭成功n";??
    16. ????String?STCLOSEFAIL?=?"SQL语句关闭失败n";??
    17. ????String?DBCONNCLOSESUCC?=?"数据库连接关闭成功n";??
    18. ????String?DBCONNCLOSEFAIL?=?"数据库连接关闭失败n";??
    19. ????String?LOGCONFFILELOADSUCC?=?"Log4j配置文件载入成功";??
    20. ????String?LOGCONFFILELOADFAIL?=?"Log4j配置文件载入失败";??
    21. ????String?LOGCONFFILENOTEXISTS?=?"Log4j配置文件不存在";??
    22. 一个带有日志输出的web服务已经建立,下一步部署在web服务容器中即可

      (编辑:李大同)

      【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读