DRP之Servlet

        Servlet,运行在服务器上的小程序.可以用来接收,处理客户端情请求,返回响应. 主要的功能在于交互式地浏览和修改数据,生成动态的web内容.过程为:
          客户端发送请求至服务器端;
          服务器端将请求发送至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的版本不搭.


评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值