一、实现Servlect程序
1、编写一个类去实现 Servlet 接口
2、实现 service 方法,处理请求,并响应数据
//在服务器开始的时候执行,用来初始化数据
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init() 我只会执行一次");
}
//在服务器停止的时候执行,常用于获取服务器停止时未保存的数据
@Override
public void destroy() {
}
//处理请求和访问
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public ServletConfig getServletConfig() {
return null;
}
3、配置 servlet 程序的访问地址两种方式:
(1)、在web.xml 当中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
//设置先运行的程序
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
//给程序起的别名--HelloServlet
<servlet-name>HelloServlet</servlet-name>
//程序的全类名
<servlet-class>com.softeem.servlet.HelloServlet</servlet-class>
//设置参数
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
</servlet>
<servlet-mapping>
//告诉服务器我当前配置的地址是给哪一个程序使用的
<servlet-name>HelloServlet</servlet-name>
//表示访问地址
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
(2)、使用注解配置
//普通注解配置
@WebServlet(name = "HelloServlet2",value = "/HelloServlet2")
//
//带参数的注解配置
@WebServlet(name = "HelloServlet5", value = "/HelloServlet5", initParams = {
@WebInitParam(name = "username", value = "root"),
@WebInitParam(name = "url", value = "jdbc:mysql://localhost:3306/test"),
@WebInitParam(name = "password", value = "123456")
})
二、开发当中使用Servlect
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。与前面不一样的是,继承HttpServlect类一般是实现doGet和doPost方法,根据你的需要在这两个方法当中实现你的逻辑
三、Servlet 程序的配置信息类
1、ServletConfig类
作用:
a、可以获取 Servlet 程序的别名 servlet-name 的值
b、获取初始化参数 init-param
c、获取 ServletContext 对象
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("+++++++init开始+++++");
System.out.println("HelloServlet 程序的别名是:" + config.getServletName());
System.out.println("初始化参数 username 的值是;" + config.getInitParameter("username"));
System.out.println("初始化参数 url 的值是;" + config.getInitParameter("url"));
System.out.println("初始化参数 password 的值是;" + config.getInitParameter("password"));
System.out.println(config.getServletContext());
System.out.println("++++++init结束++++++");
}
2、ServletContext类
(1)、什么是ServlectContext类:
a、ServletContext 是一个接口,它表示 Servlet 上下文对象
b、一个 web 工程,只有一个 ServletContext 对象实例。
c、ServletContext 对象是一个域对象。
d、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
什么是域对象?
域对象,是可以像 Map 一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,整个 web 工程。
(2)、ServletContext类的作用
1、获取 web.xml 中配置的上下文参数 context-param
2、获取当前的工程路径,格式: /工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像 Map 一样存取数据
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
*//*ServletConfig config=super.getServletConfig();
ServletContext context = config.getServletContext();
*//*
*//*<==>*//*
//下面这个是对上面的封装写成的一个函数 内部return this.getServletConfig().getServletContext();
ServletContext context = super.getServletContext();
String email = context.getInitParameter("email");
System.out.println("email = " + email);
String phone = context.getInitParameter("phone");
System.out.println("phone = " + phone);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = super.getServletContext();
String contextPath = context.getContextPath();
System.out.println("当前路径contextPath:" + contextPath);
//getRealPath与getContextPath的区别
System.out.println("当前路径css:"+context.getRealPath("/css"));
}
//ServletContext 像 Map 一样存取数据
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前: Context1 获取 key1 的值是:"+ context.getAttribute("key1"));
context.setAttribute("key1", "sjj");
System.out.println("Context1 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
}
四、心得
Servlect程序是在Tomcat服务器上面运行的代码,与我之前直接在idea上面运行,是不一样的天地,这样运行的代码可以使用网址进行访问,让我对继续学习Java有了更大的兴趣。