JavaWeb笔记一、Servlet 详解

一、创建一个 Servlet 简单实现类

1、创建一个 HelloServlet 类(测试 Servlet 接口方法)

 1 //创建一个 HelloServlet 类并实现 Servlet 接口
 2 public class HelloServlet implements Servlet {
 3
 4     // Tomcat 停止服务时 Servlet 的销毁方法
 5     @Override
 6     public void destroy() {
 7         System.out.println("destroy.....");
 8     }
 9
10     @Override
11     public ServletConfig getServletConfig() {
12         System.out.println("getServletConfig");
13         return null;
14     }
15
16     @Override
17     public String getServletInfo() {
18         System.out.println("getServletInfo");
19         return null;
20     }
21
22     // Servlet 加载时 初始化方法
23     @Override
24     public void init(ServletConfig servletConfig) throws ServletException {
25         System.out.println("init");
26     }
27
28     // servlet 运行时的方法 每次请求调用
29     @Override
30     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
31         System.out.println("service");
32     }
33
34     // HelloServlet 实现类的构造方法 加载时调用
35     public HelloServlet() {
36         System.out.println("HelloServlet‘s constructor");
37     }
38
39 }

2、配置和映射 Servlet

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 5     id="WebApp_ID" version="3.1">
 6
 7     <!-- 配置和映射 Servlet -->
 8     <servlet>
 9         <!-- Servlet 注册的名字 -->
10         <servlet-name>HelloServlet_java</servlet-name>
11         <!-- Servlet 的全类名 -->
12         <servlet-class>com.panku.javaWeb1.HelloServlet</servlet-class>
13         <!-- 可以指定 Servlet 被创建的时机 -->
14         <load-on-startup>1</load-on-startup>
15     </servlet>
16
17     <servlet-mapping>
18         <!-- 需要和某一个 Servlet 节点的 servlet-name 子节点的文本节点一致 -->
19         <servlet-name>HelloServlet_java</servlet-name>
20         <!-- 映射的具体访问路径: / 代表当前 Web 应用的根目录. -->
21         <url-pattern>/hello</url-pattern>
22     </servlet-mapping>
23
24 </web-app>

二、Servlet 生命周期

Servlet 生命周期的方法: 以下方法都是由 Serlvet 容器负责调用.

1). 构造器: 只被调用一次. 只有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器. 这说明 Serlvet 的单实例的!

2). init 方法: 只被调用一次. 在创建好实例后立即被调用. 用于初始化当前 Servlet.

3). service: 被多次调用. 每次请求都会调用 service 方法. 实际用于响应请求的.

4). destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源.

三、ServletConfig 对象(getInitParameterNames、getInitParameter、getServletName(不常用)、getServletContext四个接口方法)

1、在 web.xml 文件中配置 servlet 的初始化参数(init-param 节点)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 5     id="WebApp_ID" version="3.1">
 6
 7     <!-- 配置和映射 Servlet -->
 8     <servlet>
 9         <!-- Servlet 注册的名字 -->
10         <servlet-name>HelloServlet_java</servlet-name>
11         <!-- Servlet 的全类名 -->
12         <servlet-class>com.panku.javaWeb1.HelloServlet</servlet-class>
13
14         <!-- 配置 Servlet 的初始化参数 -->
15         <init-param>
16             <!-- 参数名 -->
17             <param-name>user</param-name>
18             <!-- 参数值 -->
19             <param-value>root</param-value>
20         </init-param>
21
22         <init-param>
23             <param-name>password</param-name>
24             <param-value>123456</param-value>
25         </init-param>
26
27         <!-- 可以指定 Servlet 被创建的时机 -->
28         <load-on-startup>1</load-on-startup>
29     </servlet>
30
31     <servlet-mapping>
32         <!-- 需要和某一个 Servlet 节点的 servlet-name 子节点的文本节点一致 -->
33         <servlet-name>HelloServlet_java</servlet-name>
34         <!-- 映射的具体访问路径: / 代表当前 Web 应用的根目录. -->
35         <url-pattern>/hello</url-pattern>
36     </servlet-mapping>
37
38 </web-app>

2、servlet实现类的 init()方法中 ServletConfig 对象实例(ServletConfig的getInitParameterNames、getInitParameter、getServletName(不常用)方法实例)

 1     // Servlet 加载时 初始化方法
 2     @Override
 3     public void init(ServletConfig servletConfig) throws ServletException {
 4         System.out.println("init");
 5
 6         // 获取初始化参数值
 7         String user = servletConfig.getInitParameter("user");
 8         System.out.println("user:" + user);
 9
10         // 获取初始化参数名和值
11         Enumeration<String> names = servletConfig.getInitParameterNames();
12         while (names.hasMoreElements()) {
13             String name = names.nextElement();
14             String value = servletConfig.getInitParameter(name);
15             System.out.println("^^name:" + name + ":" + value);
16         }
17
18         // 获取 Servlet 注册名称
19         String servletName = servletConfig.getServletName();
20         System.out.println(servletName);
21     }

