1 Servlet4.0
什么是Servlet
什么是Servlet
简介:是JavaServlet的简称,用Java编写的运行在Web服务器或应用服务器上的程序,具有独立于平台和协议的特性, 主要功能在于交互式地浏览和生成动态Web内容
作用:接收用户通过浏览器传来的表单数据,或者读取数据库信息返回给浏览器查看,创建动态网页
接口路径:package javax.servlet
有两个常见的子类:HttpServlet、GenericServlet
JavaWeb Servlet文档:https://tomcat.apache.org/tomcat-9.0-doc/servletapi/index.html
1)创建Class,继承HttpServlet
- 重写doGet方法,返回HTML内容
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//实战响应内容
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div> 小滴课堂 xdclass.net 你好,让技术不再难学 </div>");
}
}
- 配置web.xml
<servlet>
<servlet-name>userServlet</servlet-name>
<servlet-class>net.xdclass.web.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userServlet</servlet-name>
<url-pattern>/userServlet</url-pattern>
</servlet-mapping>
1.2 Servlet生命周期
Servlet 接口里面有5个方法,其中三个生命周期方法和两个普通方法
实例化->使用构造方法创建对象
初始化->执行init方法:Servlet 的生命期中,仅执行一次 init() 方法,它是在服务器装入 Servlet 时执行的,即第一次访问这个Servlet才执行
服务->执行service方法,service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用
销毁-> 执行destroy方法,destroy() 方法仅执行一次,即在服务器停止且卸装 Servlet 时执行该方法
-
查看继承和实现关系 XXXServlet->HttpServlet->GenericServlet->implements Servlet
-
HttpServlet里面实现了service方法,里面会根据不同的http method调用不同的方法,所以我们自定义servlet只要重写对应的doXXX方法即可
Servlet3.0~5.0和旧版配置的区别
-
旧版Servlet,在xml里面配置类目和路径,比较不方便
-
新版Servelt,也就是3.0之后,支持注解的方式
@WebServlet(name = "userServlet",urlPatterns = {"/user1","/user2","/test"})
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
//实战响应内容
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div> doGet 你好,让技术不再难学 </div>");
}
}
- 配置项
//servlet名称,若不指定,则为Servlet的完整类名
String name() default "";
//路径映射,配置多个,需要/开头
String[] value() default {};
//路径映射,支持配置多个,需要/开头
String[] urlPatterns() default {};
//标记容器是否在启动应用时就加载Servlet,默认或数值为负数时表示第一次请求Servlet时再加载;0或正数表示启动应用就加载
int loadOnStartup() default -1;
//配置初始参数
WebInitParam[] initParams() default {};
//是否支持异步操作模式
boolean asyncSupported() default false;
2 应用上下文和JSP核心知识
2.1 什么是应用上下文ServletContext
-
什么是作用域对象:
1.就是对象的生命周期,在javaweb开发里面有多个不同生命周期的对象
2.比如:PageContext,ServletRequest,HttpSession,ServletContext;
3.对象里面包含属性和对应的数据,所以不同作用域对象使用场景会不同 -
ServletContext:
1.它代表了servlet环境的上下文,相当于一个全局存储空间
2.同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域,是最大的作用域对象
(webapps下的每个目录就是一个应用程序)
四大作用域对象-用于存取数据(举个形象的例子):
PageContext(页面)->ServletRequest(请求)->HttpSession(会话)->【ServletContext】(应用);
生命周期:在WEB服务器启动时创建,服务器关闭时销毁 -
加载应用默认参数
<context-param>
<param-name>url</param-name>
<param-value>xdclass.net</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>jack</param-value>
</context-param>
- 获取api
ServletContext servletContext = req.getServletContext();
String url = servletContext.getInitParameter("url");
System.out.println(url);
- 存储全局数据(只要是同个应用,都可以共享这些数据,类似map结构)
servletContext.setAttribute("appInfo","xdclass.net info");
String appInfo = (String)servletContext.getAttribute("appInfo");
System.out.println("TestServlet appInfo="+appInfo);
2.2 什么是JSP和Servlet
- 什么是JSP: 全称Java Server Pages,是一种动态网页开发技术;
使用JSP标签在HTML网页中插入Java相关代码,标签通常以<%开头 以%>结束
JSP本身就是一种Servlet, JSP在第一次被访问的时候会被编译为HttpJspPage类,是HttpServlet的一个子类
为什么用这个:和原生Servle 相比JSP可以很方便的编写HTML网页而不用去大量的用println语句输出html代码
通俗来说:jsp就是在html里面写java代码,servlet就是在java里面写html代码