servlet(学习基本原理)

转:(eclipse 引入tomcat)http://www.cnblogs.com/yean/archive/2009/07/27/1532338.html

转:(新建web项目及存放位置)https://jingyan.baidu.com/article/ce436649f3334e3773afd3e0.html

转:(servlet详解) http://www.cnblogs.com/whgk/p/6399262.html

转:(8080端口占用)https://jingyan.baidu.com/article/215817f784c2d61eda1423c4.html?qq-pf-to=pcqq.discussion 

8080端口占用还有一种简单方法:启动任务管理器--->进程 (找到eclipse里的.exe  在进程里找到 关闭即可)

 


 

servlet程序运行过程:

  1.客户端请求  http://localhost:8080/test/pp

  2.请求到服务器端的是servlet容器(tomcat

  3.在tomcat目录下的webapps文件夹下到符合javaee规定的目录(项目)。-test

  4.在web项目当中优先找到配置文件,通过url-pattern 属性的地址,匹配servlet-name与该映射名称相同的<servlet>标签

  5.<servlet>标签配置的是servlet程序的class文件

  6.使用servlet中的doGet()或doPost(service方法分配)方法执行请求的处理


 

 

1.servlet 允许将action属性设置为 映射 ,通过映射找到相关的servlet class进行数据的处理

2.服务器容器,服务器中间件  apache-> tomcat 7,   weblogic

3.搭建servlet开发环境 

   startup.bat:启动tomcat服务

   shutdown.bat:终止tomcat服务

  配置tomcat环境变量  让cmd命令行可以直接运行这些批处理文件。

     CATALINA_HOME:tomcat根目录

    path:%CATALINA_HOME%\bin;%CATALINA_HOME%\lib;

*先打开服务

然后通过 http://localhost:8080/  

是否可以打开网页 判断 是否配置成功*

 

4.javaee 的项目要符合javaee的标准。

  1.javaee app 要放在tomcat下的webapps这个目录下面

  2.编译后的.class文件,html文档,图片,视频.....

  3.在webapps下面部署的项目必须要有 WEB-INF 这样一个目录

  4.javaee app 需要一个独有的 web.xml 对其进行设置

 

5.使用tomcat容器部署一个html文档的步骤:

  1. 在 webapps 目录下新建文件夹test
  2. 在test目录下 要新建 WEB-INF文件夹
  3. 在WEB-INF下面新建 web.xml配置文件
  4. 将web.xml配制成webapps的配置文件(拷贝tomcat实例程序下的文件头)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <web-app 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_3_0.xsd"
      version="3.0"
      metadata-complete="true">
     </web-app>

     

  5. 将html放入到webapps 文件夹test目录下(html里的内容自己随便写 在这里我是index.html)
  6. 解释:index 页面路径   tomcat/webapps/test/index.html

  使用浏览器访问http://localhost:8080/test/index.html来访问

  http://localhost:8080/这个地址就相当于 服务器端的tomcat/webapps/这个目录

6. 创建一个servlet类


1. 引入tomcat/lib/servlet-api.jar
2. 继承HttpServlet抽象类。
3. 重写HttpServlet的doGet()或者doPost()    鼠标空白处右键--》Source--》Override methods

4.随便输出一句话

 5.复制servlet类的class文件到tomcat/webapps/项目名/WEB-INF/classes/   Window-->show view-->Navigator  看 自己项目的build--》classes里面有自己的类文件

 <!--在web.xml里配置servlet.class-->
 <servlet>
   <servlet-name>servlet名(随便起)</servlet-name>
    <servlet-class>包名.类名</servlet-class>
 </servlet>
 <!-- 配置的是servlet的映射 -->
 <servlet-mapping>
   <servlet-name>要与servlet标签内的servlet名相同</servlet-name>

   
<!-- 服务器端代表的是tomcat/webapps/test/ 在浏览器代表的是http://localhost:8080/test/ -->
    <url-pattern>从浏览器要访问这个servlet文件的url地址(随便起 但最开头必须要有/)</url-pattern>
  </servlet-mapping>

 如下:(做到复制代码 不自己手抄代码,防止出错)

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app 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_3_0.xsd"
  version="3.0"
  metadata-complete="true">
    <servlet>
        <servlet-name>haha</servlet-name>
        <servlet-class>TestServlet</servlet-class>
    </servlet>  
    <servlet-mapping>
        <servlet-name>haha</servlet-name>
        <url-pattern>/pp</url-pattern>
    </servlet-mapping>

</web-app>

 

使用shutdown、startup重启tomcat服务器。

通过http://ip:port/program_name/url-pattern 访问servlet

如:http://localhost:8080/test/pp

---------------------------------------------------------------------------eclipse里重做第6步--------------------------------

代码:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app 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_3_0.xsd"
  version="3.0"
  metadata-complete="true">
    
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>TestServlet</servlet-class>
    </servlet>  
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>


</web-app>
web.xml
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("xxx");
    }
    
}
TestServlet.java

 

 运行结果:

运行 TestServlet.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 文件标准路径:(第5步 + 第6步)

 

 

 

  

 

 

 lib 文件夹当前为空   classes 文件在第6步有内容


 

