目录
在web前端的两种路径
绝对路径的两种写法
相对路径
相对路径进阶
使用注解开发Servlet
使用注解开发Servlet的注意事项
使用idea创建servlet模板
在web前端的两种路径
绝对路径的两种写法
1.带网络三要素 http://ip地址:端口号/资源路径
2.不带网络三要素
/资源路径 这里/不能省略 ,要求访问的资源必须在同一个服务器上
前端页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="http://localhost:8080/path1">带网络三要素绝对路径访问Servlet</a> <a href="/path1">不带网络三要素绝对路径访问Servlet</a> </body> </html>
servlet类
public class path01Servlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("servlet"); } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0"> <servlet> <servlet-name>path01Servlet</servlet-name> <servlet-class>com.hhh.servlet.path01Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>path01Servlet</servlet-name> <url-pattern>/path1</url-pattern> </servlet-mapping> </web-app>
浏览器访问
相对路径
相对的不是当前项目,而是相对于URL地址栏
写法
1. "./path2"
2. 省略./ "path2"
public class path2Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("servlet2...get"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
前端页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="./path2">相对路径</a> <br> <a href="path">相对路径</a> </body> </html>
web.xml文件
<servlet> <servlet-name>path2Servlet</servlet-name> <servlet-class>com.hhh.servlet.path2Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>path2Servlet</servlet-name> <url-pattern>/path2</url-pattern> </servlet-mapping>
浏览器页面
点击相对路径后,/demo2.html,会替换成path2
相对路径进阶
可以替换是因为WEB-INF(包含web.xml)和demo2.html在同一个目录下,所以可以使用相对路径进行替换
如果html文件和 WEB-INF不在同一个目录呢
web.xml
<servlet-name>path3Servlet</servlet-name> <servlet-class>com.hhh.servlet.path3Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>path3Servlet</servlet-name> <url-pattern>/path3</url-pattern> </servlet-mapping>
servlet类
public class path3Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("servlet3...get"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } }
前端
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 直接使用绝对路径--> <a href="http://localhost:8080/path3">path3绝对路径</a> <br> <a href="/path3">path3绝对路径</a> <br> <!-- 使用相对路径 访问当前路径的上一级目录下的/path3 --> <a href="../path3">path3相对路径</a> </body> </html>
浏览器访问,要加上/a才能访问
点击相对路径
路径会变成/path3
使用注解开发Servlet
@WebServlet("/annDemo1") public class annDemo1Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("anno Servlet"); } }
这样一来就不用在web.xml文件中书写映射关系
结果:
anno Servlet
使用注解开发Servlet的注意事项
1.注解开发使用的是@webServlet 2.@webServlet注解常见的属性是: 1)String name() default "";相当于web.xml的 <servlet-name>t</servlet-name>可以不写 2)String[] urlPatterns() default {};相当于web.xml的 <url-pattern></url-pattern> 使用注解的时候,如果注解的属性是数组,那么我们使用的时候只给属性一个值,那么可以省略{} String[] value() default {};该属性等价于urlPatterns属性,好处是可以省略代码 在使用注解的时候关于属性名是value是可以省略的 1.如果注解的属性只有一个value,可以省略 2.如果注解有多个属性,并且每个属性都有默认值,此时给value赋值时可以省略value,如果除了给value赋值还有 其他属性赋值,这样就不可以省略value.
/* 1.注解开发使用的是@webServlet 2.@webServlet注解常见的属性是: 1)String name() default "";相当于web.xml的 <servlet-name>t</servlet-name>可以不写 2)String[] urlPatterns() default {};相当于web.xml的 <url-pattern></url-pattern> 使用注解的时候,如果注解的属性是数组,那么我们使用的时候只给属性一个值,那么可以省略{} String[] value() default {};该属性等价于urlPatterns属性,好处是可以省略代码 在使用注解的时候关于属性名是value是可以省略的 1.如果注解的属性只有一个value,可以省略 2.如果注解有多个属性,并且每个属性都有默认值,此时给value赋值时可以省略value,如果除了给value赋值还有 其他属性赋值,这样就不可以省略value. */ //@WebServlet("/annDemo1") @WebServlet({"/annoDemo1","/annoDemo2"}) public class annDemo1Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("anno Servlet"); } }
使用idea创建servlet模板
在servlet中书写
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end #parse("File Header.java") import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet("/${Class_Name}") public class ${Class_Name} extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }