前言
接下来的三篇博客我会分别介绍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 继承 HttpServlet3、在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程序