7.HttpServletRequest  extends  ServletRequest     request : 请求
HttpServletResponse  extends  ServletResponse   response : 响应

 

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 RequestResponse extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("gb2312");
        PrintWriter pw = response.getWriter();
        
        String userName = request.getParameter("userName");
        String pwd1 = request.getParameter("password1");
        String pwd2 = request.getParameter("password2");
        
        String dbUserName ="admin";
        if(userName.equals(dbUserName)) {
            pw.write("用户已存在!");
        }else {
            if(pwd1.equals(pwd2)) {
                pw.write("注册成功!");
            }else{
                pw.write("密码输入不一致");
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doGet(request, response);
    }
    
}
RequestResponse.java
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title> request/response </title>
        
    </head>

    <body bgcolor="pink">
        <form action="testRequestResponse" method="post">
         <table border="1px">
            <tr>
                <td>用户名</td>
                <td><input type="text" name="userName"></td>
            </tr>
            
            <tr>
                <td>密码</td>
                <td><input type="password" name="password1"></td>
            </tr>
            
            <tr>
                <td>密码确认</td>
                <td><input type="password" name="password2"></td>
            </tr>            
            
            <tr>
                <td><input type="submit" value="注册"></td>
                <td><input type="reset" value="重置"></td>
            </tr>
         
         </table>
            
        </form>
    </body>

</html>
index.html
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app 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_3_0.xsd"
  version="3.0"
  metadata-complete="true">
    <servlet>
        <servlet-name>haha</servlet-name>
        <servlet-class>Test</servlet-class>
    </servlet>  
    <servlet-mapping>
        <servlet-name>haha</servlet-name>
        <url-pattern>/pp</url-pattern>
    </servlet-mapping>
    
        <servlet>
        <servlet-name>RequestResponse</servlet-name>
        <servlet-class>RequestResponse</servlet-class>
    </servlet>  
    <servlet-mapping>
        <servlet-name>RequestResponse</servlet-name>
        <url-pattern>/testRequestResponse</url-pattern>
    </servlet-mapping>
    

</web-app>
web.xml

 运行结果如下:

1.输入:   http://localhost:8080/test/index.html

2.表上内容填好之后 点注册 出来结果 ,注: 此时的地址栏发生了改变  http://localhost:8080/test/testRequestResponse(这里不需要自己输入)

 3.重复实验

 

 ----------------------------------------------------------------------------------------在eclipse里引入tomcat做第7步-------------------------------------------------------------------------------

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 RequestResponse extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("gb2312");
        PrintWriter pw = response.getWriter();
        
        String userName = request.getParameter("userName");
        String pwd1 = request.getParameter("password1");
        String pwd2 = request.getParameter("password2");
        
        String dbUserName ="admin";
        if(userName.equals(dbUserName)) {
            pw.write("账号已存在");
        }else {
            if(pwd1.equals(pwd2)) {
                pw.write("注册成功");
            }else{
                pw.write("密码输入不一致");
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doGet(request, response);
    }
    
}
RequestResponse.java 
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title> request/response </title>
        
    </head>

    <body bgcolor="pink">
        <form action="testRequestResponse" method="post">
         <table border="1px">
            <tr>
                <td>用户名</td>
                <td><input type="text" name="userName"></td>
            </tr>
            
            <tr>
                <td>密码</td>
                <td><input type="password" name="password1"></td>
            </tr>
            
            <tr>
                <td>密码确认</td>
                <td><input type="password" name="password2"></td>
            </tr>            
            
            <tr>
                <td><input type="submit" value="注册"></td>
                <td><input type="reset" value="重置"></td>
            </tr>
         
         </table>
            
        </form>
    </body>

</html>
index.html
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app 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_3_0.xsd"
  version="3.0"
  metadata-complete="true">
    
    
    <servlet>
        <servlet-name>RequestResponse</servlet-name>
        <servlet-class>RequestResponse</servlet-class>
    </servlet>  
    <servlet-mapping>
        <servlet-name>RequestResponse</servlet-name>
        <url-pattern>/testRequestResponse</url-pattern>
    </servlet-mapping>
    



</web-app>
web.xml

项目目录:

运行index.html文件

 

 

 

 

 

 。。。。不做截图了。。。。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 8.servlet 生命周期

1.在用户请求servlet程序时,调用servlet类的 构造方法创建一个对象。

2.对象创建之后调用init()对该对象进行初始化。

3.调用service方法进行对请求的处理以及对客户端的响应

4.当web服务器关闭时,调用servlet的destory方法。销毁该对象。

注:servlet对象被创建时调用构造方法和init(),这两个方法只执行一次,servlet是单例的程序。servlet可以设计为多例,只不过不太常用。

 

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Test extends HttpServlet {
    
    public Test() {
        System.out.println("构造方法执行...");
    }
    
    @Override
    public void init() throws ServletException {
        System.out.println("init()执行...");
    }
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet()执行...");
    }

    @Override
    public void destroy() {
        FileWriter fw = null;
        BufferedWriter bw = null;
        String msg = "destroy()执行...";
        
        try {
            fw = new FileWriter("f:/tomcat.txt");
            bw= new BufferedWriter(fw);
            bw.write(msg);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                bw.close();
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    
}
java code

 

 

当再刷新一次页面  只执行doGet()

 

当点 shutdown.bat 时  destroy()才执行,tomcat.txt由0k变为不是0k

 

 

posted @ 2017-07-31 12:46  绮梦青柠  阅读(277)  评论(0编辑  收藏  举报