idea创建Servlet

所使用的idea版本

创建一个新项目

  创建一个Java EE项目,选择Web Application,选择Tomcat版本,然后下一步

选择依赖

  版本选择Java EE 8,规范选择Servlet,即可完成创建

创建lib和classes

  在webappWEB-INF目录下创建lib目录和classes目录

修改编译输出路径

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

添加依赖路径

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

  注意:无需引入servlet-api.jar包,因为创建之初maven中已经自动引入了这个包

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

Tomcat配置

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

  Application context指定本工程的根目录

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

运行

  现在可以点击右上角运行一下,index.jsp中的内容将被展现

Servlet实现

  新建一个类继承HttpServlet,重写doGetdoPost方法,这两个方法分别对应get请求和post请求,注意重写之后一定要将两个方法中调用父类对应方法的super删除,否则报错

1
2
3
4
5
6
7
8
9
10
11
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 响应get请求
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 响应post请求
}
}

  通过@WebServlet()注解的方式可以在Servlet类上声明Servlet的配置信息,这样就无需在web.xml文件中进行配置
  name = "myServlet"用于指定Servlet的名称,这个名称可以在Servlet容器中用于标识该Servlet,也可以在日志、管理工具中使用
  value = "/my-servlet"用于指定Servlet的地址映射,即访问时的URL路径

1
2
3
4
5
6
7
8
@WebServlet(name = "myServlet", value = "/my-servlet")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {}
}

  也可以在web.xml中配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<web-app>
...

<!-- 定义一个Servlet -->
<servlet>
<!-- 指定Servlet名称 -->
<servlet-name>myServlet</servlet-name>
<!-- 指定实现Servlet的类名 -->
<servlet-class>xyz.xxin.servlet_test.MyServlet</servlet-class>
</servlet>
<!-- 定义Servlet的地址映射 -->
<servlet-mapping>
<!-- 指定要映射的Servlet的名称 -->
<servlet-name>myServlet</servlet-name>
<!-- 指定该Servlet映射的URL路径 -->
<url-pattern>/my-servlet</url-pattern>
</servlet-mapping>
</web-app>

  在doGetdoPost方法中,给与响应

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
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html");

StringBuilder sb = new StringBuilder();
// 获取所有参数及参数值
Map<String, String[]> parameterMap = req.getParameterMap();
// 遍历所有参数及参数值
parameterMap.forEach((name, content) -> {
// 添加参数名
sb.append(name).append(": ");
// 添加参数值
sb.append(Arrays.toString(content));
sb.append("<br>");
});

if (sb.toString().isEmpty())
sb.append("无参数");

PrintWriter writer = resp.getWriter();
writer.println("<html><body>");
writer.println("<p>全部参数:</p>");
writer.println("<p>" + sb + "</p>");
writer.println("</body></html>");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");

// 获取提交内容
BufferedReader reader = req.getReader();
String line;
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);
}

if (sb.toString().isEmpty())
sb.append("提交内容为空");

PrintWriter writer = resp.getWriter();
writer.println("全部提交内容:");
writer.println(sb);
}

打包

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

  warwar exploded的区别

1
2
3
4
5
6
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