在几个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而已。