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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM