Servlet介绍

JSP本质就是Servlet,开发者把编写好的JSP页面部署在Web容器中,Web容器会将JSP编译成Servlet。但是Servlet开发的效率很低下,特别是使用Servlet生成表现层。自从MVC规范之后,Servlet的责任是仅仅作为控制器使用。

(一)Servlet的开发

    JSP的本质就是Servlet,Servlet通常被称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。

  Servlet是个特殊的JAVA类,这个java类必须继承HttpServlet。每个Servlet可以响应客户端的请求。Servlet提供不同的方法用于响应客户端请求。

   doGet:用于响应客户端的GET请求

   doPost:用于响应客户端的POST请求

   doPut:用于响应客户端的PUT请求

   doDelete:用于响应客户端的Delete请求

事实上,客户端的请求通常只有GET和POST请求两种,Servlet为了响应这两种请求,必须重写doGet方法和doPost方法。如果Servlet为了响应4个方式的请求,则需要同时重写上面4个方法。大部分的时候,Servlet对于所有的请求响应都是完全一样。此时,可以采用重写一个方法来代替上面的几个方法:只需要重写service()方法即可响应客户端的所有请求。

Servlet还包含另外两个方法:

 init(ServletConfig config):创建Servlet实例的时候,调用该方法的初始化Servlet资源。

 destroy():销毁Servlet实例时,自动调用该方法的回收资源。

通常无需重写init()和destroy()两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init方法。如果需要在销毁Servlet之前,先完成某些资源的回收,比如关闭数据库连接,才需要重写destroy方法。

package servlet;
import java.io.PrintStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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");
		//获取gendar的请求参数
		String gender=request.getParameter("gender");
	    //获取color的请求参数
		String[] color=request.getParameterValues("color");
		//获取country的请求参数
		String national=request.getParameter("country");
		//获取页面输出流
		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+"<hr>");
		//输出请求参数的值:gender
		out.println("您的性别是:"+gender+"<hr>");
		//输出您喜欢的颜色值:color
		for(String co:color){
			out.println(co+" ");
		}
		//输出请求参数的值:national
		out.println("您来自的国家是:"+national+"<hr>");
		out.println("</body>");
		out.println("</html>");
		
	}

}

Servlet 和JSP的区别在于:

1.Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显示创建。

2.对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出。

普通的Servlet类里面的service方法的作用,完全等同于JSP生成Servlet类的_JSPService方法。因此原JSP页面的JSP脚本,静态的HTML内容,在普通的Servlet里面都将转换成service方法的代码或输出语句;原jsp声明中的内容,对应为在Servlet中定义的成员变量或成员方法。


(二)Servlet的配置

编辑好的Servlet源文件并不能响应用户请求,还必须将其编译成class文件。将编译后的class文件放在WEB-INF/classes路径下,如果servlet有包,则还应将class文件放在对应的包路径下。

为了让servlet能响应用户请求,还必须将Servlet配置在web应用中。配置Servlet时,需要修改web.xml文件。

从Servlet3.0开始,配置Servlet有两种方式:

1.在Servlet类中使用@WebServlet Annotation进行配置。

2.通过在web.xml文件中进行配置。(@WebServlet=(name="firstServlet",urlpatterns={"/firstServlet"});)

@WebServlet annotation 支持的属性如下:

  1. name – Name of the servlet – optional
  2. asyncSupported=true/false – Specifies weather the servlet supports asynchronous processing or not.
  3. largeIcon – large icon for this Servlet, if present – optional
  4. smallIcon – small icon for this Servlet, if present – optional
  5. description – Servlet description – optional
  6. initParams – Array of @WebInitParam, used to pass servlet config parameters – optional
  7. loadOnStartup – Integer value – optional
  8. displayName -Servlet display name – optional
  9. urlPatterns – Array of url patterns for which the sevlet should be invoked – Atlease one url pattern is requried

如果在web.xml中配置servlet,则需要配置两个部分

1.配置servlet的名字:对应web.xml文件中<servlet/>元素

2.配置Servlet的URL:对应web.xml文件中<Servlet-mapping/>元素。这一步是可选的。但是如果没有为Servlet配置URL,则该Servlet不能响应用户请求。

  <!--  配置servlet的名字-->
  <servlet>
      <!-- 指定servlet的名字,相当于指定@WebServlet的name属性-->
      <servlet-name>firstServlet</servlet-name>
      <!-- 指定servlet的实现类 -->
      <servlet-class>servlet/FirstServlet</servlet-class>
  </servlet>   
  <servlet-mapping>  
      <!-- 指定servlet的名字-->
      <servlet-name>firstServlet</servlet-name>  
      <!-- 指定servlet映射的URL地址,相当于指定@WebServlet的urlPattern属性-->
      <url-pattern>/aa</url-pattern>  //提交到servlet的action名字一致
  </servlet-mapping>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值