您的位置:首页 > Web前端 > JavaScript

认识Servlet

2016-07-27 21:26 302 查看

说明

我们知道JSP编译后就是Servlet。由于Servlet是标准的Java类,页面的东西在里面开发较困难,自MVC规范出现后,Servlet便不再生成页面标签 ,也不再作为视图层使用,仅作为控制器使用。

开发Servlet步骤

1. 创建自定义Servlet类

让自定义的Servlet类继承HttpServlet并重写相关方法

Servlet响应客户端的几种方法:

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

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

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

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

一般doGet与doPost方法要重写,如果重写了service()则能响应所有客户端的请求,这样就不必重写上面的方法了。service()方法等同于JSP生成的Servlet里的_jspService()方法。

HttpServlet的init(ServletConfig config)方法

如果重写了该方法,则应在重写该方法的第一行调用super.init(config);访方法用于初始化Servlet资源。

HttpServlet的destroy()方法

只有在销毁Servlet之前要先完成像关闭数据库连接这样的资源回收才需重写destroy()方法。

2.配置自定义Servlet类

两种方式:

1. Servlet3.0以后可使用@WebServlet注解配置

使用注解后不要在web.xml文件的根元素(
<web-app...>
)中
指定metadata-complete="true"


注解@WebServlet常用属性

属性名说明
asyncSupported是否支持异步
display给Servlet指定显示名字
nameServlet名字
initParams给Servlet配置参数
loadOnStartup将该Servlet配置成load-on-startup的Servlet
urlPatterns/value指定访问该Servlet的URL,两个属性作用一样。
2. 通过web.xml进行配置

<servlet>
<!-- 指定servlet名字,相当于注解name属性 -->
<servlet-name>test</servlet-name>
<!-- Servlet实现类:自定义的Servlet -->
<servlet-class>com.zrgk.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 指Servlet名字 -->
<servlet-name>test</servlet-name>
<!-- Servlet映射URL,相当于注解里的urlPatterns或value属性 -->
<url-pattern>/basic.do</url-pattern>
</servlet-mapping>


Servlet简单示例

//通过注解配置该Servlet
@WebServlet(name="test",urlPatterns={"/basic.do"})
public class TestServlet extends HttpServlet{

//使用该方法可响应客户端的所有请求
public void service(HttpServletRequest req, HttpServletResponse resp)throws IOException{
PrintStream out = new PrintStream(resp.getOutputStream());
out.print("1234567890");//向页面输出这串字符串
}

}


Servlet与JSP的区别

Servlet中没有内置对象,都必须显示创建,而JSP有9个内置对象。

Servlet必须使用页面输出流逐行输出HTML标签。

JSP/Servlet的生命周期

客户端在第一次请求某个Servlet时创建Servlet实例

Web容器调用Servlet的init方法,对Servlet初始化

在Servlet类里重写的方法里处理客户端请求

关闭Web应用销毁Servlet前,调用destroy方法进行资源回收。

创建web应用启动时就创建实例的Servlet

创建Servlet实例有两种情况,一种是应用启动时,另一种是用户请求时。

应用启动时就创建实例的Servlet有种实现方法:

1.通过@WebServlet的loadOnStartup属性指定,该属性值是整型,且值越小越优先实例化。代码如下:

//通过注解配置该Servlet
@WebServlet(loadOnStartup=1)
public class TestServlet extends HttpServlet{

//使用该方法可响应客户端的所有请求
public void init(ServletConfig config)throws ServletException{
super.init(config);
System.out.println("后续处理省略....");
}

}


2.通过web.xml配置实现,代码如下:

<servlet>
<!-- 指定servlet名字 -->
<servlet-name>startupServlet</servlet-name>
<!-- Servlet实现类:自定义的Servlet -->
<servlet-class>com.zrgk.servlet.MyServlet</servlet-class>
<!-- 配置后Servlet在启动时就会创建实例了 -->
<load-on-startup>1</load-on-startup>
</servlet>


*获取Servlet的配置参数

为配置Servlet参数有两种方式:

通过注解
@WebServlet
里的initParams属性指定

通过在web.xml中的
<servlet...>
元素中添加
<init-param...>
子元素来指定

获取Servlet的配置参数

获取Servlet的配置参数,是通过ServletConfig对象完成的:

ServletConfig config = this.getServletConfig();

String key = config.getInitParameter(“配置参数的key名”);

示例代码片:

@WebServlet(name="test",
urlPatterns={"/basic.do"},
initParams={
@WebInitParam(name="userName",value="peter"),
@WebInitParam(name="age",value="100")
}
)
public class TestServlet extends HttpServlet{

//使用该方法可响应客户端的所有请求
public void service(HttpServletRequest req, HttpServletResponse resp)throws IOException{
//获取config对象
ServletConfig config = this.getServletConfig();
//通过config对象获取Servlet的配置参数
String userName = config.getInitParameter("userName");
String age = config.getInitParameter("age");
//打印参数结果
System.out.println(userName+"="+age);
PrintStream out = new PrintStream(resp.getOutputStream());
out.print("1234567890");
}

}


以web.xml的配置方式的代码片:

<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.zrgk.servlet.TestServlet</servlet-class>
<init-param>
<param-name>userName</param-name>
<param-value>peter</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>100</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/basic.do</url-pattern>
</servlet-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet jsp