目录
在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 {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("servlet2...get");}@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("servlet3...get");}@Overrideprotected 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 {@Overrideprotected 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.注解开发使用的是@webServlet2.@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 {@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);} }