package com.atguigu.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* Servlet工作原理
* Servlet生命周期
* 构造器 创建Servlet
* 执行时机,客户端第一次发送请求触发
* 执行次数,在整个生命周期中,只执行一次
* init() 初始化
* 执行时机,客户端第一次发送请求触发
* 执行次数,在整个生命周期中,只执行一次
* service() 处理请求
* 执行时机,每次发送请求触发
* 执行次数,在整个生命周期中,只执行n次(n>=1)
* destroy() 销毁
* 执行时机,关闭服务器时触发
* 执行次数,在整个生命周期中,只执行一次
*ServletConfig与ServletContext的区别
*
*/
public class HelloServlet implements Servlet {
private ServletConfig config;
public HelloServlet(){
System.out.println("this is 构造器");
}
@Override
public void destroy() {
System.out.println("this is destroy()");
}
@Override
public ServletConfig getServletConfig() {
return this.config;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig config) throws ServletException {
this.config=config;
System.out.println("this is init()");
}
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("this is service() HelloServlet!!!");
/**
* ServletConfig代表当前Servlet配置信息
* 作用:
* (1)获取Servlet名字,配置的名字
*/
String servletName=config.getServletName();
System.out.println("ServletName is:"+servletName);
System.out.println("-----------");
/**
* (2)获取当前Serlvet初始化参数
* (3)获取ServletContext对象
*/
String uname = this.config.getInitParameter("username");
System.out.println("uanme:"+uname);
System.out.println("--------");
/**
* 获取ServletContext对象
* 作用:1.获取当前Web应用程序的初始化参数
*/
ServletContext servletContext = this.config.getServletContext();
ServletContext servletContext2 = request.getServletContext();
System.out.println(servletContext);
System.out.println(servletContext2);
System.out.println("-----------------------------");
String password = servletContext.getInitParameter("password");
System.out.println("password:"+password);
/**
* 2.获取真实路径
*/
System.out.println("--------------------------");
String realPath = servletContext.getRealPath("/pages/index.html");
System.out.println("realPath:"+realPath);
/**
* 3.ServletContext是域对象
*
*/
}
}
Web项目:Servlet-Test
web.xml
// 注册HelloServlet 目的:
1)HelloServlet路径告诉tomcat
2)url–>
<context-param><!--当前Web应用程序的初始化参数-->
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
<servlet><!--当前Servlet的配置-->
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>zhangsan</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
请求页面为
http://localhost/Servlet-Test/HelloServlet
执行结果为:
再次访问:
http://localhost/Servlet-Test/HelloServlet
Servlet最终实现方式:
index.html
<h1>GET提交</h1>
<form action="../HelloWorldServlet" method="get">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="text" name="password"/> <br>
<input type="submit" value="登录"/>
</form>
<hr>
<h1>POST提交</h1>
<form action="../HelloWorldServlet" method="post">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="text" name="password"/> <br>
<input type="submit" value="登录"/>
</form>
package com.atguigu.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloWorldServlet
*/
public class HelloWorldServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Servlet最终的实现方式
* (1)HttpServlet
* (2)GenericServlet
* 作用:
* 1.getServletConfig()
* 2.getServletContext
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("this is doGet()");
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username);
System.out.println(password);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("this is doPost()");
}
}
执行结果:
zhangsan
123456
Servlet继承关系
<servlet><!--当前Servlet的配置-->
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>zhangsan</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
servlet-class如何获取
到对应的Servlet下,右键复制全路径名称,粘贴到web.xml的servlet-class的参数中
新建Servlet文件
eclipse中如何导入源码?
在Eclipse编程中,我们通过导入jar或库来使用已经封装好的类和接口,这样可以提高编程的效率和代码的质量。但有时候,我们想了解某个方法和接口是如何实现的,就需要分析源码;而一般我们安装的Eclipse是没有导入源码的,如果查看会出现下图的现象。
图1
1.打开红框 1,弹出红圈2选择界面;选择红框2选项,最后选择红框3进入图3界面。
图2
2. 打开红框中的文件夹,进入图4界面。
图3
3.选择红框中的源码压缩包,进入图5界面。
图4
5.最后点击红框中的OK按钮,出现图6,即导入源码成功!
图5
7.导入源码成功界面。(如下图)
图6