在幾個java IDE中,IntelliJ IDEA應該是最養眼的了,不過免費的社區版不能配置web服務器,因此拿來開發servlet感受困難重重。通過一番探索,終於闖出了一條便捷的路。快速編碼,運行,調試都沒問題,我所使用的版本是14.0.1。下面就來介紹一下。
一、下載jetty。jetty是一個servlet容器,這一步是可以運行和調試的重點,由於不能配置web服務器,因此咱們須要一個嵌入式的servlet容器。地址:
http://www.eclipse.org/jetty/
。下載以後解壓備用,我所用的是9.2.5版本。
二、新建java項目。如下這一步的時候注意要勾選。
這是由於咱們要在內部運行jetty,就得有一個入口,勾選這個以後會生成一個Main類,裏面有main函數,這就是入口函數。以後就是填寫項目名稱,能夠隨便填寫一個,我寫的是demo。
三、打開項目配置選項。建好項目以後就是配置了,File->ProjectStructure打開項目配置選項。
四、配置jetty全局庫。以下圖,
把jetty運行所須要的庫加進全局庫裏。放到全局庫而不是放到當前項目中是由於之後每一個項目都須要,之後新的項目不用再複製進去。須要的庫以下:
五、添加jetty運行庫到新建的項目中,以下圖,
右擊剛建好的jetty-server庫,點擊Add to Modules,在彈出的窗口中選擇demo便可。
六、創建web所須要的目錄和文件。在demo下新建二級目錄,爲web/WEB-INF。
七、修改生成class文件的路徑,以下圖,
把path修改到web/WEB-INF/classes下。
八、在src下新建一java文件,就是一個servlet,繼承自HttpServlet。代碼以下,
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MainServlet extends HttpServlet {
/**
* 處理get或post請求
*
* @param request
* @param response
* @throws javax.servlet.ServletException
* @throws java.io.IOException
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("Servlet MainServlet.");
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet 內部處理方法">
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
九、修改Main.java入口文件,以下代碼,
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class Main {
// 端口
private static final int PORT=8090;
// 根路徑
private static final String contextPath="/demo";
public static void main(String[] args) throws Exception {
// 創建jetty服務器
Server server=new Server(PORT);
ServletContextHandler context=new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath(contextPath);
server.setHandler(context);
// 添加servlet,可添加多個
context.addServlet(new ServletHolder(new MainServlet()),"/Main");
// 啓動服務器
server.start();
server.join();
}
}
十、運行或調試。至此,咱們已能夠在IntelliJ IDEA內運行起來了,效果以下,
看到這個就說明服務器已運行。在瀏覽器中打開http://localhost:8090/demo/Main便可看到結果。
注意:修改代碼後,必定要先關閉正在運行的項目,再從新開啓才行,否則啓動時就會出現端口被佔用的錯誤。這個時候有個方法能夠補救,那就是關掉整個項目窗口,會有是否要結束鏈接的提示,點擊Disconnect便可,以下圖,
十一、配置文件web.xml。若是咱們要布在tomcat或其它的服務器上,那就得在web/WEB-INF目錄下添加一個配置文件web.xml了,代碼以下,
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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">
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/Main</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
十二、添加第三方jar。若是咱們有其它的第三方jar要添加,可新建一目錄web/WEB-INF/lib,而後把jar都放到這下面,右擊lib選擇"Add as Library"便可。
1三、保存用戶項目模板。這時咱們把剛纔的項目保存成用戶項目模板,之後新建的時候就會獲得
相同文件結構和配置的項目,方便開發。方法爲菜單Tools->Save Project as Template。這時整個項目的結構以下,
1四、添加servlet文件模板。最後還有一個要作的就是添加servlet的模板,這樣新建java文件時可直接生成一個Servlet類。以下圖,
在系統配置窗口中添加,內容以下,
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created by ${USER} on ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE}.
*/
public class ${NAME} extends HttpServlet {
/**
* 處理get或post請求
*
* @param request
* @param response
* @throws javax.servlet.ServletException
* @throws java.io.IOException
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("Servlet ${NAME}.");
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet 內部處理方法">
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
到此,整個過程完成了,不過你不要被這麼長的步驟嚇着,其實不少都是基礎,重點也就是如何嵌入jetty而已。