所使用的idea版本
创建一个新项目 创建一个Java EE
项目,选择Web Application
,选择Tomcat
版本,然后下一步
选择依赖 版本选择Java EE 8
,规范选择Servlet
,即可完成创建
创建lib和classes 在webapp
的WEB-INF
目录下创建lib
目录和classes
目录
修改编译输出路径 在左上角File
中打开Project Structure
-> 点击左边栏中的Modules
-> 选中项目 -> 在右边栏中切换到Path
选项卡 -> 勾选Use module compile output path
-> 将Output path
和Test 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
,重写doGet
和doPost
方法,这两个方法分别对应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 { } @Override protected void doPost (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
通过@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-name > myServlet</servlet-name > <servlet-class > xyz.xxin.servlet_test.MyServlet</servlet-class > </servlet > <servlet-mapping > <servlet-name > myServlet</servlet-name > <url-pattern > /my-servlet</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 @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
war
和war 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