98_JavaWeb_Servlet1
Servlet
1 Servlet是JavaEE 规范之一,规范就是接口
2 Servlet就JavaWeb 三大组件之一,三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器
3 Servlet是运行在服务器上的一个java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端
实现 Servlet 程序
1 编写一个类去实现 Servlet 接口
2 实现 service 方法,处理请求,并响应数据
3 到 web.xml 中去配置 servlet 程序的访问地址
Servlet 的生命周期
第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。
1 执行 Servlet 构造器方法
2 执行 init 初始化方法
3 执行 service 方法 每次访问都会调用
4 执行 destroy 销毁方法 在 web 工程停止的时候
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1 构造器方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
// 1、可以获取Servlet程序的别名servlet-name的值
System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
// 2、获取初始化参数init-param
System.out.println("初始化参数username的值是;" + servletConfig.getInitParameter("username"));
System.out.println("初始化参数url的值是;" + servletConfig.getInitParameter("url"));
// 3、获取ServletContext对象
System.out.println(servletConfig.getServletContext());
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service方法是专门用来处理请求和响应的
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service === Hello Servlet 被访问了");
// 类型转换(因为它有getMethod()方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求的方式
String method = httpServletRequest.getMethod(); //httpServletRequest是 ServletRequest 子类
if ("GET".equals(method)) {
doGet();
} else if ("POST".equals(method)) {
doPost();
}
}
/**
* 做get请求的操作
*/
public void doGet(){
System.out.println("get请求");
System.out.println("get请求");
}
/**
* 做post请求的操作
*/
public void doPost(){
System.out.println("post请求");
System.out.println("post请求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4 . destroy销毁方法");
}
}
IDEA生成
public class Servlet2Test1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello3doPost");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello3doGet");
}
}
ServletConfig类
ServletConfig 类: Servlet程序的配置信息类。
Servlet程序和ServletConfig对象都是由Tomcat负责创建
Servlet程序默认是第一次访问的时候创建,ServletConfig 是每个Servlet程序创建时,就创建一个对应的ServletConfig对象
ServletConfig 类的三大作用
1 可以获取 Servlet程序的别名servlet-name 的值
2 获取初始化参数 init-param
3 获取 ServletContext对
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
// 方式1 config.getServletName() config.getInitParameter
// 1、可以获取Servlet程序的别名servlet-name的值
System.out.println("HelloServlet程序的别名是:" + config.getServletName()); //Servlet程序和ServletConfig对象都是由Tomcat负责创建
// 2、获取初始化参数init-param
System.out.println("初始化参数username的值是;"+config.getInitParameter("username"));
System.out.println("初始化参数url的值是;" + config.getInitParameter("url"));
// 3、获取ServletContext对象
System.out.println(config.getServletContext());
// 方式2 getServletConfig();
ServletConfig servletConfig = getServletConfig();
System.out.println("范式2初始化参数username的值是;" + servletConfig.getInitParameter("username"));
}
<!-- servlet标签给Tomcat配置Servlet程序 -->
<servlet>
<!--servlet-name标签 Servlet程序起一个别名(一般是类名) -->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>com.alex.servlet.HelloServlet</servlet-class>
<!--init-param是初始化参数-->
<init-param>
<!--是参数名-->
<param-name>username</param-name>
<!--是参数值-->
<param-value>root</param-value>
</init-param>
<!--init-param是初始化参数-->
<init-param>
<!--是参数名-->
<param-name>url</param-name>
<!--是参数值-->
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
ServletContext
1 ServletContext 是一个接口,它表示 Servlet 上下文对象
2 一个web工程,只有一个ServletContext对象实例
3 ServletContext对象是一个域对象
4 ServletContext 是在web工程部署启动的时候创建, 在web工程停止的时候销毁。
域对象,是可以像 Map一样存取数据的对象,叫域对象 这里的域指的是存取数据的操作范围,整个 web 工程
存数据 取数据 删除数据
Map put() get() remove()
域对象 setAttribute() getAttribute() removeAttribute();
ServletContext 类的四个作用
1 获取 web.xml 中配置的上下文参数 context-param
2 获取当前的工程路径,格式: /工程路径
3 获取工程部署后在服务器硬盘上的绝对路径
4 像 Map 一样存取数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 方式一 获取 context getServletContext()
// 获取ServletContext对象
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前: Context1 获取 key1的值是:"+ context.getAttribute("key1")); //读数据
context.setAttribute("key1", "value1"); //存数据
System.out.println("Context1 中获取域数据key1的值是:"+ context.getAttribute("key1"));
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 方式2 : 获取context getServletConfig().getServletContext()
// 1、获取web.xml中配置的上下文参数context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
// System.out.println("context-param参数username的值是:" + username);
// System.out.println("context-param参数password的值是:" + context.getInitParameter("password"));
// 2、获取当前的工程路径,格式: /工程路径
System.out.println( "当前工程路径:" + context.getContextPath() );
// 3、获取工程部署后在服务器硬盘上的绝对路径
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到IDEA代码的web目录<br/>
*/
System.out.println("工程部署的路径是:" + context.getRealPath("/"));
// System.out.println("工程下css目录的绝对路径是:" + context.getRealPath("/css"));
// System.out.println("工程下imgs目录1.jpg的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
}
<!--context-param是上下文参数(它属于整个web工程)-->
<!--context-param是上下文参数(它属于整个web工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<!--context-param是上下文参数(它属于整个web工程)-->
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
- 点赞
- 收藏
- 关注作者
评论(0)