vlambda博客
学习文章列表

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用



        常见服务器。

        开源,OpenSource。开放源代码,免费。

        Tomcat,主流 Web 服务器之一,适合初学者。

        jetty,淘宝,运行效率比 Tomcat 高。

        resin,新浪,所有开源服务器软件中,运行效率最高的。

        三者的用法从代码角度完全相同,只有在开启、关闭服务器软件时对应的命令稍有区别。掌握一个即掌握所有。


        收费。

        WebLogic,Oracle。

        WebSphere,IBM。

        提供相应的服务与支持,软件大,耗资源。


        Tomcat是Apache 软件基金会,Apache Software Foundation,的Jakarta 项目中的一个核心项目,免费开源、并支持 Servlet 和JSP 规范。

        Tomcat 技术先进、性能稳定,深受Java 爱好者喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

        Tomcat 下载。

        http://tomcat.apache.org。根据 java 版本下载。$ java -version 查询版本,我的是java 1.8,下载 Tomcat 8 的版本。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        文件解压后改名 Tomcat 拖到 /libray 里。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        主要文件说明。bin,程序启动和停止的命令文件。conf,配置文件。webapps,工程文件,启动后路径打开。lib,第三方 jar 包。temp,临时文件。logs,日志。work,运行时生成的文件,最终运行的文件都在这里。

        $ sudo sh /Library/Tomcat/bin/startup.sh,启动服务器;$ sudo sh /Library/Tomcat/bin/shutdown.sh,关闭。打开浏览器,输入 http://localhost:8080,正常表示启动成功。

        Tomcat 默认端口号为8080,可以通过conf/server.xml 文件修改。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />


        将 Tomcat 和 IntelliJ IDEA 结合,直接从 IDEA 启动服务器。

        新建工程,选中 javaEE -> Web Application。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        点击 ADD Configuration。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        Tomcat server -> 双击Local - > Configure...,直接输入 /library/Tomcat。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        选择浏览器。点击警告⚠️标识后的 Create configuration。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        然后底部出现错误标识,点击 Fix。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        Application context 默认值是 /xxx,如果不改,打开默认服务器路径是 http://localhost:8080/kk_war_exploded,可以更改或者只留下 / 。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        点击 OK 或 Apply 保存配置。

        删除默认的 web.xml,因为它是 4.0 的,我们要用2.5 版本的。

        点击 File -> Project Structure -> Modules -> 点击 - 号删除 web -> Apply -> 再点击 + ,版本选 2.5,点击OK。环境就配置完成了。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        这时可以右键 Tomcat XXX,选择启动,默认浏览器会打开 index.jsp 的内容。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用


        接下来进入 Servlet 代码部分。

        加入 servlet-api.jar 包,jar 包可以从 /Library/Tomcat/lib 里找到。

        代码结构。test1 继承 HttpServlet,接收客户端请求。test2 实现 Servlet,展示服务器生命周期。具体能展现什么现象我就不一一调试了。

Servlet1 Mac 下 Tomcat和IntelliJ IDEA结合使用

public class Test1 extends HttpServlet {
public Test1() { System.out.println("test1"); }
public static void main(String[] args) { System.out.println("main"); }
// get 请求 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); }
// post请求 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 客户端请求方式 System.out.println(req.getMethod()); // 请求参数 System.out.println(req.getParameter("username")); // 请求地址 System.out.println(req.getRequestURI().toString());
//给客户端返回数据 resp.getWriter().write("response data"); }}


// Servlet 生命周期public class Test2 implements Servlet {
public Test2() { System.out.println("test2"); }
public static void main(String[] args) { System.out.println("main"); }
// 初始化 @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init"); }
@Override public ServletConfig getServletConfig() { System.out.println("getServletConfig"); return null; }
// 打开服务触发 @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service"); }
@Override public String getServletInfo() { System.out.println("getServletInfo"); return null; }
// 退出服务触发 @Override public void destroy() { System.out.println("destroy"); }}
<!-- web.xml -->
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet> <servlet-name>indexname</servlet-name>
<!-- 根据映射服务名字找到启动的 java 程序 --> <servlet-class>com.baidu.day18.Test1</servlet-class>
<!-- 设置优先级,数值越小,优先级越高 决定tomcat启动的时候构造还是在调用的时候构造 --><!-- <load-on-startup>1</load-on-startup> -->
</servlet>
<servlet-mapping><!-- 映射服务名字 --> <servlet-name>indexname</servlet-name>
<!-- 精确匹配 --> <url-pattern>/index</url-pattern>
<!-- 模糊匹配 只要一.do结尾都可以匹配 --><!-- <url-pattern>*.do</url-pattern> -->
<!-- <url-pattern>/</url-pattern> -->
</servlet-mapping>

</web-app>
<%-- index.jsp --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>title</title> </head> <body>
<%-- get 请求 --%> <a href="http"> index </a>
<%-- post请求 --%> <form method="post" action="index"> <input type="text" name="username" value="zs"><br> <input type="password" name="password" value="123"><br> <input type="submit" value="提交"> </form> </body>


        利用 eclipse 抓包。


        window -> show view -> other -> debug -> tcp/ip monitor -> open。

<a href="http://localhost:8888/index?username=zs&password=123"> index </a>

<%-- post请求 --%> <form method="post" action="http://localhost:8888/index">