目录
Servlet映射方式
-
概述
-
给指定Servlet设置访问路径
-
-
①一个Servlet可以有多个访问路径
-
②完全匹配 : 网址必须和Servlet访问路径一致
-
以"/"开头
-
-
③目录匹配 : 网址只需要和前面的目录匹配上即可
-
以"/"开头,以"*"结尾
-
-
④后缀名匹配 : 网址只需要和后缀名匹配上即可
-
以"*"开头,以"后缀名"结尾
-
一个Servlet可以有多个访问路径
<!--①一个Servlet可以有多个访问路径-->
<servlet>
<servlet-name>Demo01Servlet</servlet-name>
<servlet-class>com.atguigu.servlet.Demo01Servlet</servlet-class>
</servlet>
<!--②完全匹配-->
<servlet-mapping>
<servlet-name>Demo01Servlet</servlet-name>
<url-pattern>/demo01</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Demo01Servlet</servlet-name>
<url-pattern>/myDemo01</url-pattern>
</servlet-mapping>
ServletConfig对象
作用
-
①获取Servlet初始化参数
-
②获取ServletContext对象
-
③获取Servlet名称
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig();
//①获取Servlet初始化参数
String username = servletConfig.getInitParameter("username");
System.out.println("username = " + username);
String password = servletConfig.getInitParameter("password");
System.out.println("password = " + password);
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String initParameterName = initParameterNames.nextElement();
String initParameterValue = servletConfig.getInitParameter(initParameterName);
System.out.println("initParameterName = " + initParameterName + " , initParameterValue = " + initParameterValue);
}
//②获取ServletContext对象
ServletContext servletContext = servletConfig.getServletContext();
System.out.println("servletContext = " + servletContext);
ServletContext servletContext2 = getServletContext();
System.out.println(servletContext == servletContext2);
//③获取Servlet名称
String servletName = servletConfig.getServletName();
System.out.println("servletName = " + servletName);
}
ServletContext对象
-
ServletContext有很多方法用于和服务器容器进行交互,比如:获取文件的mimeType、调度请求、写日志文件。
-
每一个JVM每一个项目就有一个ServletContext对象
作用
-
①实现Servlet资源共享(作为域对象)
-
②获取全局初始化参数
-
③获取资源在服务器上的真实磁盘路径(部署路径)
-
④获取文件的mimeType
共享:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int num = 250;
//存储到ServletContext
getServletContext().setAttribute("num",num);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取num
Object num = getServletContext().getAttribute("num");
System.out.println("num = " + num);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//移除
getServletContext().removeAttribute("num");
}
Servlet3.0新特性
概述
-
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本 (Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。
-
注解配置替代XML配置
①完整语法
@WebServlet(
name = "Demo10Servlet",
urlPatterns = {
"/demo10",
"/myDemo10"
},
loadOnStartup = 1,
initParams = {
@WebInitParam(name = "username", value = "root"),
@WebInitParam(name = "password", value = "root")
}
)
public class Demo10Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Demo10Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
②简洁语法
@WebServlet("/demo11")
public class Demo11Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Demo11Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}