3、在 servlet 实现类的 init()方法中 通过 ServletConfig 对象得到 ServletContext 对象

ServletContext的常见方法: getInitParameter()、getInitParameterNames()、getRealPath()、getContextPath()、getResourceAsStream()

 1     // Servlet 加载时 初始化方法
 2     @Override
 3     public void init(ServletConfig servletConfig) throws ServletException {
 4         System.out.println("init");
 5
 6         // WEB初始化参数: 可以为所有的 Servlet 所获取, 而 Servlet 的初始化参数只用那个 Serlvet 可以获取.
 7         // 获取 ServletContext 对象
 8         ServletContext servletContext = servletConfig.getServletContext();
 9
10         // 获取当前 WEB 初始化参数值
11         String driver = servletContext.getInitParameter("driver");
12         System.out.println("driver:" + driver);
13
14         // 获取当前 WEB 初始化参数名和值
15         Enumeration<String> name2 = servletContext.getInitParameterNames();
16         while (name2.hasMoreElements()) {
17             String name = name2.nextElement();
18             String value = servletContext.getInitParameter(name);
19             System.out.println("-->" + name + ":" + value);
20         }
21
22         // 获取当前 WEB 应用的某一个文件在服务器上的绝对路径, 而不是不部署前的路径
23         String realPath = servletContext.getRealPath("/111.txt");
24         // 不是 E:\eclipse\workspace\JavaWeb\WebContent\111.txt
25         System.out.println(realPath);
26
27         // 获取当前 WEB 应用的名称
28         String contextPath = servletContext.getContextPath();
29         System.out.println(contextPath);
30
31         // 获取一个文件的输入流(部署前的路径)
32         try {
33             ClassLoader classLoader = getClass().getClassLoader();
34             InputStream is = classLoader.getResourceAsStream("jdbc.properties");
35             System.out.println("1." + is);
36         } catch (Exception e) {
37             e.printStackTrace();
38         }
39
40         // 获取一个文件的输入流(服务器上的路径)
41         try {
42             InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
43             System.out.println("2." + is2);
44         } catch (Exception e) {
45             e.printStackTrace();
46         }
47     }

四、servlet 实现类的 service()方法中的 Request 对象

1、Request 的常用方法: getParameter(String name)、getParameterValues(String name)、getParameterNames()、getParameterMap()

 1     // 用于应答请求: 因为每次请求都会调用 service() 方法
 2     // ServletRequest: 封装了请求信息, 可以从中获取到任何的请求信息
 3     // ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现
 4     @Override
 5     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
 6         System.out.println("请求成功.......");
 7         System.out.println(request);
 8
 9         // String getParameter(String name): 根据请求参数的名字, 返回参数值.
10         String user = request.getParameter("user");
11         String password = request.getParameter("password");
12         System.out.println(user + "," + password);
13
14         // getParameter()方法只能获取一个参数值
15         String interesting = request.getParameter("interesting");
16         System.out.println(interesting);
17
18         // String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组
19         String[] interestings = request.getParameterValues("interesting");
20         for (String string : interestings) {
21             System.out.println("-->" + string);
22         }
23
24         // Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,类似于
25         // ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.
26         Enumeration<String> names = request.getParameterNames();
27         while (names.hasMoreElements()) {
28             String name = names.nextElement();
29             String valuee = request.getParameter(name);
30             System.out.println("==>" + name + ", " + valuee);
31         }
32
33         // Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.
34         Map<String, String[]> map = request.getParameterMap();
35         for (Map.Entry<String, String[]> entry : map.entrySet()) {
36             System.out.println("**" + entry.getKey() + ":" + Arrays.asList(entry.getValue()));
37         }
38     }

2、httpServletRequest 的常用方法:getRequestURI()、getMethod()、getQueryString()、getServletPath()

 1     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
 2         System.out.println("请求成功.......");
 3         System.out.println(request);
 4         // 获取请求的 URI
 5         HttpServletRequest httpServletRequest = (HttpServletRequest) request;
 6         String requestURI = httpServletRequest.getRequestURI();
 7         System.out.println(requestURI);
 8
 9         // 获取请求方式
10         String method = httpServletRequest.getMethod();
11         System.out.println(method);
12
13         // 若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
14         String queryString = httpServletRequest.getQueryString();
15         System.out.println(queryString);
16
17         // 获取请求的 Serlvet 的映射路径
18         String servletPath = httpServletRequest.getServletPath();
19         System.out.println(servletPath);
20     }

