javaweb之servlet的入门

1servlet的入门

1.1 什么是servlet

1servlet 是运行在 Web 服务器中的小型 Java 程序。

2servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

 

1.2 实现现servlet

1)实Servlet接口

* 如果实现接口,需要把接口里面的方法都实现

 

2)继承GenericServlet父类, HttpServlet子类

* 如果继承类,'不需要把类中的方法都实现

 

3)需要web服务器知道java程序不是一个普通的java程序,而是一个servlet

* 通过配置进行操作

* web项目中,'web.xml里面进行配置

1.3 servlet的入门程序

1)写一个servlet,实现向页面输出内容 hello servlet

2)步骤

第一步,创建一个类,使用这个类继承GenericServlet

第二步,实现类里面的 service(ServletRequest req, ServletResponse res)

* ServletRequest代表请求

* ServletResponse代表响应

第三步,使用ServletResponse向页面输出内容 getWriter()

public void service(ServletRequest arg0, ServletResponse arg1)

throws ServletException, IOException {

// TODO Auto-generated method stub

arg1.getWriter().write("hello servlet");

 System.out.println("service............");

}

第四步,在web项目中的web.xml进行配置,'让服务器知道是一个servlet

*

servletDemo1

cn.itcast.servlet.ServletDemo1

servletDemo1

/hello

 javaweb之servlet的入门_第1张图片

2servlet的执行过程(画图分析执行过程)

2.1 执行过程

1)根据在浏览器地址栏输入的地址,找web.xml中相同的url-pattern

2)找到了url-pattern,对应的servlet-name

3)根据找到的servlet-name到另外一个标签里面(servlet)相同名称的servlet-name

4)在servlet标签里面找到了相同名称的servlet-name,找servlet的包类路径servlet-class

'利用反射原理,让servlet里面的service方法执行

'访问类的时候,执行service

 javaweb之servlet的入门_第2张图片

3servlet的生命周期

3.1 什么是生命周期:一个人从出生到死亡

3.2 servlet的生命周期:从servlet创建到servlet销毁的过程

3.3 servlet接口里面有五个方法,其中有三个方法是与生命周期相关的方法

1init方法,在servlet创建时候执行这个方法,执行一次,servlet在第一次访问时候创建

2service方法,在每次访问servlet时候会执行这个方法,执行多次

3destroy方法,销毁servlet时候执行这个方法,执行一次

4servlet开发细节的问题

4.1 HttpServletRequestServletRequest关系

'http接口的协议:子类

'不带的接口协议:父类

    HttpServletResponseServletResponse关系

1servletRequestserlvetResponse不带协议

     HttpServletRequestHttpServletResponse带协议

2sun公司设计时候,认为未来互联网的发展有很多的协议,目前只是http协议

 

4.2 GenericServlet类里面有init没有参数的方法和init有参数的方法的关系

1)有参数init方法最终也要调用init没有参数的方法,

'直接使用init没有参数的方法就可以了

'''''''

4.3 HttpServlet类里面service方法和doxxx方法关系

1'根据提交的方式',调用不同的doXX的方法

比如提交方式是get,调用doGet方法;

比如提交方式是post,调用doPost方法

2)一般在开发中,直接写doGetdoPost方法就可以了

3)一般在创建servlet时候,直接继承HttpServlet'实现servlet

'自动在xml中生成配置文件'

 javaweb之servlet的入门_第3张图片

4.4 在服务器启动时候创建servlet

1)通过配置文件进行配置 ,在servlet标签里面写标签

正整数的值

 

4.5 简化编程

1)当通过get提交方式时候,实现从1加到100

     当通过post提交方式时候,实现从1加到100

2)无论什么提交方式,代码都能执行到

* dopost方法里面调用doget方法'求和功能 '

5servleturl-pattern标签的配置

5.1 配置有三种方式

第一种方式:完全路径匹配

1)写法 : /aa   /hello

 

第二种方式:目录匹配

1)写法:  /aa/*

 

*/

第三种方式:扩展名匹配

1)写法:  *.do   *.action

 

5.2 优先级

'哪个更精确,就匹配哪个.

完全路径匹配 > 目录匹配 > 扩展名匹配

5.3 练习

 

6、开发中路径的问题

'相当于我当前文件.

6.1 相对路径

1)在html文件中引入图片

2)有三种情况

第一种:图片和html在同一个目录下面

* 直接写图片的名称

"a.jpg"

第二种:图片在html的上层目录

* ../ 表示上层目录

"../a.jpg"

第三种:图片在html的下层目录

* 直接写目录名称和图片名称

"cc/a.jpg"

 

6.2 绝对路径(一般开发中都使用)

