本文共 7542 字,大约阅读时间需要 25 分钟。
1、Servlet 是 JavaEE 规范之一。规范就是接口
2、Servlet 就是 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。 3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。1、编写一个类去实现 Servlet 接口
2、实现 service 方法,处理请求,并响应数据 3、到 web.xml 中去配置 servlet 程序的访问地址Servlet 程序的示例代码:
package loey.servlet1;import javax.servlet.*;import java.io.IOException;public class HelloServlet1 implements Servlet{ /** * service方法是专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("Hello Servlet1被访问了");}}
web.xml 中的配置:
HelloServlet1 loey.servlet1.HelloServlet1 HelloServlet1 /hello1
在浏览器输入地址http://localhost:8080/08-Servlet/hello1即可得到Hello Servlet1被访问了
常见的错误 1: url-pattern 中配置的路径没有以斜杠打头。 常见错误 2:servlet-name 配置的值不存在: 常见错误 3: servlet-class 标签的全类名配置错误1、执行 Servlet 构造器方法
2、执行 init 初始化方法 第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。 3、执行 service 方法 第三步,每次访问都会调用。 4、执行 destroy 销毁方法 第四步,在 web 工程停止的时候调用public class HelloServlet1 implements Servlet{ public HelloServlet1(){ System.out.println("1.构造器方法"); } @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("2.init初始化方法"); } /** * service方法是专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("3.Hello Servlet1被访问了"); } @Override public void destroy() { System.out.println("4.destroy销毁方法"); }}
public class HelloServlet1 implements Servlet{ /** * service方法是专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("3.Hello Servlet1被访问了"); // 类型转换(因为它getMethod()方法 HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; // 获取请求的方式 String method = httpServletRequest.getMethod(); if("GET".equals(method)){ doGet(); }else if("POST".equals(method)){ doPost(); } } /** * 做get请求的操作 */ public void doGet(){ System.out.println("get请求"); } /** * 做post请求的操作 */ public void doPost(){ System.out.println("post请求"); }}
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
1、编写一个类去继承 HttpServlet 类 2、根据业务需要重写 doGet 或 doPost 方法 3、到 web.xml 中的配置 Servlet 程序的访问地址Servlet 类的代码:
public class HelloServlet2 extends HttpServlet { /** * doGet(在get请求的时候调用 * * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("HelloServlet2的doGet方法"); } /** * doPost(在post请求的时候调用 * * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("HelloServlet2 的doPost方法"); }}
web.xml 中的配置:
HelloServlet2 loey.servlet1.HelloServlet2 HelloServlet2 /hello2
菜单:new->Servlet 程序
配置 Servlet 的信息Servlet3.0:
步骤:
@Target({ ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebServlet { String name() default "";//相当于String[] value() default { };//代表urlPatterns()属性配置 String[] urlPatterns() default { };//相当于 int loadOnStartup() default -1;//相当于 WebInitParam[] initParams() default { }; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default ""; }
举例:
@WebServlet("/demo2")public class ServletDemo implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("Servlet3.0来了....."); } @Override public String getServletInfo() { return null; } @Override public void destroy() { }}
创建一个servlet,符合下列要求:
TestInitServlet com.epoint.TestInitServlet name peter age 20 room 511 TestInitServlet /student/getinfo /stu/* *.inf
(2)、请写出使用注解方式配置该servlet的注解信息。
package com.epoint;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name="TestInitServlet",urlPatterns= { "/student/getinfo","/stu/*","*.inf"},initParams= { @WebInitParam(name="name",value="peter"), @WebInitParam(name="age",value="20"), @WebInitParam(name="room",value="511")})public class TestInitServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletConfig servletConfig = getServletConfig(); // System.out.println(servletConfig); System.out.println("初始化name的值:" + servletConfig.getInitParameter("name")); System.out.println("初始化age的值:" + servletConfig.getInitParameter("age")); System.out.println("初始化room的值:" + servletConfig.getInitParameter("room")); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
转载地址:http://zluki.baihongyu.com/