• 用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下面。

    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了。

    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);
    }

     

  • 相关阅读:
    __x__(10)0906第三天__字符实体(转义字符)
    __x__(9)0906第三天__常见的标签
    __x__(8)0906第三天__乱码问题
    广工校赛——小明在工作
    广工校赛——01串也疯狂之光棍也有伴
    POJ2488——DFS——A Knight's Journey
    josephus问题
    链表(排序和删除)
    Buy Tickets
    敌兵布阵
  • 原文地址:https://www.cnblogs.com/shihui142857/p/3827062.html
Copyright © 2020-2023  润新知