JavaWeb Servlet 学习笔记总结( 一 )
Posted IT_Holmes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb Servlet 学习笔记总结( 一 )相关的知识,希望对你有一定的参考价值。
文章目录
- 1.Servlet 一些步骤
- 2.Servlet中的 service方法
- 3. Web.xml的一些配置
- 4. 通过继承HttpServlet实现Servlet程序
- 5. Servlet 接口, GenericServlet 类, HttpServlet 类之间的关系
- 6. ServletConfig
- 7. ServletContext类
- 8. Http协议
- 9.什么时候用doGet接受get请求,什么时候用doPost接受post请求?
- 10. 响应的HTTP协议格式
- 11. 响应码 状态说明
- 12. MIME 类型说明
- 13. HttpServletRequest 对象
- 14. 如何接受客户端发送过来的参数请求?
- 15. 请求的转发
- 16. base标签 作用
- 17. " / ",不同场景下斜杆的作用不同
- 18. HttpServletResponse 类
- 19. 请求重定向
- 20. Servlet 补充
1.Servlet 一些步骤
通过实现Servlet接口来实现Servlet程序。
Servlet的生命周期:
1.执行Servlet构造器方法。
2.执行init初始化方法。
3.执行service方法。
4.执行destroy销毁方法。
第1,2步:是在第一次访问时创建调用。
第3步:是每次访问时都会调用,(例如刷新客户端)。
第4步:web工程停止的时候调用。
package com.test01;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class HelloServlet implements Servlet
public HelloServlet()
System.out.println("1. 构造器方法");
@Override
public void destroy()
// TODO Auto-generated method stub
System.out.println("4.destory方法");
@Override
public ServletConfig getServletConfig()
// TODO Auto-generated method stub
return null;
@Override
public String getServletInfo()
// TODO Auto-generated method stub
return null;
@Override
public void init(ServletConfig config) throws ServletException
// TODO Auto-generated method stub
System.out.println("2. 初始化方法");
//service方法是专门用来处理请求和响应的。
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
System.out.println("3. service方法");
//ServletRequest方法中没有getMethod()方法但是它的子接口HttpServletRequest中有。
HttpServletRequest httpServletRequset = (HttpServletRequest)req;
//获取到客户端请求的方式:
String method = httpServletRequset.getMethod();
if("GET".equals(method))
doGet();
else if("POST".equals(method))
doPost();
//该方法用来执行获取get请求后的操作
public void doGet()
System.out.println("对于接受到GET请求后,该方法用来执行get方法后的请求操作。");
//该方法用来执行post请求后的操作
public void doPost()
System.out.println("对于接受到POST请求后,该方法用来执行POST方法后的请求操作。");
2.Servlet中的 service方法
GET和POST分发请求步骤:
//service方法是专门用来处理请求和响应的。
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
System.out.println("3. service方法");
//ServletRequest方法中没有getMethod()方法但是它的子接口HttpServletRequest中有。
HttpServletRequest httpServletRequset = (HttpServletRequest)req;
//获取到客户端请求的方式:
String method = httpServletRequset.getMethod();
if("GET".equals(method))
doGet();
else if("POST".equals(method))
doPost();
3. Web.xml的一些配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>WebTest02</display-name>
<!-- servlet标签给Tomcat配置Servlet程序 -->
<servlet>
<!-- servlet-name 标签给Servlet程序起一个别名,一般设置为类名。 -->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet-class 标签是Servlet程序的全类名。 -->
<servlet-class>com.test01.HelloServlet</servlet-class>
</servlet>
<!-- servlet-mapping 标签给servlet程序配置访问地址 -->
<servlet-mapping>
<!-- servlet-name 标签作用:告诉服务器,我当前配置的地址给哪个Servlet程序使用。与上面的name不能混淆 -->
<servlet-name>HelloServlet</servlet-name>
<!-- url-pattern 标签作用:配置访问地址。 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>`
4. 通过继承HttpServlet实现Servlet程序
除了实现Servlet接口,还能通过继承HttpServlet实现Servlet程序。
- 1.编写一个类继承HttpServlet类。
- 2.根据业务需要重写doGet或doPost方法。
- 3.到web.xml中的配置Servlet程序的访问地址。
平时创建servlet程序,我们直接可以在IDEA或eclise中直接new一个servlet程序,定义好各个配置信息即可,注意的是3.0版本后是注解版本,2.5之前是xml版本别混淆。
5. Servlet 接口, GenericServlet 类, HttpServlet 类之间的关系
注意的是: HttpServlet类中有service()方法,并且里面会有判断例如是get还是post,从而执行doGet或doPost方法,这样我们只需要继承HttpServlet,重写doGet和doPost即可。
6. ServletConfig
6.1 ServletConfig类和ServletContext类区别
ServletConfig和ServletContext(容器)是相反的.
ServletConfig都是内测私用的,定义在那个servlet中,那个servlet就能获取上面参数值;
而ServletContext容器则是共享的,设置在webapp主目录下的!所有的servlet都可以调用。
6.2 ServletConfig类 使用
ServletConfig类是Servlet的配置信息类。
它有三大作用:
可以获取Servlet程序的别名,servlet-name的值。
获取初始化参数init-param。
获取ServletContext对象。
该类一般都在init()方法中:
package com.test01;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class HelloServlet implements Servlet
public HelloServlet()
System.out.println("1. 构造器方法");
@Override
public void destroy()
System.out.println("4.destory方法");
@Override
public ServletConfig getServletConfig()
return null;
@Override
public String getServletInfo()
return null;
@Override
public void init(ServletConfig config) throws ServletException
System.out.println("2. 初始化方法");
//1.获取servlet-name别名值:
System.out.println("别名为:"+config.getServletName());
//2.获取初始化参数init-name:
System.out.println("初始化参数username的值是:"+config.getInitParameter("username"));
System.out.println("初始化参数url的值:"+config.getInitParameter("url"));
//3.获取ServletContext对象
System.out.println(config.getServletContext());
//service方法是专门用来处理请求和响应的。
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
System.out.println("3. service方法");
//ServletRequest方法中没有getMethod()方法但是它的子接口HttpServletRequest中有。
HttpServletRequest httpServletRequset = (HttpServletRequest)req;
//获取到客户端请求的方式:
String method = httpServletRequset.getMethod();
if("GET".equals(method))
doGet();
else if("POST".equals(method))
doPost();
//该方法用来执行获取get请求后的操作
public void doGet()
System.out.println("对于接受到GET请求后,该方法用来执行get方法后的请求操作。");
//该方法用来执行post请求后的操作
public void doPost()
System.out.println("对于接受到POST请求后,该方法用来执行POST方法后的请求操作。");
ServletConfig对象可以自己定义一个,不一定非要使用init方法中的形参。
ServletConfig con = getServletConfig();
String str = con.getInitParameter("[对应init-param的别名]");
上面对应web.xml的init-param标签如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>WebTest02</display-name>
<!-- servlet标签给Tomcat配置Servlet程序 -->
<servlet>
<!-- servlet-name 标签给Servlet程序起一个别名,一般设置为类名。 -->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet-class 标签是Servlet程序的全类名。 -->
<servlet-class>com.test01.HelloServlet</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/test</param-value>
</init-param>
</servlet>
<!-- servlet-mapping 标签给servlet程序配置访问地址 -->
<servlet-mapping>
<!-- servlet-name 标签作用:告诉服务器,我当前配置的地址给哪个Servlet程序使用。与上面的name不能混淆 -->
<servlet-name>HelloServlet</servlet-name>
<!-- url-pattern 标签作用:配置访问地址。 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HelloServlet02</servlet-name>
<servlet-class>com.test01.HelloServlet02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet02</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
</web-app>
总结起来就是:Servlet程序 和ServletConfig对象都是由Tomcat创建的,我们负责使用而已。
Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。
在别的方法中通过getServletConfig()也可以获得当前Servlet程序的ServletConfig对象。
package com.test01;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet02 extends HttpServlet
@Override
public void init(ServletConfig config) throws ServletException
// TODO Auto-generated method stub
super.init(config); //
System.out.println("重写了init方法,主要注意一定要继承一下父类的init方法,传递config参数!!!"
+ "不然下面的getServletConfig()方法就会报错!");
//为什么这样,看源码就懂了。
/*
* doGet()方法是在get请求的时候调用。
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
System.out.println("HelloServlet2 的doGet方法");
//在别的方法中通过getServletConfig()也可以获得当前Servlet程序的ServletConfig对象。
ServletConfig sc = getServletConfig();
System.out.println(sc);
/*
* doPost()方法是在Post请求的时候调用。
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
System.out.println("HelloServlet2的doPost方法");
需要注意,一个Servlet程序只有一个ServletConfig对象,他们是一一对应的关系,不要混淆。
7. ServletContext类
7.1 ServletConfig类和ServletContext类区别
这里我在强调一下两者区别:
ServletConfig和ServletContext(容器)是相反的.
ServletConfig都是内测私用的,定义在那个servlet中,那个servlet就能获取上面参数值;
而ServletContext容器则是共享的,设置在webapp主目录下的!所有的servlet都可以调用。
7.2 什么是ServletContext?
ServletContext是一个接口,他表示Servlet上下文对象。
一个web工程,只有一个ServletContext对象实例(单例设计)。
ServletContext对象是一个域对象。
(什么是域对象,是像map一样,可以存储数据的对象,叫做域对象。这里的域指的是存取数据的操作范围。)
7.3 ServletContext的作用?
前面也说了ServletContext就相当于一个共享操作,所有的servlet程序都可以使用,里面的属性值。
context-param配置如下:(它是配置在webapp标签中!)
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
同样也是使用getServletContext()方法调用:
ServletContext servletContext = getServletContext();
String initParameter = servletContext.getInitParameter("jdbc.driver");
System.out.println(initParameter);
//ServletContext servletContext2 = getServletConfig().getServletContext();
//这个方法和上面没啥不同,看源码就知道了。
1.获取web.xml中配置的上下文参数context-param。
2.获取当前工程路径,格式:/工程路径。
3.获取工程部署后在服务器硬盘上的绝对路径。
4.像map一样可以存储数据。
前三步的操作:
package com.test01;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ContextServlet extends HttpServlet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
//1.获取web.xml中配置的上下文参数context-param。
ServletContext context = getServletConfig().getServletContext();
String name = context.getInitParameter("username");
System.out.println("context-param参数username的参数值为:"+ name);
System.out.println("context-param参数password的参数值为:"+context.getInitParameter("password"));
//2.获取当前工程路径,格式:/工程路径。
System.out.println("获取当前工程路径:"+context.以上是关于JavaWeb Servlet 学习笔记总结( 一 )的主要内容,如果未能解决你的问题,请参考以下文章