web初学之serverlet开发综述(一)

1 servlet的简介

什么是servlet

是sun公司提供的一门用于开发动态web资源的技术。

Sun公司在其API中提供了一个servlet接口,是用于来开发动态web资源

2 新建web工程来开发servlet

3 WebProject目录简介

4 编写一个servlert向页面输出文字

4-1 第一步 创建servlet类

创建方式

第一种,实现servlet接口,需要把接口里面的所有的方法都实现

第二种,继承GenericServlet类实现

第三种,继承HttpServlet类实现

public class Serdemo extends GenericServlet {

	// 第一步,写一个类,继承GenericServlet类实现
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		// 实现类里面的service(ServletRequest req, ServletResponse res)
		// 使用service方法里面ServletResponse向页面输出内容
		arg1.getWriter().append("Holle world ...");

	}

}


4-2 在xml的配置文件进行配置,让服务器知道类是一个servlet

<pre name="code" class="html"><!-- 第三步 让服务器知道类不是普通的类,而是一个servlet -->
	<servlet>
		<!-- 类的名称 -->
		<servlet-name>Serdemo</servlet-name>
		<!-- 类的全名称 -->
		<servlet-class>com.android.longs.Serdemo</servlet-class>
	</servlet>

	<servlet-mapping>
		<!-- 类的名称 -->
		<servlet-name>Serdemo</servlet-name>
		<!-- 访问的域名 -->
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>


5 将webProject发布到本地Tomcat

将mycelipse关联本地Tomcat

将我们创建编写的webProject发布到tomcat上

然后在弹出的窗口中选择我们创建的web项目添加

然后点击OK,进行查看

然后点击启动Tomcat

6 在浏览器中访问我们刚刚编写的serverlet

我们可以看到在请求到的页面中输出的信息

7 serverlet  的执行过程图像分析

8 servlet的生命周期简述

public class Serdemo1 extends GenericServlet{
	@Override
	public void init() throws ServletException {
		super.init();
	}

	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {

	}
	@Override
	public void destroy() {
		super.destroy();
	}

}

与servlet的生命周期相关的三个方法

8-1 init()方法

* 在servlet创建时候执行这个方法

* 在访问servlet时候创建servlet,servlet创建一次

** init方法会执行一次

8-2 service()方法

* 每次请求servlet时候调用这个方法

* 这个方法执行多次

8-3 destroy()方法

* servlet销毁时候调用这个方法,执行一次

* 关闭服务器会销毁servlet(需要正常关闭服务器才能看到效果,非正常关闭服务器也可以销毁只是看不到效果)

9 随服务器启动时候创建servlet

在web.xml中进行配置,找到配置的servlet标签,在标签里面进行配置

<load-on-startup>正整数的值</load-on-startup>

注意:这个正整数的值不要写成1,在tomcat里面有默认的servlet,不要与tomcat里面默认的servet值冲突

创建一个serverlet类

public class HttpServerletDemo extends HttpServlet {
	@Override
	public void init() throws ServletException {
		super.init();
		System.out.println("tomacate first ... ");
	}
}

在web.xml中的配制

<servlet>
	<servlet-name>HttpServerletDemo</servlet-name>
	<servlet-class>com.android.longs.HttpServerletDemo</servlet-class>
	<load-on-startup>3</load-on-startup>
    </servlet>

	<servlet-mapping>
  		<!-- 类的名称 -->
		<servlet-name>HttpServerletDemo</servlet-name>
  		<!-- 访问的域名 -->
		<url-pattern>/servlet/HttpServerletDemo</url-pattern>
	</servlet-mapping>

当我们将项目发布到本地的tomacat上,并启动的时候,会在相关的日志文件中输出标志启动的信息

10 URL-Pattern的配置

10-1  在web.xml中一个servlet可以对应多个servlet-mapping

当在一个servlet里面写了多个servlet-mapping,只能有一个mapping来执行

10-2  有三种配置

第一种: 完全路径匹配 首先写 /demo1