五、servlet 实现类的 service()方法中的 Response 对象

Response 目前常用方法:setContentType()、getWriter()

 1     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
 2         System.out.println("请求成功.......");
 3         System.out.println(request);
 4         // 设置响应方式
 5         response.setContentType("application/msword");
 6
 7         // 在页面响应一个内容
 8         PrintWriter out = response.getWriter();
 9         out.println("HelloWorld...");
10     }

六、GenericServlet 实现 Servelt、ServletConfig接口

七、HttpServlet 继承 GenericServlet类

时间: 2024-10-28 22:09:54

JavaWeb笔记一、Servlet 详解的相关文章

servlet详解(第一篇)

servlet基本概述 生命周期方法: void init(ServletConfig):出生之后(1次): void service(ServletRequest request, ServletResponse response):每次处理请求时都会被调用: void destroy():临死之前(1次): 特性: 单例,一个类只有一个对象:当然可能存在多个Servlet类! 线程不案例的,所以它的效率是高的! Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法.

【java项目实战】Servlet详解以及Servlet编写登陆页面(二)

Servlet是Sun公司提供的一门用于开发动态web网页的技术.Sun公司在API中提供了一个servlet接口,我们如果想使用java程序开发一个动态的web网页,只需要实现servelet接口,并把类部署到web服务器上就可以运行了. 到底什么是Servlet呢? 通俗一点,只要是实现了servlet接口的java程序,均称Servlet.Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小

IOS开发学习笔记(1)-----UILabel 详解

1. [代码][C/C++]代码     //创建uilabelUILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];//设置背景色label1.backgroundColor = [UIColor grayColor];//设置taglabel1.tag = 91;//设置标签文本label1.text = @"Hello world!";//设置标签文本字体和字体大小label1.

IOS开发学习笔记(2)-----UIButton 详解

1. [代码][C/C++]代码     //这里创建一个圆角矩形的按钮    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];    //    能够定义的button类型有以下6种,//    typedef enum {//        UIButtonTypeCustom = 0,          自定义风格//        UIButtonTypeRoundedRect,        

Servlet详解

1.   Servlet简介 l  Servlet是服务器端的重要组件,直译为服务端的小程序,它属于动态资源,用来处理请求,服务器接收到请求后会调用Servlet来处理请求. l  Servlet的主要作用 n  接收请求 n  处理请求 n  完成响应 l  例如: 当我们要完成一个登录功能时,用户会将输入的用户名和密码以POST请求的形式发送到服务器,但是服务器本身并不具有能力来读取用户发送的用户名和密码,也就不可能对用户名和密码进行验证,所以当服务器收到这类请求后需要将请求转个一个Serv

JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate框架概述 什么是Hibernate? 框架:软件的半成品,完成部分代码的功能. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操作数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的web应用程序中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成

JAVAWEB开发之事务详解(mysql与JDBC下使用方法、事务的特性、锁机制)和连接池的详细使用(dbcp以d3p0)

事务简介 事务的概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功 在开发中,有事务的存在,可以保证数据的完整性. 注意:数据库默认事务是自动提交的,也就是发一条SQL 就执行一条.如果想多条SQL语句放在一个事务中执行,需要添加事务有关的语句. 如何开启事务? 事务的操作方式: 创建表: create table account( id int primary key auto_increment, name varchar(20), money double

CoAP学习笔记——CoAP格式详解

0 前言 CoAP是受限制的应用协议(Constrained Application Protocol)的代名词.在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的.但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求.为了让小设备可以接入互联网,CoAP协议被设计出来.CoAP是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上.CoAP协议非常小巧,最小的数据包仅为4字节. 更多博文请参考--[物联网学习笔记--索引博文] 1 Co

Struts2学习笔记(二)——配置详解

1.Struts2配置文件加载顺序: default.properties(默认常量配置) struts-default.xml(默认配置文件,主要配置bean和拦截器) struts-plugin.xml(配置插件) struts.xml(配置action或者常量等) struts.properties(常量配置) web.xml(配置JavaEE,如:监听器和过滤器) 2.Struts2配置文件详解 1)default.properties default.properties是Struts

算法笔记--sg函数详解及其模板

sg函数大神详解:http://blog.csdn.net/luomingjun12315/article/details/45555495 模板: int f[N],SG[N]; bool S[M]; void getSG(int n) { memset(SG,0,sizeof(SG)); for(int i=1;i<=n;i++) { memset(S,false,sizeof(S)); for(int j=1;f[j]<=i&&j<M;j++) { S[SG[i-f