用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网站希望将约会.游戏 ...
一周排行
  • 前沿: ansible的那几个插件都不错,现在咱们聊聊lookup plugins这个插件. Lookup_plugins主要是用来实现扩展playbook里面各种的字符串和变量的扩展.对于我个人来说,用途不是太大, ...
  • 上一篇文章我们通过Unity自身Unity.InterceptionExtension.IInterceptionBehavior实现一个有系统关异常日志记录:解决代码中到处充满的异常记录的代码: 本文则是通过Uni ...
  • 概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又 ...
  • 由于物化视图定义为on commit导致update更新基表慢的解决方案   由于物化视图定义为on commit导致update更新基表慢的解决方案 以下是模拟和解决测试过程:   (模拟update慢的过程) 1 ...
  • 此篇,我基于storyboard纪录一下项目如何适配ios6 ios7. 步骤: 1 导航栏问题解决.众所周知,iphone5 为4寸,iphone4 为3.5寸,所以为适配iphone4 iphone5 导航栏的大 ...
  • 在Android4.3上,Google的开发者新增了一个类UiAutomationConnection,它目前用在Instrumentation test中,控制某些操作的权限.     代码解释是这样说的:   U ...
  • 一. 语法部分 1.吉田さんは 来月(らいげつ) 中国へ 行(いきます)きます. 2.李さんは 先月(せんげつ) 北京から 来ました. 3.小野さんは 友達(ともだち)と 帰(かえります)りました. 4.森さんは 東 ...
  • ( 凡是打 | 的地方,都是因为 CSDN 屏蔽掉而采取的办法.)   今年 5 月 12 日,沈阳四部门联合推出新一轮托市政策.包括对买了房(包括二手房)的外地人,允许其本人.配偶.未婚子女及共同居住的父母落户,其 ...
  • 术语和概念 屏幕尺寸 屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如 2.8寸, 3.5寸). 简而言之, Android把所有的屏幕尺寸简化为三大类:大,正常,和小. 程序可以针对这三种尺寸的屏幕提供三种不同的布 ...
  • 题意: 有一个司仪,要主持n场婚礼,给出婚礼的起始时间和终止时间,每个婚礼需要超过一半的时间做为仪式,并且仪式不能终止. 问说司仪能否主持n场婚礼. 解析: 贪心,为了尽量主持多的婚礼,每场的仪式时间就一定要尽量短( ...