JavaEE实战——Servlet入门、Servlet生命周期、绝对路径、ServletContext

前言

接下来的三篇博客我会分别介绍Servlet的以下三个方面:

1、Servlet程序编写 ----- 生命周期
2、ServletAPI Request Response 
3、Cookie 和 Session 

Servlet的作用:Servlet 用来 动态web资源 开发

静态web资源 : 固定数据文件
动态web资源 : 通过程序动态生成数据文件 

Servlet技术基于Request-Response编程模型 ---- HTTP协议也是基于请求响应 模型 

* Servlet技术 用来 开发基于HTTP协议的 web 应用程序 

接触 JavaEE API ------ 程序 接口 和 已经实现接口 类的 使用 

JavaEE ---- Java Platform, Enterprise Edition  缩写 

Servlet快速入门

创建步骤

1、创建web project 

2、编写 class 继承 HttpServlet 
3、在web.xml 配置 Servlet程序 虚拟访问路径 
* 用户在浏览器上通过这个路径 访问编写Servlet程序 

4、覆盖doGet或者doPost方法 进行输出

package ustc.lichunchun.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet{
	// 覆盖 doGet 和 doPost
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// 处理 get方式请求
		System.out.println("get 请求 ...");
		
		// 设置响应流 编码问题 (必须和HTML/meta标签中的charset一致)
		resp.setContentType("text/html;charset=utf-8");
		
		// 生成 hello.html 相同内容
		PrintWriter out = resp.getWriter(); // 获得向浏览器输出流
		// 通过 out 流 生成 html
		out.println("<html>");
		out.println("<head>");
		out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">");//注意转义字符
		out.println("<head>");
		out.println("<body>");
		out.println("<h1>Hello,这是一个 由Servlet 动态生成网页!</h1>");
		out.println("</body>");
		out.println("</html>");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// 处理 post方式请求
		System.out.println("post 请求 ...");
		
	}
}

配置细节

    |--<servlet></servlet>
        |--<servlet-name> 为Servlet程序 命名
        |--<servlet-class> Servlet全路径:包名.类名
    |--<servlet-mapping></servlet-mapping>
        |--<servlet-name> Servlet 名称

        |--<url-pattern> 用户在浏览器通过/hello 访问Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<!-- 配置全局初始化参数,所有Servlet都可以 访问 -->
	<context-param>
		<param-name>hobby</param-name>
		<param-value>电音</param-value>
	</context-param>
    <!-- 用户 通过 /init 访问Servlet -->
	<servlet>
		<servlet-name>InitServlet</servlet-name>
		<servlet-class>ustc.lichunchun.servlet.InitServlet</servlet-class>
		<!-- 配置 Servlet在服务器启动时 进行加载 -->
		<load-on-startup>1</load-on-startup>
  	</servlet>
  	<servlet-mapping>
		<servlet-name>InitServlet</servlet-name>
		<url-pattern>/init</url-pattern>
		<url-pattern>/init2</url-pattern>
	</servlet-mapping>
  
  <!-- 为 HelloServlet 配置 浏览器可以访问虚拟 路径 -->	
  <servlet>
    <!-- 为 Servlet程序  命名 -->
  	<servlet-name>HelloServlet</servlet-name>
  	<!-- Servlet全路径 : 包名.类名 -->
  	<servlet-class>ustc.lichunchun.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>HelloServlet2</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.HelloServlet2</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ChengfabiaoServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.ChengfabiaoServlet</servlet-class>
  </servlet>
  <servlet>
    <!-- 在Servlet标签内部 配置初始化参数 -->
    <servlet-name>ConfigServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.ConfigServlet</servlet-class>
    <!-- 通过 init-param -->
    <init-param>
    	<param-name>MyName</param-name>
    	<param-value>李春春</param-value>
    </init-param>
    <init-param>
    	<param-name>MySchool</param-name>
    	<param-value>中国科学技术大学</param-value>
    </init-param>
  </servlet>
  <servlet>
    <servlet-name>ContextServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.ContextServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>CountServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.CountServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>CountShowServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.CountShowServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>AServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.AServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>BServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.BServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>LetterCountServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.LetterCountServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>LetterResultServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.LetterResultServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ReadFileServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.ReadFileServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>DefaultServlet</servlet-name>
    <servlet-class>ustc.lichunchun.servlet.DefaultServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <!-- 为Servlet程序 指定 浏览器访问 虚拟路径 -->
  	<servlet-name>HelloServlet</servlet-name>
  	<!-- 用户 在 浏览器通过/hello 访问Servlet -->
  	<url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>HelloServlet2</servlet-name>
    <url-pattern>/hello2</url-pattern>
    <url-pattern>/abc/*</url-pattern>
    <!-- 扩展名 匹配 必须不能 用 / 开始 -->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ChengfabiaoServlet</servlet-name>
    <!-- 客户端绝对路径 /day05/chengfabiao -->
    <url-pattern>/chengfabiao</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ConfigServlet</servlet-name>
    <url-pattern>/config</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ContextServlet</servlet-name>
    <url-pattern>/context</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CountServlet</servlet-name>
    <url-pattern>/count</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CountShowServlet</servlet-name>
    <url-pattern>/countshow</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AServlet</servlet-name>
    <url-pattern>/a</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>BServlet</servlet-name>
    <url-pattern>/b</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>LetterCountServlet</servlet-name>
    <url-pattern>/servlet/lettercount</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>LetterResultServlet</servlet-name>
    <url-pattern>/servlet/result</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ReadFileServlet</servlet-name>
    <url-pattern>/readfile</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>DefaultServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Servlet作用:动态生成 网页文件 

Servlet执行过程:

1、用户在客户端发起url请求 : http://localhost/day05/hello ----- web.xml /hello 映射 HelloServlet程序

2、用户提交请求时,get方式提交 执行 HelloServlet的 doGet方法 post方式提交 执行 HelloServlet的doPost 方法 


对Servlet编译运行类库的理解:

Servlet程序在编写和运行时,需要依赖javaee 类库 (API支持)(Jar包)

* 在学习javase  List 需要 import java.util.List  需要 jre/lib/rt.jar 
* MyEclipse 自动导入 javaee5 liberary  存在 javaee.jar  提供 Servlet 需要类 API支持 (开发环境使Servlet程序正常编译
* Serlvet程序运行tomcat环境中 没有javaee.jar , 在 tomcat/lib/servlet-api.jar 提供Servlet程序运行需要 类API 支持 (运行环境需要的)

示例:手动编写Servlet运行

1、在webapps 新建 day05test目录 --- 虚拟应用
2、在day05test 新建 WEB-INF/classes
3、将编写Servlet的java源码文件 放入 classes ,在 WEB-INF 配置web.xml 
4、编译Servlet的 java程序 
javac -classpath E:\apache-tomcat-6.0.14\lib\servlet-api.jar HelloServlet.java  // 通过 -classpath 指定 Servlet需要jar 包
生成Servlet package结构 
javac -d . -classpath E:\apache-tomcat-6.0.14\lib\servlet-api.jar HelloServlet.java

这时,就可以在浏览器中使用 http://192.168.1.104/day05test/hello 来访问这个Servlet程序

Servlet运行原理剖

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值