用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网站希望将约会.游戏 ...
一周排行
  • 霍金教授的子女代父亲接受冰水浇头 人民网8月30日讯 据BBC报道,英国科学家史蒂芬·霍金是世界上最著名的运动神经元病患者(MNDA),他也成为接受"冰桶挑战"的最新一位名人.不过,霍金教授的子女 ...
  • 侍魂隐藏人物全攻略 选择方法,喜欢玩侍魂的朋友可以看看 一.激发黑子出战的条件 满足以下任意条件, 黑子就会出现与你决斗: 1.在第6.8.10任意场景中,剩下的时间不足20秒时,使用超必杀技解决对手: 2.或在第6 ...
  •   这个完全违背商业社会庸俗规则的“怪胎”,是黑客对人类社会贡献的重新定义   ■环球财经记者 刘洋   今年,Linux 迎来了它的20岁生日.据称从4月开始,全球各地都在筹划着如何庆祝这一生日.但到底哪一天才是这 ...
  • 5月12日,淘宝发布最新的手机版旺旺.该版旺旺将首先用于淘宝旗下的三款品牌手机:去年12月15日,淘宝推出三款定制品牌手机,分别命名灵素.风云与无双.结合支付宝近期与联通的合作,马云布下的通讯棋局已经悄然亮相,而这可 ...
  • 没事使用代理上了下facebook,注册进入个人首页后,习惯性的查看源代码,发现了1个很有意思的现象,首页内容不少,但源代码中HTML的代码却很少,但去多出了很多段的javascript代码,这些js代码都是用于动态 ...
  • easyui datagrid 定义列的方式通常是: [javascript] $('#grid').datagrid({columns:[[      {field:'f1',title:'字段1',width:1 ...
  • 安装步骤如下: sudo apt-get install vim ; sudo apt-get install vim-youcompleteme ; sudo apt-get install vim-addon-m ...
  • 随着手机游戏行业的迅速爆发,近期凡是进军游戏行业的公司都遭到爆炒.天音控股(829.SZ)在6月26日涨停后,昨日开盘涨停,虽然尾盘被打开,但截至收盘涨幅仍达到8.33%.对此,有分析人士称,主要是公司旗下手机游戏公 ...
  •   --测试代码 if object_id('[tb]') is not null     drop table [tb] go create table tb([a] int,[b] int,[c] int) in ...
  • CentOS 5.5下LAMP环境搭建之源码安装PHP(php-5.4.8)       由于安装CentOS 5.5的设置可能不一样,所以有些软件在系统安装时就顺便安装了.下面的步骤仅供参考.   1.软件准备 p ...