Servlet,运行在服务器上的小程序.可以用来接收,处理客户端情请求,返回响应. 主要的功能在于交互式地浏览和修改数据,生成动态的web内容.过程为:
客户端发送请求至服务器端;
服务器端将请求发送至Servlet
Servlet生成响应内容,并将其传给服务器
服务器将响应返回给客户端.
这个过程具体是如何体现的,可以做一个简单的示例.首先说明一下文件,LoginServlet.java和login.html以及web.xml.
login.html代码内容:
针对代码进行说明:
form表单中的内容,注意name和action.name是Servlet文件中获取数据用的;而action的值,由于一点submit按钮,就会将表单内容提交到服务器,action的值就是表示表单要发送到的URL,表单需要提交到loginServlet中去处理.
而路径loginServlet具体对应的java类,则是根据web.xml的配置来查找的.
代码内容,多余的去掉了:
针对代码进行说明:
首先作为一个Servlet类,要继承HttpServlet这个类,所以要引用javax.servlet.http.*;这个包.而继承这个类,要根据情况,实现这个类中的某些方法,通常是实现doGet和doPost方法.实现这两个方法都要抛出异常,ServletException和IOException,所以要引用javax.servlet.*;和java.io.*;这两个包.
然后用HttpServletRequest的对象的getParameter方法获取客户端上数据.服务器端打印一下,然后将结果返回给客户端.显示在界面上,用HttpServletResponse的对象返回结果,并用getWriter的方法显示文字.在显示之前,需要设置html的内容类型setContentType.如果要输出中文,防止乱码可以加上charset=gb2312.
然后为了让这个java小程序顺利运行,具体的操作.
1.首先,一个服务器,Tomcat7.0,解压之后.注意下目录.
图中的 webapps是项目部署的地方,在webapps中,有很多Tomcat自带的示例,Tomcat运行的时候会从webapps中加载项目.
建立一个自己的项目,起名test_servlet,就是建立一个test_servlet的文件夹.
然后在test_servlet文件夹中必须有一个名为WEB-INF的文件夹,这个文件夹中必须有一个web.xml文件.可以有classes文件夹,用于存放类,或lib文件夹用于存放库文件.
将login.html文件放在test_servlet下,和WEB-INF同级;
而将LoginServlet.java编译成的LoginServlet.class放置在WEB-INF/classes下.
将web.xml配置成我上面写的那样.
启动Tomcat,打开bin目录下的startup.bat.
在浏览器中输入http://localhost:8080/test_servlet/login.html,
输入用户名和密码,点击登录,提交数据到服务器端,服务器端打印结果.
并返回结果到客户端.
结果顺利运行,按照最上面提到的Servlet的工作过程来分析下是如何运行的.
针对时序图进行分析:
web客户端发送请求至Tomcat(服务器端),调用Tomcat的请求,将用户名和密码作为参数,采用get方式.(客户端发送请求至服务器端)
服务器端解析请求,根据跳转的地址http://127.0.0.1:8080/test_servlet/loginServlet 解析. 首先127.0.0.1:8080不用管.从test_servlet开始解析,test_servlet为项目名称.然后test_servlet之后一直到最后,loginServlet为访问的名称,也就是url-pattern;然后分析到类为LoginServlet.class.找到类的完整路径,将类进行实例化.(服务器端将请求发送至Servlet)
调用类中的service方法,尽管LoginServlet.class中没有写这个方法,但是父类中有;然后service方法,根据客户端请求的方式,决定调用doGet,还是doPost.接着就是我们的getParameter取得参数,登录.先将结果返回给服务器端(Servlet生成响应内容,并将其传给服务器).
PS:在边看视频,边跟着的做的过程中,我出现了一个问题,花费了比较长的时间解决.就是Tomcat启动不了,startup.bat运行总是一闪而过.网上说的解决方法,基本都是说环境变量没配置好.就是设置java_home=F:\Java\jdk1.7.0_45,但是还是提示我错误.
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
最后的解决方法是,我换了一个版本的Tomcat,当时的Tomcat用的是5.0,后来换成了7.0,就能顺利运行了.
所以,出现这个Tomcat启动不了,一闪而过的问题,我知道的原因有两种,
1.就是java_home没有设置好,或者没有设置.(PS: 如果不想配置环境变量,可以用文本编辑的模式打开startup.bat,然后在第一行输入set java_home=F:\Java\jdk1.7.0_45,就是设置一个单独对Tomcat起作用的java_home了.)
2.就是Tomcat和JDK的版本不搭.
客户端发送请求至服务器端;
服务器端将请求发送至Servlet
Servlet生成响应内容,并将其传给服务器
服务器将响应返回给客户端.
这个过程具体是如何体现的,可以做一个简单的示例.首先说明一下文件,LoginServlet.java和login.html以及web.xml.
login.html代码内容:
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="loginServlet">
用户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
运行效果:
针对代码进行说明:
form表单中的内容,注意name和action.name是Servlet文件中获取数据用的;而action的值,由于一点submit按钮,就会将表单内容提交到服务器,action的值就是表示表单要发送到的URL,表单需要提交到loginServlet中去处理.
而路径loginServlet具体对应的java类,则是根据web.xml的配置来查找的.
代码内容,多余的去掉了:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/loginServlet</url-pattern>
</servlet-mapping>
针对代码进行说明:首先在url-pattern标签中找到loginServlet,然后找到对应的servlet-name是MyServlet.再根据MyServlet,找到对应的servlet-class是LoginServlet.所以就在当前的classes目录下查找一个LoginServlet.class类,进行数据的处理.
而LoginServlet.class是由LoginServlet.java的编译而来.
LoginServlet.java的代码内容:import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LoginServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response ) throws ServletException,IOException
{
//获取界面上传送的参数,用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
//打印出来
System.out.println("username=" + username);
System.out.println("password=" + password);
//将结果返回到客户端,显示Login success!!!文字
response.setContentType("text/html;");
response.getWriter().println("Login success!!!");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response ) throws ServletException,IOException
{
doGet(request,response);//doPost,实际调用doGet
}
}
针对代码进行说明:
首先作为一个Servlet类,要继承HttpServlet这个类,所以要引用javax.servlet.http.*;这个包.而继承这个类,要根据情况,实现这个类中的某些方法,通常是实现doGet和doPost方法.实现这两个方法都要抛出异常,ServletException和IOException,所以要引用javax.servlet.*;和java.io.*;这两个包.
然后用HttpServletRequest的对象的getParameter方法获取客户端上数据.服务器端打印一下,然后将结果返回给客户端.显示在界面上,用HttpServletResponse的对象返回结果,并用getWriter的方法显示文字.在显示之前,需要设置html的内容类型setContentType.如果要输出中文,防止乱码可以加上charset=gb2312.
然后为了让这个java小程序顺利运行,具体的操作.
1.首先,一个服务器,Tomcat7.0,解压之后.注意下目录.
图中的 webapps是项目部署的地方,在webapps中,有很多Tomcat自带的示例,Tomcat运行的时候会从webapps中加载项目.
建立一个自己的项目,起名test_servlet,就是建立一个test_servlet的文件夹.
然后在test_servlet文件夹中必须有一个名为WEB-INF的文件夹,这个文件夹中必须有一个web.xml文件.可以有classes文件夹,用于存放类,或lib文件夹用于存放库文件.
将login.html文件放在test_servlet下,和WEB-INF同级;
而将LoginServlet.java编译成的LoginServlet.class放置在WEB-INF/classes下.
将web.xml配置成我上面写的那样.
启动Tomcat,打开bin目录下的startup.bat.
在浏览器中输入http://localhost:8080/test_servlet/login.html,
输入用户名和密码,点击登录,提交数据到服务器端,服务器端打印结果.
并返回结果到客户端.
结果顺利运行,按照最上面提到的Servlet的工作过程来分析下是如何运行的.
针对时序图进行分析:
web客户端发送请求至Tomcat(服务器端),调用Tomcat的请求,将用户名和密码作为参数,采用get方式.(客户端发送请求至服务器端)
服务器端解析请求,根据跳转的地址http://127.0.0.1:8080/test_servlet/loginServlet 解析. 首先127.0.0.1:8080不用管.从test_servlet开始解析,test_servlet为项目名称.然后test_servlet之后一直到最后,loginServlet为访问的名称,也就是url-pattern;然后分析到类为LoginServlet.class.找到类的完整路径,将类进行实例化.(服务器端将请求发送至Servlet)
调用类中的service方法,尽管LoginServlet.class中没有写这个方法,但是父类中有;然后service方法,根据客户端请求的方式,决定调用doGet,还是doPost.接着就是我们的getParameter取得参数,登录.先将结果返回给服务器端(Servlet生成响应内容,并将其传给服务器).
最后服务器端将LoginSuccess!!!返回给客户端(服务器将响应返回给客户端).
以上,差不多就是Servlet的完整的工作过程.了解了原理,才能对知识进行更好的学习和理解.PS:在边看视频,边跟着的做的过程中,我出现了一个问题,花费了比较长的时间解决.就是Tomcat启动不了,startup.bat运行总是一闪而过.网上说的解决方法,基本都是说环境变量没配置好.就是设置java_home=F:\Java\jdk1.7.0_45,但是还是提示我错误.
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
最后的解决方法是,我换了一个版本的Tomcat,当时的Tomcat用的是5.0,后来换成了7.0,就能顺利运行了.
所以,出现这个Tomcat启动不了,一闪而过的问题,我知道的原因有两种,
1.就是java_home没有设置好,或者没有设置.(PS: 如果不想配置环境变量,可以用文本编辑的模式打开startup.bat,然后在第一行输入set java_home=F:\Java\jdk1.7.0_45,就是设置一个单独对Tomcat起作用的java_home了.)
2.就是Tomcat和JDK的版本不搭.