idea创建Servlet

所使用的idea版本

创建一个新项目

    创建一个java enterprise项目,然后下一步

选择依赖

    选择要添加的依赖,然后finish完成

创建lib和classes

    在webapp的WEB-INF目录下创建lib目录和classes目录

修改编译输出路径

    在左上角File中打开Project Structure -> 点击左边栏中的Modules -> 在中间栏中选中项目 -> 在右边栏中切换到Path选项卡 -> 勾选Use module compile output path -> 将Output path和Test output path的路径修改为刚刚创建的classes的路径

修改存放jar包的路径

    在右边栏中切换到Dependencies选项卡 -> 点击“+”号 -> 点击“JARs or Directories…” -> 选中刚刚创建的lib目录

    然后会弹出这个,选择Jar Directory

Tomcat配置

    点击Run -> Edit Configurations,在这里可以修改程序运行时使用浏览器打开的地址

    Application context指定本工程的根目录

    如果是新建的Tomcat,没有这一项的话,可以新建一个

运行

    修改index.jsp中的内容,然后点击右上角运行一把

Servlet实现

    创建MyServlet类,并继承HttpServlet,然后通过@WebServlet()注解的方式配置servlet

1
2
3
4
5
6
7
8
9
10
package com.lxx6.software;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

//指定Servlet类的名称为myServlet,访问路径为myServlet
@WebServlet(name = "myServlet", value = "/myServlet")
public class MyServlet extends HttpServlet {

}

    也可以在web.xml中配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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_4_0.xsd"
version="4.0">
<!-- 指定这个Servlet类的名称为myServlet-->
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.lxx6.software.MyServlet</servlet-class>
</servlet>
<!-- 指定myServlet这个名称的Servlet类的访问路径为myServlet-->
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>

    然后实现doGet和doPost方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.lxx6.software;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

//指定Servlet类的名称为myServlet,访问路径为myServlet
@WebServlet(name = "myServlet", value = "/myServlet")
public class MyServlet extends HttpServlet {

// 响应get请求
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 响应内容的类型
resp.setContentType("text/html");
// 响应
PrintWriter out = resp.getWriter();
out.println("<html><body>");
out.println("<h1>Hello World!</h1>");
out.println("</body></html>");
}

// 响应post请求
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置编码
req.setCharacterEncoding("utf8");
resp.setCharacterEncoding("utf8");

// 获取body中的内容
ServletInputStream inputStream = req.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String len;
while ((len = bufferedReader.readLine()) != null){
stringBuilder.append(new String(len.getBytes()));
}

// 获取请求头中的name
String name = req.getHeader("name");
// 响应
PrintWriter writer = resp.getWriter();
writer.println(name + "发送了: " + stringBuilder);
}
}

发送请求测试

    运行,使用postman测试一下,get请求

    post请求

打包

    点击Build -> Build Artifacts -> 选中war -> 选则Build

    war和war exploded的区别

1
2
3
4
5
6
7
8
war模式:将WEB工程以包的形式上传到服务器 ;
war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;

(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;

(2)war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

(3)在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才可以及时的显示出来。

    打包完成后,项目根路径的target文件夹下的war文件就是了,解压至部署好的环境下即可

参考:https://blog.csdn.net/xlgen157387/article/details/56498938