- 浏览: 118803 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
wenbing2610:
其实用Struts实现图片上传比用Servlet实现容易多了。 ...
Struts2文件上传深入FileUploadInterceptor -
i_feng:
public class uploadImageAction ...
Struts2文件上传深入FileUploadInterceptor -
wenbing2610:
...
ognl.MethodFailedException
当一个servlet已经写好怎样来运行测试呢?但其实现在想想也不是很难。我想通过一个例子详细的说说,这样会有一个感性的把握。我会把我当时遇到的主要问题用黑体字写出,那时我当时主要浪费时间的地方,希
望大家也注意。(我用的运行环境是Tomcat5.0)
首先我们来写一个最简单的servlet:
package test;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out=response.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("<p>Hello!这是我的第一个Java Servlet程序。</p>");
out.println("</BODY>");
out.println("</HTML>");
}
}
由于我们把它进行了打包,所以把这个编译好的.class文件放到\Tomcat文件夹
\webapps\ourappfiles\WEB-INF\classes\test的文件夹下。
接着我们需要写一个调用该Servlet的html文件:
<html>
<head>
<title>Java Servlets Sample-Properties</title>
</head>
<body>
<form method="get" action="test.HelloServlet">
<input name="test" type="submit" value="Test HelloServlet servlet">
</body>
</html>
注意:这里的method不能用post,不然不会在IE中正常显示,我当初就是在这个地方没有弄好,浪费了好多时间。至于为什么这样写,我也弄不太清楚,由于水平有限,多多包涵
。 现在我们还差最后一步,编写我们的web.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd";>
<web-app>
<servlet>
<servlet-name>helloservlet</servlet-name>
<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloservlet</servlet-name>
<url-pattern>/test.HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
把编写好的web.xml文件放到\Tomcat文件夹\webapps\ourappfiles\WEB-INF下。 好了,现在万事俱备,就差启动Tomcat运行我们的Servlet了。
以上就是运行Servlet的几个步骤。
附录二
1.ServletConfig
一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。
ServletConfig包涵 ServletContext 和 一些 Name/Value pair
ServletContext接口封装了Web应用程序的上下文概念。
2.会话跟踪
(1) Session
当一个Client请求多个Servlets时,一个session可以被多个servlet共享。
通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。
(2) cookie
在Java Servlet中,如果你光 Cookie cookie = new Cookie(name,value)
那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。
如果要存储 cookie,需加一句 cookie.setMaxAge(200)
cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.
(3) URL Rewriting
在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL() 典型的用在两个地方
(1) out.print(“form action=\” ”);
out.print(response.encodeURL(“sessionExample”));
out.print(“form action=\” ”);
out.print(“method = GET>”);
(2) out.print(“<p><a href=\” ”);
out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”));
out.println(“\” >URL encoded </a>”);
3.SingleThreadModel
默认的,每一个servlet definition in a container只有一个servlet class的实例。 只有实现了SingleThreadModel,container才会让servlet有多个实例。
Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。
SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,
SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.
Single Thread Model一般使用在需要响应一个heavy request的时候,比如是一个需要和
数据库打交道的连接。
2. 在重载Servlet地init( )方法后,一定要记得调用super.init( );
3. the client通过发送一个blank line表示它已经结束request
而the server通过关闭the socket来表示response已结束了。
4. 一个Http Servlet可以送三种东西给Client
1) a single status code
2) any number of http headers
3) a response body
5. Servlet之间信息共享的一个最简单的方法就是
System.getProperties().put(“key”,”value”);
6. Post和Get
Post:将form内各字段名称和内容放置在html header内传送给server
Get: ?之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格
,以后将在server上恢复所带有的空格。
Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。
7. Web.xml就是Web Applicatin 的deployment descriptor
作用有:组织各类元素
设置init param
设置安全性
8. Request Dispatcher用来把接收到的request forward processing到另一个servlet
要在一个response里包含另一个servlet的output时,也要用到Request Dispatcher.
9. Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
setAttribute( )
getAttribute( )
removeAttribute( )
来共享对象
10. 利用request.getParameter( )得到的String存在字符集问题。
可以用 strTitle = request.getParameter(“title”);
strTitle = new String(strTitle.getBytes(“8859-1”),”gb2312”);
如果你希望得到更大得兼容性
String encoding = response.getCharacterEncoding(); //确定Application server用
什么编码来读取输入的。
strTitle = new String(strTitle.getBytes(encoding),”gb2312”);
而jsp页面是由web服务器负责解析的,你每次改了jsp页面以后是要保存后刷新的,而刷新的作用就是告诉web服务器重新解析,只有在web服务器启动的时候才可以解析!!,但与是否重启服务器无关,因为就算你重启服务器,它解析jsp的方式也是那样,是实现好了的,不
会改变!你只要用他解析jsp也就好了. 以上理解为要用新的只要重新解析!! 最好的理解方式是什么呢?? 你可以把jsp页面的"保存"对等与Servlet的加载,因为保存后在你不修改以前不发生变化 而加载后在你不重启服务器以前不发生变化 但是我的在我的印象中是不管使用什么服务器都是这个原理,也就是与服务器无关!!!
望大家也注意。(我用的运行环境是Tomcat5.0)
首先我们来写一个最简单的servlet:
package test;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out=response.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("<p>Hello!这是我的第一个Java Servlet程序。</p>");
out.println("</BODY>");
out.println("</HTML>");
}
}
由于我们把它进行了打包,所以把这个编译好的.class文件放到\Tomcat文件夹
\webapps\ourappfiles\WEB-INF\classes\test的文件夹下。
接着我们需要写一个调用该Servlet的html文件:
<html>
<head>
<title>Java Servlets Sample-Properties</title>
</head>
<body>
<form method="get" action="test.HelloServlet">
<input name="test" type="submit" value="Test HelloServlet servlet">
</body>
</html>
注意:这里的method不能用post,不然不会在IE中正常显示,我当初就是在这个地方没有弄好,浪费了好多时间。至于为什么这样写,我也弄不太清楚,由于水平有限,多多包涵
。 现在我们还差最后一步,编写我们的web.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd";>
<web-app>
<servlet>
<servlet-name>helloservlet</servlet-name>
<servlet-class>test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloservlet</servlet-name>
<url-pattern>/test.HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
把编写好的web.xml文件放到\Tomcat文件夹\webapps\ourappfiles\WEB-INF下。 好了,现在万事俱备,就差启动Tomcat运行我们的Servlet了。
以上就是运行Servlet的几个步骤。
附录二
1.ServletConfig
一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。
ServletConfig包涵 ServletContext 和 一些 Name/Value pair
ServletContext接口封装了Web应用程序的上下文概念。
2.会话跟踪
(1) Session
当一个Client请求多个Servlets时,一个session可以被多个servlet共享。
通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。
(2) cookie
在Java Servlet中,如果你光 Cookie cookie = new Cookie(name,value)
那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。
如果要存储 cookie,需加一句 cookie.setMaxAge(200)
cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.
(3) URL Rewriting
在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL() 典型的用在两个地方
(1) out.print(“form action=\” ”);
out.print(response.encodeURL(“sessionExample”));
out.print(“form action=\” ”);
out.print(“method = GET>”);
(2) out.print(“<p><a href=\” ”);
out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”));
out.println(“\” >URL encoded </a>”);
3.SingleThreadModel
默认的,每一个servlet definition in a container只有一个servlet class的实例。 只有实现了SingleThreadModel,container才会让servlet有多个实例。
Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。
SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,
SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.
Single Thread Model一般使用在需要响应一个heavy request的时候,比如是一个需要和
数据库打交道的连接。
2. 在重载Servlet地init( )方法后,一定要记得调用super.init( );
3. the client通过发送一个blank line表示它已经结束request
而the server通过关闭the socket来表示response已结束了。
4. 一个Http Servlet可以送三种东西给Client
1) a single status code
2) any number of http headers
3) a response body
5. Servlet之间信息共享的一个最简单的方法就是
System.getProperties().put(“key”,”value”);
6. Post和Get
Post:将form内各字段名称和内容放置在html header内传送给server
Get: ?之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格
,以后将在server上恢复所带有的空格。
Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。
7. Web.xml就是Web Applicatin 的deployment descriptor
作用有:组织各类元素
设置init param
设置安全性
8. Request Dispatcher用来把接收到的request forward processing到另一个servlet
要在一个response里包含另一个servlet的output时,也要用到Request Dispatcher.
9. Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
setAttribute( )
getAttribute( )
removeAttribute( )
来共享对象
10. 利用request.getParameter( )得到的String存在字符集问题。
可以用 strTitle = request.getParameter(“title”);
strTitle = new String(strTitle.getBytes(“8859-1”),”gb2312”);
如果你希望得到更大得兼容性
String encoding = response.getCharacterEncoding(); //确定Application server用
什么编码来读取输入的。
strTitle = new String(strTitle.getBytes(encoding),”gb2312”);
而jsp页面是由web服务器负责解析的,你每次改了jsp页面以后是要保存后刷新的,而刷新的作用就是告诉web服务器重新解析,只有在web服务器启动的时候才可以解析!!,但与是否重启服务器无关,因为就算你重启服务器,它解析jsp的方式也是那样,是实现好了的,不
会改变!你只要用他解析jsp也就好了. 以上理解为要用新的只要重新解析!! 最好的理解方式是什么呢?? 你可以把jsp页面的"保存"对等与Servlet的加载,因为保存后在你不修改以前不发生变化 而加载后在你不重启服务器以前不发生变化 但是我的在我的印象中是不管使用什么服务器都是这个原理,也就是与服务器无关!!!
发表评论
-
CSS样式表的overflow属性
2015-01-02 19:22 28一、滚动条样式overflow ... -
jrebel运用
2014-07-13 22:00 1194JRebel热部署 ... -
JPA执行原生SQL截断Char类型问题
2014-05-24 21:39 1187在JPA的API中执行原生 ... -
JPA基本数据类型映射
2014-05-24 21:06 3908/** ... -
spring定时器配置
2014-03-18 21:36 696创建测试类: ... -
The Struts dispatcher cannot be found
2013-11-03 18:48 657运行环境:struts2环境中访 ... -
JasperException
2013-09-15 20:41 1018JasperException异常: ... -
equal symbol expected
2013-09-15 20:08 1198equal symbol ... -
Hibernate主键生成器
2013-09-12 21:11 793... -
Criterion和Criteria
2013-09-08 16:00 1955Hibernate Criter ... -
getHibernateTemplate用法
2013-09-08 15:02 588HibernateTemplate提供的方法 ... -
JS中页面跳转
2013-09-08 14:01 658<html><head><t ... -
GridPanel详解
2013-03-10 10:45 10421、Ext.grid.GridPanel ... -
tomcat内存溢出
2013-03-04 20:26 727在使用Java程序从数据库中查询大量的数据或 ... -
History Object
2013-01-07 21:06 759history 对象是window 对象的另一个子 ... -
Write to programmer
2012-12-29 20:16 861很多的java初级程序员对自己没有一个明确的方 ... -
EL语言
2012-09-27 22:08 897EL的前世今生: ... -
JSTL标签的使用
2012-09-27 22:00 820JSP 标准标记库( Standard Tag Library ... -
使用IBATIS防止sql注入
2012-08-26 21:17 1620对于ibaits参数引用可以使用#和$两 ... -
IBATIS动态SQL标签用法
2012-08-26 21:04 12651、动态SQL片段通过SQL片 ...
相关推荐
"Servlet 入门教程:运行第一个 Servlet" 本文将指导您如何运行第一个 Servlet,从下载 Tomcat 到编写和部署 Servlet 的每一个步骤。首先,我们需要下载 Tomcat 并设置环境变量中的 JAVA_HOME。然后,我们可以启动 ...
这篇博客文章“如何编译运行servlet”将引导我们了解如何从源码开始,通过一系列步骤来编译和运行一个Servlet。 首先,我们需要一个Java开发环境,比如Java Development Kit (JDK),它包含了编译Java代码所需的...
Servlet 程序的运行方法和开发过程 Servlet 程序是一种基于 Java 语言的 Web 应用程序,用于处理 HTTP 请求并返回响应结果。在本文中,我们将详细介绍如何运行 Servlet 程序,包括 Servlet 的开发过程、Servlet ...
标题“Tomcat启动服务运行Servlet”涉及到的是Java Web开发中的核心概念,主要涵盖Tomcat服务器的启动过程以及Servlet的执行机制。Tomcat是一款开源、免费的Web应用服务器,广泛用于部署Java Servlet和JavaServer ...
【运行Servlet的两种方法】 Servlet是一种Java编程语言编写的服务器端程序,主要用于扩展服务器的功能,处理来自客户端(如浏览器)的请求。运行Servlet通常需要一个Servlet容器,如Apache Tomcat,来管理和执行...
用shell写的脚本,用于java web开发时,自动编译运行servlet,速度极快,免除了eclipse慢且不过更新代码和资源的问题。脚本中的路径请自行替换为自己的
为了运行Servlet,需要完成以下步骤: 1. **启动Tomcat服务器**:确保Tomcat服务器已经启动并且能够正常工作。 2. **测试访问**:在浏览器中输入URL:`http://localhost:8080/second.html` 来访问已部署的Servlet...
Servlet容器,如Tomcat、Jetty或Apache HTTP Server,是运行Servlet的环境。它管理Servlet的生命周期,负责加载、实例化、初始化、服务以及销毁Servlet。容器接收HTTP请求,解析请求信息,然后调用相应的Servlet实例...
`servlet.jar`文件是这个API的实现,包含了开发和运行Servlet所需的所有类和接口。 `servlet.jar.zip`是一个压缩包,专门用于servlet程序的开发。它包含的核心组件`servlet.jar`是Java Servlet容器(如Tomcat、...
此外,Servlet3.0支持微容器(Microcontainer)的概念,允许在没有应用服务器的环境下运行Servlet,只需要一个简单的嵌入式Servlet容器,如Jetty或Tomcat的轻量级版本,大大降低了部署的复杂性。 至于`Servlet 3.0....
Servlet引擎提供网络服务,能够理解MIME请求,并提供一个运行Servlet的容器。 javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。 Servlet的解析和载入 Servlet引擎解析并...
Servlet容器,如Tomcat、Jetty等,负责管理和运行Servlet。它们根据web.xml或注解配置加载Servlet,并通过DispatcherServlet进行请求分发。DispatcherServlet是Spring MVC的核心组件,它实现了Servlet API并负责调度...
本文将详细介绍 Domino Servlet 的开发和运行配置,包括 Servlet 的特点、与 Agent 的区别、Domino 对 Servlet 的支持、Servlet 的开发和运行配置等。 一、Servlet 的特点 Servlet 是运行在服务器上的 Java 程序,...
【Tomcat下Servlet的配置】涉及的是在Apache Tomcat服务器上部署和运行Servlet的基本步骤,这对于初学者来说是一项重要的技能。Servlet是Java编程语言中用于扩展服务器功能的接口,常用于构建动态web应用。 首先,...
Servlet容器(如JSWDK、Tomcat、WebSphere等)负责管理和运行Servlet,它们根据web.xml配置文件中的信息来加载、实例化和管理Servlet。 Servlet的生命周期包括四个阶段:加载、实例化、初始化和销毁。首先,Servlet...
这些库文件是开发和运行Servlet应用程序所必需的,它们提供了Servlet和JSP的相关接口和类。 ### 使用Servlet插件 使用Servlet插件,开发者可以: 1. **部署Web应用**:将打包好的WAR文件放入Servlet容器的相应目录...
3. **微容器**:Servlet 3.0允许在没有完整应用服务器的情况下运行Servlet和Filter,只需要一个简单的“微容器”(例如Jetty或Tomcat的嵌入式版本)。这使得开发和测试环境更加轻量级。 4. **动态注册**:除了使用...
- **容器**:提供了组件运行所需环境的程序,如Tomcat就是一个Servlet容器,它提供了运行Servlet所需的环境。 - **Servlet容器**:必须遵循Servlet规范,提供网络相关的服务以支持Servlet的运行。 #### 三、安装...