- Servlet是运行在服务器端的程序,用于处理及响应客户端的请求。
- Servlet是个特殊的Java类,必须继承HttpServlet。每一个Servlet能够响应客户端的请求。
Servlet相应客户端请求的方法:html
- doGet():响应客户端的Get请求
- doPost():响应客户端的POST请求
- doPut():响应客户端的PUT请求
- doDelete():响应客户端的DELETE请求
大部分时候,Servlet对于全部请求的响应都是同样的,因此能够只重写service()
方法。java
另外HttpServlet
还包含两个方法:web
init(ServletConfig config):建立Servlet实例<br/>
destroy():销毁Servlet实例服务器
不须要为Servlet编写构造器,若是须要对Servlet进行初始化的操做,能够重写init
方法。app
例子:学习
//Servlet必须继承HttpServlet类 @WebServlet(name="firstServlet" ,urlPatterns={"/firstServlet"}) public class FirstServlet extends HttpServlet { //客户端的响应方法,使用该方法能够响应客户端的全部类型请求 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,java.io.IOException { //设置解码方式 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //获取name的请求参数 String name = request.getParameter("name"); //获取gender的请求参数 String gender = request.getParameter("gender"); //获取color的请求参数 String[] color = request.getParamterValues("color"); //获取country的请求参数 String national = request.getParameter("national"); //获取页面输出流 PrintStream out = new PrintStream(response.getOutputStream()); //输出HTML页面标签 out.println("<html>"); out.println("<head>"); out.println("<title>Servlet测试</title>"); out.println("</head>"); out.println("<body>"); //输出请求参数:name out.println("name "+name + "<hr/>"); //输出请求参数:gender out.println("gender "+gender + "<hr/>"); //输出请求参数:color for(String c:color) { out.println("color " + c +"<hr/>"); } //输出请求参数:national out.println("national "+national); out.println("</body>"); out.println("</html>"); } }
Servlet和JSP的区别在于:测试
- Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显式建立
- 对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出
编辑后的Servlet文件要编译成class
文件,而后将文件放在WEB-INF/classes
中才可以响应用户请求。并且还要将Servlet配置在web应用中(修改web.xml)url
配置Servlet的方式有两种(Servlet3.0开始):spa
- 在Servlet类中使用@WebServlet注解进行配置
- 经过在web.xml文件中进行配置
@WebServlet注解最经常使用的属性code
- name:指定Servlet的名称
- urlPatterns:指定Servlet处理的url
配置Servlet的注意事项:
使用注解来配置Servlet:
一、不要在
web.xml
文件的根元素<web-app>
中制定metadata-complete="true"
二、不要在web.xml
文件中配置该文件使用web.xml配置Servlet须要配置两个部分:
一、配置
Servlet
的名字:对应web.xml
文件中的<servlet/>
元素
二、配置Servlet
的URL:对应web.xml
文件中的<servlet-mapping/>
元素
经过配置web.xml
文件的例子(经过注解的方式的例子在上面的代码中):
<!--配置Servlet的名字--> <servlet> <!--指定Servlet的名字--> <servlet-name>firstServlet</servlet-name> <!--指定Servlet的实现类--> <servlet-class>FirstServlet</servlet-class> </servlet> <!--配置Servlet的URL--> <servlet-mapping> <!--指定Servlet的名字--> <servlet-name>firstServlet</servlet-name> <!--指定Servlet映射的URL地址--> <url-pattern>/firstServlet</url-pattern> </servlet-mapping>
生命周期:
init
方法,对Servlet进行初始化destroy
方法销毁Servlet。load-on-startup Servlet的是Web应用启动时马上建立Servlet实例。
配置load-on-startup的Servlet的方式有两种:
- 在
web.xml
文件中经过<servlet../>
元素的子元素<load-on-startup.../>
进行配置- 经过@WebServlet注解的
loadOnStartup
属性指定<br/><br/>
(无论经过哪一种方式,都之接收一个整型值,数字越小表明优先级越高)
注解配置:
@WebServlet(loadOnStartup=1) public class TimerServlet extends HttpServlet { public void init(ServletConfig config)throws ServletException { super.init(config); Timer t = new Timer(1000.new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println(new Date()); } }); } }
web.xml
配置:
<servlet> <!--Servlet名--> <servlet-name>timerServlet</servlet-name> <!--Servlet的实现类--> <servlet-class>hsr.TimerServlet</servlet-class> <!--应用启动就建立实例--> <load-on-startup>1</load-on-startup> </servlet>
为Servlet配置参数的方法:
- 经过
@WebServlet
的initParam
属性指定- 在
web.xml
文件的<serlvet../>
的子元素<init-param../>
指定
经过@WebServlet
指定:
@WebServlet(name="testServlet", urlPatterns={"/testServlet"}, initParam={ @WebInitParam(name="Param_name1",value="Param_value1"), @WebInitParam(name="Param_name2",value="Param_value2") })
经过wel.xml
指定:
<init-param> <param-name>param_name</param-name> <param-name>param_name</param-name> </init-param>
访问配置参数:
//获取ServletConfig对象 ServletConfig config = getServletConfig(); //经过ServletConfig对象获取参数 String param = config.getInitParameter("param_name");