今天的知识吸收的还算不错,就是注册码还燃
Servlet
配置响应时机
1.可以配置Servlet 创建的时机 1 -1 是默认值 第一次请求时创建
其他整数0 1 ,是开启服务器的时候创建
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>org.westos.servlet2.ServletDemo1</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
定义Servlet的三种方式
* 2.定义Servlet 三种方式
* 方式1:写一个类 实现 Servlet 重写5个抽象方法
* 方式2:写一个类 继承 GenericServlet 重写 service()方法
* 方式3:写一个类 继承HttpSersvlet 重写doGet() 和 doPost()方法 开发常用
方式一
实现 Servlet接口 需要重写5个方法
package rog.westos.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
* @Description:servlet
* @Author:@李小白
* @Date:2019/8/31 15:03
*/
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException,
IOException {
System.out.println("servlet welcome 欢迎请求的到来");
// //处理请求
// //响应
// servletResponse.getWriter().write("<h1 style='colre:red'>this is from server<h1>");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
<servlet>
<!--给servelet起名字-->
<servlet-name>MyServlet</servlet-name>
<!--配置servlet全路径-->
<servlet-class>rog.westos.servlet.MyServlet</servlet-class>
</servlet>
<!--配置servlet映射-->
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!--配置在浏览器里面请求servlet的虚拟路径-->
<url-pattern>/demo</url-pattern>
</servlet-mapping>
方式二:
继承 GenericServlet 重写一个Servlt方法
package org.westos.servlet2;
import javax.servlet.*;
import java.io.IOException;
/**
* @Description:TODO
* @Author:@李小白
* @Date:2019/9/3 22:22
*/
public class ServletDemo extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
ServletConfig servletConfig = this.getServletConfig();
String pwd = servletConfig.getInitParameter("pwd");
ServletConfig servletConfig1 = super.getServletConfig();
String pwd1 = servletConfig1.getInitParameter("pwd");
System.out.println(pwd);
System.out.println(pwd1);
}
}
<servlet>
<servlet-name>MyServlet2</servlet-name>
<servlet-class>rog.westos.servlet.MyServlet2</servlet-class>
<!--配置初始化参数-->
<init-param>
<param-name>username</param-name>
<param-value>zhangsan</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet2</servlet-name>
<url-pattern>/demo2</url-pattern>
</servlet-mapping>
方式三
继承 HttpServlet 重写doGet和doPost方法
package org.westos.servlet2;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Description:TODO
* @Author:@李小白
* @Date:2019/9/3 22:17
*/
@WebServlet(name = "ServletDemo1")
public class ServletDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>org.westos.servlet2.ServletDemo1</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/ser1</url-pattern>
</servlet-mapping>
全局对象 ServletContext接口
-
概念:
由服务器创建,在整个WEB之间的全局域对象,单例的 -
JavaWeb中四大域对象:
* ServletContext:代表整个web应用
* HttpSession:会话域
* ServletRequest:请求域
* PageContext:页面域
怎样获取使用
ServletContext context = this.getServletContext();
String rootpath = context.getRealPath("/");
- 存储所有用户共享的数据
* setAttribute():
* getAttribute():
* removeAttribute(): - 获取文件运行的真实路径:
* 真实路径:指服务器路径
* getRealPath():
* 1.webRoot下:项目根目录下
* 2.WEB-INF下: 项目根目录下/WEB-INF
* 3.src下: 项目根目录下/WEB-INF/classes
*注意:如果getRealPath("/"),获取的路径是项目的根目录 - new FileInputStream
package org.westos.servlet2;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
/**
* @Description:TODO
* @Author:@李小白
* @Date:2019/9/3 22:17
*/
@WebServlet(name = "ServletDemo1")
public class ServletDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig servletConfig = this.getServletConfig();
ServletContext servletContext = servletConfig.getServletContext();
//或者直接进行getServletContext()
ServletContext servletContext1 = this.getServletContext();
//作用1.可以在web内共享数据 2.可以获取真实路径
//1.可以在web内共享数据
servletContext1.setAttribute("servlet","123456");//设置对象,以键值的形式
servletContext1.getAttribute("servlet");//获取对象,由键取值
servletContext1.removeAttribute("servlet");//移除键值
//2.可以获取真实路径
//web 下 有一个 a.txt文件
// web/WEB-INF 有一个b.txt 文件
// src 下有一个 c.txt 文件
//我们要读取这三个不同地方的文件 怎么读?
//src\c.txt(系统找不到指定的路径。)
//动态获取路径,先获取服务器的大致路径
String realPath = servletContext1.getRealPath("/");
//获取src下的详细路径
FileInputStream in1 = new FileInputStream(realPath+"/WEB-INT/classes/c.txt");
//获取web下的详细路径
FileInputStream in2 = new FileInputStream(realPath + "/classes/b.txt");
//获取WEB-INF 下的详细路径
FileInputStream in3 = new FileInputStream(realPath + "a.txt");
System.out.println(in1);
System.out.println(in2);
System.out.println(in3);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
非web环境,如何获取真实路径
ServletContext只能用于web环境。如果是非web环境,则使用ClassLoader来获取真实路径
package org.westos.servlet2;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
/**
* @Description:TODO
* @Author:@李小白
* @Date:2019/9/3 23:24
*/
@WebServlet(name = "ServletDemo2")
public class ServletDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//方式一
URL resource = this.getClass().getClassLoader().getResource("a.txt");
String path = resource.getPath();
FileInputStream in1 = new FileInputStream(path);
System.out.println(in1);
//方式二
InputStream in2 = this.getClass().getClassLoader().getResourceAsStream("a.txt");
System.out.println(in2);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}