第二种:目录匹配 首先写 /aa/*

第三种:扩展名匹配 不需要写 / ,直接 *.action  *.do

优先级:

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

11 引用资源的路径简述

11-1 相对路径

第一种情况:图片和html文件在一个目录下面,在html中直接写图片的文件的名称

第二种情况 图片在html的上层目录 ../ : 表示上层目录(上一层)

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

11-2 绝对路径

(1)写法一:使用ip+端口号+访问的文件

http://127.0.0.1/day07/path01/a.jpg

(2)写法二:不需要写ip+端口号,直接写文件夹和文件名称

/day07/path01/a.jpg

11-3 绝对路径的分类有两种分类

第一种:客户端路径,和重定向操作在一起使用

* 请求两次,每次请求的路径使用的是客户端路径,需要带项目名称 /day08....

第二种:服务器端路径,和转发的操作在一起使用

* 请求一次,不带项目名称

* 比如现在找班上某个同学,在班级外部,说找某某班的张三,但是当在班级内部之后,

再找同学,不需要说找哪个班了

12 ServletConfig对象介绍

第一个用途:获取初始化参数

例:

首先在web.xml文件中配制初始化参数

其次在们的的HttpServerletDemo中获取SerletConfig对象

public class HttpServerletDemo extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//获取 ServletConfig对象
		ServletConfig servletConfig = getServletConfig();
		//获取初始化参数的值
		String username = servletConfig.getInitParameter("username");
		//
		System.out.println("username is : "+username);

	}
	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}

将项目发布到tomacat上,然后在浏览器中进行访问请求

然后我们可以在控制台中看到相应的输出信息

注: 在servlet里面可以配置多个初始化参数

<servlet>
		<servlet-name>HttpServerletDemo</servlet-name>
		<servlet-class>com.android.longs.HttpServerletDemo</servlet-class>

		<init-param>
			<param-name>username</param-name>
			<param-value>zhangsan</param-value>
		</init-param>

		<init-param>
			<param-name>password</param-name>
			<param-value>123</param-value>
		</init-param>

	</servlet>

第二种方式获取相应的值

public class HttpServerletDemo extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 得到servletconfig对象
		ServletConfig config = getServletConfig();
		// 得到所有初始化参数的名称
		Enumeration<String> enumration = config.getInitParameterNames();
		// 遍历枚举得到每个名称
		while (enumration.hasMoreElements()) {
			// 得到参数的名称
			String name = enumration.nextElement();
			// 得到名称对应的值
			String value = config.getInitParameter(name);
			System.out.println(name + " :: " + value);
		}

	}

	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

访问

注: 初始化参数在某个servlet里面配置的,所以只能在这个servlet里面才能获取初始化参数的值,在其他的servlet里面不能得到参数的值

第二个用途: 得到当前运行的servlet的名称

public class HttpServerletDemo extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 得到servletconfig对象
		ServletConfig servletConfig = getServletConfig();
		// 获取当前运行的servlet的名称
		String servletName = servletConfig.getServletName();

		System.out.println("servletName is "+servletName);

	}

	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}

当访问时会在控制台输出

第三个用途:得到servletContext对象

(1)一般都直接使用getServletContext()方法得到servletContext对象

		ServletContext servletContext = servletConfig.getServletContext();

13 ServletContext对象简述

servletContext的作用: 获取全局的初始化参数(在项目里面的所有的servlet里面都可以得到参数)

		ServletContext servletContext = servletConfig.getServletContext();

		String username = servletContext.getInitParameter("username");
ServletContext servletContext = servletConfig.getServletContext();

		// 获取所有的全局初始化参数的名称
		Enumeration initParameterNames = servletContext.getInitParameterNames();
		while (initParameterNames.hasMoreElements()) {
			// 获取初始化参数名称
			String name = (String) initParameterNames.nextElement();
			// 获取对应的值
			String values = servletContext.getInitParameter(name);

		}

第二个用途:servletContext对象也称为域对象,在一定的范围内,可以存值和取值

在启动tomcat服务器的时候,在服务器里面可能有多个项目,服务器会为每个项目创建一个servletContext对象,servletContext对象可以存值和取值

通过servlet1向servletContext里面设置一个值,在这个项目里面的所有的servlet里面都可以得到servlet1设置的那个值。

* 存值  setAttribute(String name, Object object)

第一个参数:名称

第二个参数:具体的值

* 取值  getAttribute(String name)

第一个参数:名称

servletContext对象的第三个用途读取web项目中的文件

读取ser目录下的文件

public class HttpServerletDemo extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		ServletContext servletContext = getServletContext();
		/*
		 * 在getResourceAsStream(String path)里面path写法固定 首先第一个位置 写 /: 理解为代表项目的名称;
		 * 在/后面写文件在tomcat里面的具体的路径
		 */
		InputStream in = servletContext.getResourceAsStream("/WEB-INF/classes/db.properties");

		int len =0;
		while ((len = in.read())!=-1) {
			 System.out.print((char)len);
		}

}

将项目布到tomcat上 并运行

读取包下面的文件

public class HttpServerletDemo extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		ServletContext servletContext = getServletContext();
		/*
		 * 在getResourceAsStream(String path)里面path写法固定 首先第一个位置 写 /: 理解为代表项目的名称;
		 * 在/后面写文件在tomcat里面的具体的路径
		 */
		InputStream in = servletContext.getResourceAsStream("/WEB-INF/classes/com/android/longs/db1.properties");

		int len =0;
		while ((len = in.read())!=-1) {
			 System.out.print((char)len);
		}
}

访问运行

读取webroot下面的文件