'注意在MyEclipse,WebRoot是存在,但是不需写该路径'

WebRoot位置:/day07-3/WebRoot/path02

1)第一种写法:http://ip地址+端口号/文件的路径

 

2)第二种写法:直接写 /项目名称/文件路径

'第一个/代表的是webApps的发布项目的根目录.

7、重定向和转发

7.1 重定向

1)使用的是客户端路径

2)重定向请求两次("或多次"),使用的是客户端路径,携带项目名称 ,比如 /day07/demo3

 

7.2 转发

'在同一个服务器中,转发.,故不需携带项目名称,.

1)使用的是服务端路径

2)转发请求一次,使用的是服务器端路径,不需要携带项目名称 , 比如 /demo4

转发信息.

 

8ServletConfig对象

8.0 创建ServletConfig对象

1)直接使用方法创建对象 getServletConfig()

 

8.1 得到当前运行的servlet的名称

1web.xmlConfigDemo1

2String getServletName()

**代码:

ServletConfig config = getServletConfig();

//得到当前运行的servlet名称

String name = config.getServletName();

System.out.println(name);

 

8.2 创建servletContext对象

1ServletContext getServletContext()

2)一般都使用 getServletContext()方法

 

8.3 获取初始化参数

1)在web.xml中进行配置初始化参数

 

       Config2

cn.itcast.cofig.Config2

'作用域在这个servlet里面...'''

    

     username

     root

    

    

     password

     123

'''''

    

  

servlet标签里面进行配置

2String getInitParameter(String name) :根据名称得到值(参数是初始化参数名称)

* 代码

//得到servletconfig对象

ServletConfig config = getServletConfig();

//getInitParameter(String name)

String username = config.getInitParameter("username");

String password = config.getInitParameter("password");

 

     Enumeration getInitParameterNames()  :得到所有的初始化参数的名称

* 代码

//得到servletconfig对象

ServletConfig config = getServletConfig();

//得到所有的初始化参数名称

Enumeration enumrEnumeration = config.getInitParameterNames();

//得到每个参数的名称

while(enumrEnumeration.hasMoreElements()) {

String name = enumrEnumeration.nextElement();

//根据name得到值

String value = config.getInitParameter(name);

System.out.println(name+" :: "+value);

}

 

9ServletContext对象

9.1 创建ServletContext对象

1)第一种方式,使用ServletConfig对象里面的方法 getServletContext()

2)第二种方式,直接使用 getServletContext()

 

9.2 获取全局的初始化参数

'1)配置全局初始化参数

  

url

localhost

  

  

2String getInitParameter(String name) :根据名称得到全局初始化参数的值

* 代码

//得到servletContext对象

ServletContext context = getServletContext();

//根据名称得到全局初始化参数的值

String url = context.getInitParameter("url");

String name = context.getInitParameter("name");

 

'枚举的对象的个数是有限的'

     Enumeration getInitParameterNames()  :得到所有的全局初始化参数的名称

* 代码

//得到servletContext对象

ServletContext context = getServletContext();

//使用方法得到所有的全局初始化参数的名称

Enumeration enumrEnumeration = context.getInitParameterNames();

//得到每个全局初始化参数的名称

while(enumrEnumeration.hasMoreElements()) {

String name = enumrEnumeration.nextElement();

String value = context.getInitParameter(name);

System.out.println(name+" :: "+value);

}

'重点'

9.3 在启动tomcat服务器时候,'会为每个项目创建一个servletContext对象',在这个项目里面如果通过servlet1

servletContext里面设置一个值,在这个项目里面的其他的servlet里面可以使用这个值

1servletContext域对象:在一定的范围内,存值和取值,范围是整个web项目

2)存值:setAttribute(String name, Object object)

3)取值:getAttribute(String name)

4)首先创建servlet1,通过servlet1servletContext里面设置一个值

     其次,再创建servlet2,在servlet2获取通过servlet1设置的值

 

10、练习:统计网站的访问次数

10.1 创建一个servlet,每次访问这个servlet计算一次访问

javaweb之servlet的入门_第4张图片

19.2 实现的步骤(分析图)

**代码

package cn.itcast.count;

 

import java.io.IOException;

 

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

 * 统计网站访问次数

 * @author asus

 *

 */

public class CountServlet extends HttpServlet {

@Override

public void init() throws ServletException {

// 得到servletContext对象

ServletContext context = getServletContext();

//初始值

context.setAttribute("num", 0);

}

 

/**

 *

 */

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//首先把servletContext里面的值取出来 +1 放回去

// 得到servletContext对象

ServletContext context = getServletContext();

//获取值

int num = (Integer) context.getAttribute("num");

//把获取的值+1 ,放回去

context.setAttribute("num", num+1);

response.getWriter().write("welcome");

}

 

/**

 *

 */

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

 

}

 

package cn.itcast.count;

 

import java.io.IOException;

 

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class ShowServlet extends HttpServlet {

 

/**

 * 显示访问的次数

 */

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 得到servletContext对象

ServletContext context = getServletContext();

//获取值

int num = (Integer) context.getAttribute("num");

response.getWriter().write("time: "+num);

}

 

/**

 *

 */

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

 

}

 

 

 

11、使用servletContext对象获取web项目中的资源

11.1 使用传统方式获取web项目中的文件

1)创建web项目,创建properties文件

url=localhost

username=root

password=123456

2)得到要操作文件的输入流,使用相对路径

* classes/db1.properties : 相对路径

* 相对虚拟机的位置

* web项目中,虚拟机在tomcat启动时候,tomcatbin里面

3)使用传统方式里面的相对路径,不能读取web项目中的文件

 javaweb之servlet的入门_第5张图片

**代码

package cn.itcast.read;

 

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

 * 使用传统方式读取web项目中的文件

 * @author asus

 *

 */

public class ServletDemo1 extends HttpServlet {

 

/**

 * classes/db1.properties : 相对路径

 * 相对虚拟机的位置

 * web项目中,虚拟机在tomcat启动时候,tomcatbin里面

 *

 */

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//创建对象

Properties p = new Properties();

//得到操作文件的输入流

InputStream in = new FileInputStream("classes/db1.properties");

//把文件的输入流放到对象里面

p.load(in);

//依次得到文件里面值

String url = p.getProperty("url");

String username = p.getProperty("username");

String password = p.getProperty("password");

System.out.println(url);

System.out.println(username);

System.out.println(password);

}

 

/**

 *

 */

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

 

}

 

11.2 使用servletContext对象读取web项目中的文件

1InputStream getResourceAsStream(java.lang.String path) :得到要操作文件的输入流

第一个操作:文件放到src下面

= 路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcatwebapps里面的具体的路径

= 代码

//路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat里面的具体的路径

InputStream in = context.getResourceAsStream("/WEB-INF/classes/db1.properties");

 javaweb之servlet的入门_第6张图片

'''记住''''''

