手动创建并且部署一个Servlet:
1.写代码 extends HttpServlet
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
request.setCharacterEncoding("GBK");
//1.设置响应类型
response.setContentType("text/html;charset=GBK");
//2.获取输出流
PrintWriter out = response.getWriter();
//3.使用输出流
out.println();
out.flush();
}
2.编译
tomcat安装目录/lib/servlet-api.jar
3.部署
1)创建web应用目录结构
webapps/myweb/
|-WEB-INF(必需)
|-classes
|-web.xml
|-form.html
2)编译后的pag.DateServlet.class copy myweb/WEB-INF/classes
3)编写web.xml (DateServlet)
<servlet>
<servlet-name>date</servlet-name>
<servlet-class>pag.DateServlet</servlet-class>
</servlet>
<servlet-mapping>
<serlvet-name>date</servlet-name>
<url-pattern>/mydate</url-pattern>
</servlet-mapping>
4.运行
http://127.0.0.1:8888/myweb/mydate
<a href="/myweb/mydate">....</a>
<form action="/myweb/mydate">....</form>
获取表单元素中输入的内容:
String str = request.getParameter("文本框的名字");
--------------------------------------
一、使用MyEclipse简化Servlet 开发
1.右键创建web project
2.Project Name:项目名称
Source folder:存在java源码
Web root folder:本地开发路径
Context root URL:服务器上的web应用名(http://127.0.0.1:8888/项目名/)
3.创建servlet(选择自动生成web.xml)
4.部署(配置tomcat,把自己安装tomcat和MyEclipse整合到一起)
配置tomcat的步骤:window-preferences-展开MyEclipse-展开servers-展开tomcat-选择tomcat6-选中Enable并且选择tomcat的安装路径
****注意:部署新项目后,需要重启Tomcat****
5.运行
http://127.0.0.1:8888/servlet2/hello
http://127.0.0.1:8888/testservlet/servlet/FirstServlet
URL的组成:
协议://主机名ip:端口号/资源
协议://主机名ip:端口号/web应用/url-pattern
协议://主机名ip:端口号/web应用/first.html
二、Servlet的生命周期
1)client --> server 请求发出后的一系列执行过程:
1.写URL,回车
2.tomcat接收请求,解析URL,得到 web应用名(web.xml)
3.继续解析URL,得到 url-pattern
4.在web.xml 匹配 url-pattern, 得到 servlet-name
5.根据 servlet-name 匹配到 servlet-class
6.tomcat 判断 client 是第一次请求
是- 使用JAVA反射机制创建servlet对象(构造方法),初始化(init),处理第1次请求(service)并且给client响应
否- 处理本次请求(service)并且给client响应
7.tomcat 等待状态,如果有client请求,从第2步循环
8.tomcat 停止或重启时,销毁 servlet(destroy方法被调用.回复servlet对象资源)
2)tomcat 中 servlet生命周期,分为4个阶段:
被调用的时间 被调的方法 被调次数
实例化 client第一次请求 构造方法 1次
初始化 第1次请求,实例化后 init 1
服务 有请求到 service N次
doGet/doPost
销毁 server停,重启 destroy 1
3)读取web.xml
1.在tomcat启动时,会依次加载webapps下所有web应用的web.xml,
同时web.xml的内容读到 ServletContext 对象(ServletContext是web.xml文件在内存中的表现)
一个web应用对应一个ServletContext.
2.每读到一个<servlet></servlet>,tomcat会把这个标签中的内容存到 ServletConfig对象中
应用:
ServletContext: 获取<context-param>中定义的全局初始化参数
web.xml中的配置(在<serlvet>标签的外面定义):
<context-param>
<param-name>encode</param-name>
<param-value>GBK</param-value>
</context-param>
获取值:
String str = this.getServletContext().getInitParameter("参数名");
ServletConfig: 获取<init-param>中定义的初始化参数
web.xml中的配置(在<serlvet>标签的里面定义):
<servlet>
<servlet-name>CountServlet</servlet-name>
<servlet-class>com.zpark.servlet.CountServlet</servlet-class>
<init-param>
<param-name>count</param-name>
<param-value>1000</param-value>
</init-param>
</servlet>
获取值:
String str = this.getServletConfig().getInitParameter("参数名");
4)servlet的多线程访问
注意:servlet编程时,因为tomcat运行过程中,只创建一个servlet对象,需要同时为多个client服务,就需要考虑线程安全问题
1.对敏感代码加线程锁
2.尽量不定义成员变量
三、Servlet的通讯[掌握]
Servlet:JAVA编写的在服务器上运行的小程序/类.接收client请求,处理,响应.
1.include:包含
应用场景:在复杂动态网页中,有公共部分可提取,可以把公共部分分别定义成servlet,使用include合并到一起.
使用: //获取请求分发对象
RequestDispatcher rd = request.getRequestDispatcher("/url-pattern");
//include
rd.include(request, response);
特点: 1)地址栏不变
2)服务器端的转发(在服务端运行)
3)看到的是所有servlet的结果之和
4)共享同一个request
2.forward:转发
应用场景: 一个Servlt从数据库中取出数据,转到另外一个servlet进行显示
使用: //获取请求分发对象
RequestDispatcher rd = request.getRequestDispatcher("/url-pattern");
//forward
rd.forward(request, response);
特点: 1)地址栏不变
2)服务器端的转发(在服务端运行)
3)永久转向(看到的是最后一个servlet的处理结果)
4)共享同一个request
1.写代码 extends HttpServlet
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
request.setCharacterEncoding("GBK");
//1.设置响应类型
response.setContentType("text/html;charset=GBK");
//2.获取输出流
PrintWriter out = response.getWriter();
//3.使用输出流
out.println();
out.flush();
}
2.编译
tomcat安装目录/lib/servlet-api.jar
3.部署
1)创建web应用目录结构
webapps/myweb/
|-WEB-INF(必需)
|-classes
|-web.xml
|-form.html
2)编译后的pag.DateServlet.class copy myweb/WEB-INF/classes
3)编写web.xml (DateServlet)
<servlet>
<servlet-name>date</servlet-name>
<servlet-class>pag.DateServlet</servlet-class>
</servlet>
<servlet-mapping>
<serlvet-name>date</servlet-name>
<url-pattern>/mydate</url-pattern>
</servlet-mapping>
4.运行
http://127.0.0.1:8888/myweb/mydate
<a href="/myweb/mydate">....</a>
<form action="/myweb/mydate">....</form>
获取表单元素中输入的内容:
String str = request.getParameter("文本框的名字");
--------------------------------------
一、使用MyEclipse简化Servlet 开发
1.右键创建web project
2.Project Name:项目名称
Source folder:存在java源码
Web root folder:本地开发路径
Context root URL:服务器上的web应用名(http://127.0.0.1:8888/项目名/)
3.创建servlet(选择自动生成web.xml)
4.部署(配置tomcat,把自己安装tomcat和MyEclipse整合到一起)
配置tomcat的步骤:window-preferences-展开MyEclipse-展开servers-展开tomcat-选择tomcat6-选中Enable并且选择tomcat的安装路径
****注意:部署新项目后,需要重启Tomcat****
5.运行
http://127.0.0.1:8888/servlet2/hello
http://127.0.0.1:8888/testservlet/servlet/FirstServlet
URL的组成:
协议://主机名ip:端口号/资源
协议://主机名ip:端口号/web应用/url-pattern
协议://主机名ip:端口号/web应用/first.html
二、Servlet的生命周期
1)client --> server 请求发出后的一系列执行过程:
1.写URL,回车
2.tomcat接收请求,解析URL,得到 web应用名(web.xml)
3.继续解析URL,得到 url-pattern
4.在web.xml 匹配 url-pattern, 得到 servlet-name
5.根据 servlet-name 匹配到 servlet-class
6.tomcat 判断 client 是第一次请求
是- 使用JAVA反射机制创建servlet对象(构造方法),初始化(init),处理第1次请求(service)并且给client响应
否- 处理本次请求(service)并且给client响应
7.tomcat 等待状态,如果有client请求,从第2步循环
8.tomcat 停止或重启时,销毁 servlet(destroy方法被调用.回复servlet对象资源)
2)tomcat 中 servlet生命周期,分为4个阶段:
被调用的时间 被调的方法 被调次数
实例化 client第一次请求 构造方法 1次
初始化 第1次请求,实例化后 init 1
服务 有请求到 service N次
doGet/doPost
销毁 server停,重启 destroy 1
3)读取web.xml
1.在tomcat启动时,会依次加载webapps下所有web应用的web.xml,
同时web.xml的内容读到 ServletContext 对象(ServletContext是web.xml文件在内存中的表现)
一个web应用对应一个ServletContext.
2.每读到一个<servlet></servlet>,tomcat会把这个标签中的内容存到 ServletConfig对象中
应用:
ServletContext: 获取<context-param>中定义的全局初始化参数
web.xml中的配置(在<serlvet>标签的外面定义):
<context-param>
<param-name>encode</param-name>
<param-value>GBK</param-value>
</context-param>
获取值:
String str = this.getServletContext().getInitParameter("参数名");
ServletConfig: 获取<init-param>中定义的初始化参数
web.xml中的配置(在<serlvet>标签的里面定义):
<servlet>
<servlet-name>CountServlet</servlet-name>
<servlet-class>com.zpark.servlet.CountServlet</servlet-class>
<init-param>
<param-name>count</param-name>
<param-value>1000</param-value>
</init-param>
</servlet>
获取值:
String str = this.getServletConfig().getInitParameter("参数名");
4)servlet的多线程访问
注意:servlet编程时,因为tomcat运行过程中,只创建一个servlet对象,需要同时为多个client服务,就需要考虑线程安全问题
1.对敏感代码加线程锁
2.尽量不定义成员变量
三、Servlet的通讯[掌握]
Servlet:JAVA编写的在服务器上运行的小程序/类.接收client请求,处理,响应.
1.include:包含
应用场景:在复杂动态网页中,有公共部分可提取,可以把公共部分分别定义成servlet,使用include合并到一起.
使用: //获取请求分发对象
RequestDispatcher rd = request.getRequestDispatcher("/url-pattern");
//include
rd.include(request, response);
特点: 1)地址栏不变
2)服务器端的转发(在服务端运行)
3)看到的是所有servlet的结果之和
4)共享同一个request
2.forward:转发
应用场景: 一个Servlt从数据库中取出数据,转到另外一个servlet进行显示
使用: //获取请求分发对象
RequestDispatcher rd = request.getRequestDispatcher("/url-pattern");
//forward
rd.forward(request, response);
特点: 1)地址栏不变
2)服务器端的转发(在服务端运行)
3)永久转向(看到的是最后一个servlet的处理结果)
4)共享同一个request