public class HttpServerletDemo extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 得到servletContext对象
		ServletContext context = getServletContext();
		// 使用getRealPath(String path)
		// 首先第一个位置 /,后面写文件在tomcat里面的具体的路径
		String path = context.getRealPath("/db2.properties");

	    System.out.println(path);

		Properties p = new Properties();
		// 得到输入流
		InputStream in = new FileInputStream(path);
		p.load(in);

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

		System.out.println("url is "+url);
		System.out.println("username is "+username);
		System.out.println("password is "+password);

}

}

访问运行

mysql基础综述(四) 点击打开链接

mysql数据库安装与卸载

点击打开链接

mysql数据库的基本操作(二)

点击打开链接

mysql数据库基本操作(三)使用JDBC来操作

点击打开链接

xml综合简述

点击打开链接
时间: 2024-10-22 22:37:43

web初学之serverlet开发综述(一)的相关文章

web初学之servelet开发综述(二)

实现登录页面的校验用户名与密码操作: 在登录页面输入用户名与密码,通过serverlet来检验用户名与密码,如果正确则向页面输出holleworld信息,如果不正确,就重定向回到登录页面 首先编写登录页面 login.html <!DOCTYPE html> <html> <head> <title>login.html</title> <meta http-equiv="keywords" content="

[web建站] 极客WEB大前端专家级开发工程师培训视频教程

极客WEB大前端专家级开发工程师培训视频教程  教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5与HTML4的区别2.HTML5新增的主体结构元素3.HTML5新增的的非主体结构元素 4.HTML5表单新增元素与属性5.HTML5表单新增元素与属性(续)6.HTML5改良的input元素的种类 7.HTML5增强的页面元素8.HTML5编辑API之Range对象(一)9.HTML5编辑API之

Java开发web的几种开发模式

Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和Wicket等等)并不了解,这里就不列举了. JSP+JAVABEAN开发模式:    特点:该模式将业务逻辑与页面表现进行分离,在一定程度上增加了程序的可调试性和维护性.    缺点:页面将控制与显示集于一身.    结论:简单,适合小型项目的快速构建与运行. JSP+Servlet+JavaBean开发模式:    特点:JSP作

Web前端与移动开发学习路线图

文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 这里整理的Web前端与移动开发学习路线图包含初中级两个部分,你可以通过百度云盘下载观看对应的视频 链接: http://pan.baidu.com/s/1nv0OMuP 密码: ipf9 好东西岂能独享,欢迎分享到你的朋友圈,推荐给更多的朋友.欢迎关注公众号,订阅视频更新,好视频岂容错过. step01初级教程 前端与移动开发基础视频 本套视频内容重点讲解Web前端基础知识,主要包含了用来定义页面内容的HTML,用来定义页面样式

跨终端Web之Hybrid App开发对比

Native App(以下简称Native)和Mobile Web(以下简称Web)二者混合开发的产物被称为Hybrid App(以下简称Hybrid).Hybrid并不是什么新概念,最早可以追溯到Symbian时代,直到iOS和Android出现之后才充分展现出价值. 一.Hybrid简史 Hybrid既利用了Native App丰富的设备API(Device API),又能拥有Mobile Web的跨平台.高效开发.快速发布的能力,对于相当庞大的应用场景而言都是适用的. Hybrid优势在于

初学seaJs模块化开发,利用grunt打包,减少http请求

原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —dist   //压缩后的目标文件夹 —lib   //各个模块 —drag    //拖拽模块 —scale   //缩放模块 —seajs    //seajs库 —seajs_drag    //入口的主文件main.js —main.js /*——————————————————————————

Python和web初学

Python和web初学 :屏幕抓取.CGI和mod_python 描述: 1.屏幕抓取:通过程序下载网页并提取其中的信息的过程. 方法: 1.使用正则表达式 2.结合程序Tidy(一个Python库)和XHTML解析 3.使用Beautiful Soup库 原文地址:https://www.cnblogs.com/yinminbo/p/11371190.html

ArcGIS二次开发综述

ArcGIS是一个全面的GIS平台,具有多种二次开发方式,为行业应用提供了丰富多样的定制手段.ArcGIS传统的二次开发方式主要是基于脚本和COM组件技术.随着云计算和移动计算的兴起和大数据的广泛应用,传统开发方式的缺点异常凸显,例如不能跨平台.开发难度大.性能低.无法利用云计算资源等,难以融入到主流的信息浪潮中.本文分析了ArcGIS的二次开发历史和最新的开发方式,讨论了其优缺点,指出未来ArcGIS二次开发的方向应具有可视化.开源.跨平台.云计算等特点.本综述为云计算和大数据背景下高校GIS

Java web基础学习之开发环境篇

Tomcat + Eclipse添加Java EE插件 因为之前进行Java SE学习已经配置了JDK,安装了Eclipse for Java SE,所以选择了在Eclipse上添加插件的方式来配置Web开发环境 Tomcat是免安装版,直接解压即可: Eclipse中"帮助-安装新软件",work with处选择Mars - http://download.eclipse.org/releases/mars(注意对应自己版本): 选择Web.Java EE那个选项进行安装即可,如果报