第二个操作:文件放到包里面

= 路径:第一个位置 / 理解为项目名称;后面写文件在tomcatwebapps下面的具体的路径

= 代码

//路径:第一个位置 / 理解为项目名称;后面写文件在tomcatwebapps下面的具体的路径

'''''''''''''''

InputStream in = context.getResourceAsStream("

/WEB-INF/classes/cn/itcast/read/db2.properties");

' /代表了项目的名称

javaweb之servlet的入门_第7张图片

/开头的是绝对路径.

第三个操作:文件放到webroot下面

= 路径:第一个位置 / 理解为项目名称;后面写文件在tomcatwebapps下面的具体的路径

= 代码:

//路径:第一个位置 / 理解为项目名称;后面写文件在tomcatwebapps下面的具体的路径

InputStream in = context.getResourceAsStream("/db3.properties");

 javaweb之servlet的入门_第8张图片

* 注意:当把文件放到和webroot同级的目录下面,这个文件不会部署到tomcat里面,

所以使用servletContext对里面getResourceAsStream方法不能得到文件的内容

 javaweb之servlet的入门_第9张图片

(2)String getRealPath(java.lang.String path)  :得到要操作文件的完全路径(带盘符的路径)

 javaweb之servlet的入门_第10张图片

= 参数:和getResourceAsStream类似的

== 第一个位置 / ,项目名称;后面写文件在tomcatwebapps里面的具体的路径

 

= 代码

//使用getRealPath方法

//路径:第一个位置 / ,项目名称;后面写文件在tomcatwebapps里面的具体的路径

String path = context.getRealPath("/db3.properties");

//C:\Users\asus\Desktop\javaweb\day06\apache-tomcat-7.0.53\webapps\day07-7\db3.properties

//得到要操作文件的输入流

InputStream in = new FileInputStream(path);

12、使用类加载器读取文件

12.0 读取的文件的位置是 classes里面的文件

12.1 得到类加载器

1)首先得到Class

* 第一种方式:类名.class

* 第二种方式:对象.getClass()

* 第三种方式:Class.forName("包类路径")

2)使用Class得到类加载器

 

12.2 代码

//得到类的Class

Class clazz = ServletDemo1.class;

//得到类加载器

ClassLoader loader = clazz.getClassLoader();

//得到要操作文件的输入流

//文件的路径,因为读取的classes里面的文件,直接写文件的名称

InputStream in = loader.getResourceAsStream("db1.properties");

你可能感兴趣的:(servlet)