码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2016-03-26 07:31:15      阅读:1753      评论:0      收藏:0      [点我收藏+]

标签:



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综合简述

点击打开链接





 

   
 

 
 
 
 
  
 














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

标签:

原文地址:http://blog.csdn.net/zl18603543572/article/details/50976492

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!