Servlet学习总结
Servlet介绍
什么是Servlet
1.Servlet是JavaEE规范之一,也就是一个接口
2.是JavaWeb的三大组件之一:Servlet程序、Filter过滤器、Listener监听器
3。它可以接受客户端发送的请求,并相应数据给客户端,是运行在服务器端的程序。
URL地址到Servlet程序的访问
Servlet的生命周期
1.执行Servlet构造器方法
2.执行init初始化方法
这两步在创建Servlet程序会调用
3.执行service方法
4.执行destory方法
import javax.servlet.*;
import java.io.IOException;
public class Test implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//service方法是专门用来处理请求和响应的
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3.HelloServlet被访问了");
//因为它有getMethod()方法
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//获取请求方式,如 get post
String method = httpServletRequest.getMethod();
//这里的"GET"为啥要大写:因为Servlet规范中封装了http协议中的几个方法
// :GET/POST/PUT/DELETE/INPUT,
// 这些方法是完全遵从http协议来命名的。
// 简单来说,当前台指定使用method="get"的方式提交请求时,
// 后台的getMethod()返回的值就是“GET“。
if("GET".equals(method)){
//为了防止代码臃肿,get和post方法单独拎出来写成一个方法
// System.out.println("get请求");//执行get请求的代码
doget();
}else{
//System.out.println("post请求");//执行post请求的代码
dopost();
}
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
通过继承HttpServlet实现Servlet(推荐)
在一般的项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序
步骤:
1.编写一个类去继承HttpServlet类
2.根据实际业务重写doGet或doPost方法
3.到web.xml中的配置Servlet程序的访问地址
Servlet类的代码;
public class HelloServlet2 extends HttpServlet {
//2.如果业务有doGet doPost请求,重写dogGet doPost方法
//doGet在get请求的时候调用
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("HelloServlet2的doGet方法");
// System.out.println("地址是:"+req.getRemoteHost());
// System.out.println("1 "+req.getRequestURI());
// System.out.println("2 "+req.getRequestURL());
System.out.println(req.getHeader("User-Agent"));
}
//doPost在post请求的时候调用
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPost方法");
}
}
web.xml文件配置:
<!--servlet标签给Tomcat配置Servlet程序-->
<servlet>
<!--servlet-name标签 Servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet2</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>com.baidu.HelloServlet2</servlet-class>
<!--servlet-mapping标签给servlet程序配置访问地址-->
</servlet>
<servlet-mapping>
<!--servlet-name标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用-->
<servlet-name>HelloServlet2</servlet-name>
<!--url-pattern标签配置访问地址
/ :斜杠在服务器解析的时候,表示地址wei http://ip:port/工程路径 这边的工程路径就是webTest <br/>
/hello:表示地址为http://ip:port/工程路径/hello (hello是自定义的,用来在浏览器输入地址访问HelloServlet这个类;一般需要和类相对应,约定大于配置) <br/n>
-->
<!--注意配置的路劲是以斜杠打头,/ 初学容易犯错-->
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
使用IDEA创建Servlet程序步骤:
Nen—>Create New Servlet—>配置Servlet信息
ServletConfig类
ServletConfig类是Servlet类的配置信息类。
Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们负责创建。Servlet在 创建的时候会创建一个对应的ServletConfig对象。
ServletConfig类的三大作用
1.获取Servlet别名servlet-name的值
2.获取初始化参数init-param
3.获取ServletContext对象
web.xml配置:
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.baidu.HelloServlet2</servlet-class>
<!--init-param是初始化参数-->
<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/WebTes</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
Servlet中的代码:
@Override
public void init(ServletConfig config) throws ServletException {
//1.可以获取Servlet程序的别名servlet-name的值
System.out.println("HelloServlet2程序的别名是:"+ config.getServletName());
//2.获取初始化参数init-param
System.out.println("初始化参数username的值是:"+config.getInitParameter("username"));
System.out.println("初始化参数url的值是:"+ config.getInitParameter("url"));
//3.获取Servlet对象
System.out.println(config.getServletContext());
}
ServletContext类
作用:
1.获取webxml中配置的上下文参数context-param
2.获取当前的工程路径,格式:/工程路径
3.获取工程部署后在服务器硬盘上的绝对路径
4.像Map一样存取路径
web.xml配置程序:
<!--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>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext对象
ServletContext context = getServletContext();
context.setAttribute("key","value");
System.out.println("获取key中的值是:"+ context.getAttribute("key"));
}
HTTP协议
这里简单说一下HTTP协议,这是一个应用层协议;用于客户端和服务器之间进行通信(中间还有一层代理服务器)。
客户端给服务器发送数据叫请求。
服务器给客户端回传数据叫响应。
请求分为GET和POST两种。
GET请求:
1.form标签 method= get
2.a 标签
3.link标签引入css
4.Script标签引入js文件
5.img标签引入图片
6.iframe引入html页面
7.在浏览器地址栏中输入地址后敲回车
POST请求:
8.form标签 method= post
协议格式分为请求协议格式、响应格式。(见计算机网络)