用Intellij Idea创建简单的Servlet

Servlet作为Java服务端程序,使用起来还是挺方便的,下面是具体配置过程,我用的是Intellij Idea。

1. 做好必要准备,Intellij Idea(或者Eclipse for J2EE)、JDK、Tomcat这些工具一个都不能少

2. 新建一个Web项目,IDE会帮我们自动生成src、web、web-inf这些文件目录,还有配置文件web.xml。我们的后端java代码一般放在src下面,JSP文件放在web目录下,jar包这些额外的库文件放在WEB-INF/lib目录下(lib目录是我自己新建的,然后右键add as library),web.xml直接放在WEB-INF下面。

用Intellij Idea创建简单的Servlet

3. 首先,我们要配合tomcat,让index.jsp可以跑起来。打开index.jsp,右键点击run 'index.jsp',如果没有这个选项,说明你还没配置好tomcat这个应用容器。要配置tomcat,打开File->Setting,进入设置界面,搜索‘server’,找到application server,然后就可以添加tomcat了。然后打开项目属性设置界面,这里是点击项目,按下F4即可。在Intellij idea中是选择左侧的modules,右侧查看dependencies,点击add->library可以添加tomcat,这里也可以添加第三方jar包。添加好了tomcat和jdk,index.jsp就可以run了。

用Intellij Idea创建简单的Servlet

4. jsp只是简单的网页嵌入了java代码,最终还是被编译成了Servlet实例。而我们要做的Servlet作为J2EE的重要部分,简单的理解就是一个java类,可以有很多实例,负责响应用户请求。当然,也有用JavaBean的,我这里暂且不说,毕竟复杂的java应用都会选用一些成熟的框架。

5. 好了,如果一切无误,就对准src文件目录新建一个package,然后新建一个Servlet类,IDE会自动生成doPost和doGet方法。新建好Servlet后,IDE还修改了web.xml文件,我们还要添加servlet-mapping节点,下面是配置好的web.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!-- 处理支付回调 -->
    <servlet-mapping>
        <servlet-name>PayCallBackServlet</servlet-name>
        <url-pattern>/PayCallback</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>PayCallBackServlet</servlet-name>
        <servlet-class>com.sh.server.PayCallBackServlet</servlet-class>
    </servlet>
</web-app>

首先看到servlet-mapping,这里的url-pattern就是用户访问方式了,这里是http://localhost:8080/PayCallback。当tomcat接收到这样的http请求时,就去web.xml查找url-pattern,如果有这个/PayCallback,那么对应的servlet-name就找到了,再按照它查找到servlet-class是com.....PayCallBackServlet这个类。所以,我们要怎么处理请求,就在这个类的doPost和doGet方法里做就行了,这两个方法的区别自己查吧。

6. 如果是做实验,可以在doGet方法中加入以下代码查看效果。要重启tomcat或点击更新才能看到新内容。

PrintWriter out =response.getWriter();
out.println("<html>");
out.println("<head><title>Servlet展示页</title></head>");
out.println("<body>name:" + "<br/> sex: " +"</body>");
out.println("</html>");

7. 通常我们都需要操作数据库,这里以MariaDB或者MySQL为例,下面是一个封装好的jdbc工具,但前提是你要导入用于jdbc的jar包,我这里用的是MariaDB版的。

public class JDBCUtil {

    //private final static String DB_DRIVER = "com.mysql.jdbc.Driver";
    private final static String DB_DRIVER = "org.mariadb.jdbc.Driver";
    private final static String DB_URL = "jdbc:mysql://localhost:3306/";
    private final static String DB_NAME = "root";
    private final static String DB_PWd = "admin";

