• 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%in;%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

  • 相关阅读:
    springmvc 处理静态资源
    springmvc jsp 获取 上下文
    springmvc 如何设置首页
    servlet-mapping url-pattern / 和 /*区别
    nginx支持php
    openresty 变量
    git tag用法
    python 导入模块,__init__.py 的作用
    python 转码问题
    python装饰器
  • 原文地址:https://www.cnblogs.com/qmqn/p/7262543.html
Copyright © 2020-2023  润新知