    static {
        try {
            Class.forName(DB_DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(DB_URL, DB_NAME, DB_PWd);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static Statement getStatement(Connection conn) {
        Statement stmt = null;
        try {
            stmt = conn.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return stmt;
    }

    public static PreparedStatement getPreparedStatement(Connection conn, String sql) {
        PreparedStatement pstmt = null;
        try {
            pstmt = conn.prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return pstmt;
    }

    public static ResultSet getRs(Statement stmt, String sql) {
        ResultSet rs = null;
        try {
            rs = stmt.executeQuery(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

    public static void close(Statement stmt) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

8. 现在试着用这个JDBCUtil工具来做点实际的操作吧,前提是你安装好了数据库,下面是个创建新表的例子,其实就是执行sql语句。

public void createTable(){

    String sql_drop = "drop table if exists " + DBNAME + "." + TABLENAME;
    String sql_create = "create table "+ DBNAME + "." + TABLENAME+"(id varchar(10) primary key,name varchar(10))";

    Connection conn = JDBCUtil.getConnection();
    Statement stmt = JDBCUtil.getStatement(conn);

    try {
        stmt.execute(sql_drop);
        stmt.execute(sql_create);
    } catch (SQLException e) {
        e.printStackTrace();
    }finally{
        JDBCUtil.close(conn);
        JDBCUtil.close(stmt);
    }
}

 

下面是建好表后,插入一行的代码。这里可以根据参数,批量插入不同的数据。

String sql_add = "insert into "+ DBNAME + "." +TABLENAME + " values(?,?)";
Connection conn = JDBCUtil.getConnection();
PreparedStatement pstmt = JDBCUtil.getPreparedStatement(conn, sql_add);

try {
    pstmt.setString(1, "0");
    pstmt.setString(2, "q");
    conn.setAutoCommit(false);//若改为true 插入中遇到主键冲突还会继续插入,具体看需求
    pstmt.addBatch();
    pstmt.executeBatch();
    conn.commit();
} catch (SQLException e) {
    e.printStackTrace();
}finally {
    JDBCUtil.close(conn);
    JDBCUtil.close(pstmt);
}

 

 

更多相关文章
  • Oracle数据库的表空间管理可以说是非常简单和基础的一项维护工作,但是越简单的事情就越要制定统一的规范,这样数据库的各项管理工作才会愈加的简单高效. 那么接下来,问题来了..Q1:当我们接手一个新项目,有哪些规范可以参考? 1. 不要试图使用任何系统自带的表空间作为你的业务表空间 2. 数据表空间 ...
  •     下载地址:http://files.cnblogs.com/Imageshop/ImageShop.rar     一款体积小,能绿色执行,又功能丰富的图像处理软件.     Imageshop2.3为单EXE文件,大小只有1100多KB,对于目前任何移动设备来说这个大小都是小菜一碟.功能融 ...
  • 据国外媒体报道,全美互惠保险公司(Nationwide Mutual Insurance Company,以下简称Nationwide)对外声明,承认其在今年十月份曾遭受黑客攻击.该公司怀疑此次攻击可能来自美国以外的黑客. 据华盛顿邮报报道,此次攻击是通过该公司与其合作伙伴Allied Insura ...
  • 近日,启明星辰apt研究团队获取最新安全漏洞sandworm(沙虫)漏洞,该漏洞编号为cve-2014-4114.经过样本分析发现,该漏洞影响windowsvista.windows7等以上操作系统.   该漏洞属于windows的逻辑漏洞,传播的文件载体无需任何shellcode.木马,导致基于检 ...
  • HAVING 条件子句 指定一特定的分组记录,并满足HAVING 所指定的条件或状态,但条件是针对分组的条件设置. SELECT fieldlist FROM table WHERE selectcriteria GROUP BY groupfieldlist HAVING groupcriteri ...
  • GameCrush.com:玩游戏的约会网站 即便互联网目前正在更深入地改变人们工作和生活的方式,但毫无疑问的是,互联网最为根本的需求之一就是娱乐.网络游戏.休闲小游戏是最为典型的娱乐方式,不过目前大多数玩家都是男性,为了促就更多女性玩家.让游戏更好玩,GameCrush.com网站希望将约会.游戏 ...
一周排行
  • TOPOT的衬衣质量较差在天猫"topot蓝莓专卖店"买了两件衬衣,其中一件,只穿了两次,衬衣袖口就开始脱线,而且是内外皆脱线,质量真的不满意.1.袖口处里面脱线2.袖口处里面脱线3.袖口处外面脱 ...
  • 如果要模拟跨域名访问数据/调用数据,这时候需要配置多站点的形式来测试...那么怎么配置呢? 第一步先添加站点,打开F:\wamp\bin\apache\Apache2.2.21\conf\extra\httpd-vh ...
  • Windows CMD命令大全   命令简介 cmd是command的缩写.即命令行 .     虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳 ...
  • HTML5 发展中的命名约定和微格式. 2004年5月29日,在我退休的博客和所有的大话 ,当我调查40个设计师的网站,看看他们为公共页面元素使用的约定,如标题和横幅,导航,内容和页脚(那时候的结果 ). 这几乎不是 ...
  • 认证时写的申请材料:      程序猿一枚毕业于南开工作于上海.喜欢读书,喜欢跑步,激情似火,心静如水.      喜欢编程,喜欢寻根问底各种技术,喜欢在各种新技术中汲取营养.      喜欢分享,因此以一些高质量的 ...
  • CentOS启动提示unexpected inconsistency;RUN fsck MANUALLY解决   CentOS服务器出了问题了,提示如下:    unexpected inconsistency;RU ...
  • MySQL4.1的latin1编码与中文.藏文乱码解决方案 MySQL4.1中字符串的编码是latin1,对中文.藏文支持都有问题,常常导致乱码. 这个问题明明是MySQL历史遗留的BUG,可是MySQL4已经在运营 ...
  • Prepared for New Acmer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...
  • 帝国cms是很好的建站工具,一般都是安装在根目录,但是有时候租一个空间,要搭建两个网站,或者中英文双语的网站,肯定得用到二级目录 帝国cms安装二级目录步骤 1,讲安装包解压缩到要安装的二级目录下2,通过浏览器访问二 ...
  • 回想一下,以前我们不得不花费大量时间去优化页面内容(图片.CSS等等),如今用户有更快速的互联网链接,我们似乎能够使用更大的图像或更大的闪存文件,里面包含的有视频或者图片.然而,随着移动开发的兴起,我们又回到了过去的 ...