zoukankan      html  css  js  c++  java
  • Servlet个人总结

    netstat -an ——查看端口占用情况

    netstat -an ——查看是谁占用了哪个端口

    端口被占用之后可以关闭端口占用程序或者在conf/server.xml修改本身使用端口

    javac -d .  java文件名.java   ——编译带包的java文件

    MyFirstServlet规范:

    package com.tfj;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    public class MyFirstServlet implements Servlet{
    //该函数用于初始化servlet就是将该servlet装载到内存中
    //改还是只会被调用一次
    public void init(ServletConfig config)
           throws   ServletException{
        }
        //该函数是得到Servlet对象
        public ServletConfig getServletConfig(){
    return null; 
        }
        //该函数是服务函数,我们的业务逻辑代码就是写在这里
        //该函数每次都会被调用
        public void service(ServletRequest req,ServletResponse res)
    throws ServletException,
        java.io.IOException{
    //在控制台输出
    System.out.println("在控制台出现这个是不是很神奇呢"+new java.util.Date());
    res.getWriter().println("Congratulations you hava get Servlet"+new java.util.Date().toLocaleString());
        }
        //该函数是得到Servlet配置信息
        public java.lang.String getServletInfo(){
    return null;
        }
        //销毁该Servlet,从内存中消除,该函数别调用一次
        public void destroy(){
        }
    }

    共享同步机制:

    定时发送邮件功能:

    可以通过<load-on-startup>配合线程知识搞定

    //修改修改Servlet.java

    标准Servlet.java:

    package com.tfj.servlet;
    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 ServletConfigTest extends HttpServlet {
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    this.doGet(request, response);
    }
    }

    JSP分页模板:

    // 1.加载驱动  Class.forName("oracle.jdbc.driver.OracleDriver"); 
    // 2.得到链接 
    Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","company","123456"); 
    // 2.跟sql server一模一样 
    Statement sm=ct.createStatement();     //接受pageNow     String s_pageNow=(String)request.getParameter("pageNow");     int pageNow=1;     if(s_pageNow!=null){     pageNow=Integer.parseInt(s_pageNow);     }     int pageCount=0;//总页数 
    int rowCount=0;//总记录数 
    int pageSize=4;//每页记录数 
    ResultSet rs=sm.executeQuery("select count(*) from tb_Employee"); 
    if(rs.next()){ 
    rowCount=rs.getInt(1); 
    if(rowCount%pageSize==0){ 
    pageCount=rowCount/pageSize; 
    }else{ 
    pageCount=rowCount/pageSize+1; 
    } 
    } 
    rs=sm.executeQuery("select * from (select a.*,rownum rn from (select * from tb_Employee) a where rownum<="+pageSize*pageNow+")  where rn>="+((pageNow-1)*pageSize+1)+""); 
    while(rs.next()){ 
    // 用户名和薪水 
    out.print("<tr>"); 
    out.println("<td>"+rs.getString(2)+"<td>"); 
    out.println("<td>"+rs.getString(6)+"<td>"); 
    out.print("</tr>"); 
    } 
    //打印总页数 
    for(int i=1;i<=pageCount;i++){ 
    out.print("<a href=MyJsp.jsp?pageNow="+i+">["+i+"]</a>"); 
    } 
    //关闭打开的资源 
    rs.close(); 
    sm.close(); 
    ct.close(); 
    //关闭资源规范: 
    finally{ 
    if(rs!=null){ 
    try { 
    rs.close(); 
    } catch (SQLException e) { 
    e.printStackTrace(); 
    } 
    rs=null; 
    } 
    if(ps!=null){ 
    try { 
    ps.close(); 
    } catch (SQLException e) { 
    e.printStackTrace(); 
    } 
    ps=null; 
    } 
    if(ct!=null){ 
    try { 
    ct.close(); 
    } catch (SQLException e) { 
    e.printStackTrace(); 
    } 
    ct=null; 
    }   }

    //建立自增长:

    create sequence users_seq
    start with 11
    increment by 1
    minvalue 11
    nomaxvalue
    nocycle
    nocache
    /

    //登录格式

    out.println("<form action=' ' method='post'>");
    out.println("<center>账号:<input type='text' name='id'/></center><br/>");
    out.println("<center>密码:<input type='password' name='password'/></center><br/>");
    out.println("<center><input type='submit' value='登录'/></center><br/>");
    out.println("</form>");

    //获取账号、密码

    String id=request.getParameter("id");
    String password=request.getParameter("password");

    //跳转

    response.sendRedirect("/web应用名/资源名");
    request.getRequestDispatcher("/资源名").forward(request,response);

    Servlet技术

    Servlet技术是整个Web开发中的一个核心部分,其包括三个重要部分,分别是Servlet开发、Filter开发和Listener开发。本文将重点介绍如何完成第一个Servlet程序以及Servlet的生命周期。还将介绍HttpServlet的三个常用方法,包括doGet方法、doPost方法以及service方法。最后还将介绍如何进行Filter开发和Listener开发。

    重点内容:

    Servlet的实现

    Servlet常用方法

    Filter开发

    Listener开发

    什么是Servlet

    Servlet一种运行于服务器端的Java应用程序,可以用来与数据库进行交互、响应客户请求,还可以用来生成动态的Web页面。Servlet与传统的Java应用程序不同,它是由Web服务器来进行进行加载并运行的。所有Web服务器首先必须包含支持Servlet的Java虚拟机。

    在Servlet之前,开发人员通常会使用公共网关接口(CGI)应用程序完成客户请求等操作。而CGI程序的编写是非常麻烦和费力的,而且效率非常低下。Servlet的出现打破了这种开发方式,它的执行速度比CGI要快很多,而且每个用户请求将被激活成单个程序中的一个线程,这样的请求方式能够大大的降低系统开销。

    Servlet开发

    1.第一个Servlet程序

    既然Servlet本身就是一个简单的Java类,那么它的创建方式就和普通类完成一样了,不同的是所有的Servlet必须继承HttpServlet类。

    public class HelloServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServlet Response resp)throws ServletException, IOException {

    resp.setContentType("text/html");

    PrintWriter out = resp.getWriter();

    out.println("Hello,Servlet!");

    }

    }

    2.Servlet生命周期

    大家都知道Java中类是有生命周期的,Servlet也是一个Java类,所以它同样有生命周期,其从生成到销毁必须进过如下几个步骤。

    (1)将Servlet加载到Servlet引擎(也可以叫Servlet加载器)中。

    (2)加载完成后,立即调用其init()方法来进行初始化操作。

    (3)通过提供的响应方法来处理客户端的请求,如get方式的请求则调用其doGet方法,post方式的请求则调用其doPost方法。

    (4)调用destroy()方法进行销毁操作。

    (5)通过垃圾收集器进行收集清理。

    3.HttpServlet常用方法

    HttpServlet接口除了init()和destroy()方法用来处理Servlet初始化和销毁。还包括一些常用方法,如doGet方法、doPost方法以及Service方法等等。

    (1)doGet方法用来处理客户端的HTTP GET请求。如果客户端发送其他的请求,如HTTP POST,服务端将会抛出异常。doGet方法只能处理客户端浏览器直接访问和表单GET方式提交的请求。

    (2)doPost方法用来处理客户端的HTTP POST请求。如果客户端浏览器通过HTTP POST请求来访问Servlet,而在Servlet类中并没有doPost方法,这时在客户端浏览器中将会抛出异常消息。doPost方法只能处理表单POST方式提交的请求,不能处理客户端浏览器直接访问。

    (3)service方法用来同时处理HTTP GET和HTTP POST请求。包括客户端浏览器直接访问和表单GET方式提交的表单以及表单POST方式提交的表单。

    Filter过滤器开发

    1.过滤器简介

    Filter的中文译名为过滤器。从字面名称就可以看出来Filter是用来进行过滤的。通过它可以改变请求和响应信息。Filter不是一个Servlet,它不能产生响应信息,它只能够在一个请求到达之前预处理该请求,也可以在请求离开之前处理响应。借助于过滤器可以实现如下功能。

    (1)过滤非法文字和信息。

    (2)设置统一字符编码。

    (3)对用户进行登录验证。

    (4)改变图片文件格式。

    (5)对相应做压缩处理。

    (6)对XML的输出使用XSLT来进行转换。

    2.实现第一个过滤器

    Filter同Servlet类似同样,也是一个Java类,所以其添加方式和普通的Java类完全相同。自定义的Filter类必须实现Filter接口,还必须实现Filter接口中定义的init()方法、doFilter()方法和destroy()方法。

    3.Filter生命周期

    Filter的生命周期和Servlet的生命周期非常类似,Filter从生成到销毁必须进过如下几个步骤。

    (1)服务器启动时就将加载Filter。

    (2)加载完成后,立即调用其init()方法来进行初始化操作。

    (3)过滤用户请求,调用其doFilter()方法。

    (4)调用destroy()方法进行销毁操作。

    (5)通过垃圾收集器进行收集清理。

    4.IP地址过滤器

    前面提到过滤器可以过滤用户请求,下面来看一个简单的示例,创建一个IP过滤器,当一个用户发出访问请求的时候,首先通过过滤器进行判断,如果用户的IP地址被限制,则禁止访问;否则为合法的IP,则可以继续访问。

    Listener监听器开发

    1.监听器简介

    Listener的中文译名为监听器,从字面上可以看出Listener主要用来监听之用。通过Listener可以监听容器中某一执行动作,并根据其要求做出相应的响应。到目前Servlet 2.4开始,一共包含八个Listener接口,可以将其分为三类,分别如下。

    (1)与ServletContext有关的Listener接口,即Servlet上下文监听器。

    (2)与HttpSession有关的Listener接口,即Http会话监听器。

    包括四个Listener接口,分别是HttpSessionListener、HttpSessionAttributeListener、HttpSessionBindingListener和HttpSessionActivationListener。

    (3)与ServletRequest有关的Listener接口,即客户端请求监听器。

    2.Servlet上下文监听器

    Servlet上下文监听器用来ServletContext对象的创建和删除以及属性的添加、删除和修改等操作。包括ServletContextListener和ServletContextAttributeListener两个接口。

    3.Http会话监听器和客户端请求监听器

    Http会话监听器用来HttpSession对象的创建和删除以及属性的添加、删除和修改操作,还可以用来监听也可以监听HttpSession对象的有效状态。包括HttpSessionListener、HttpSessionAttributeListener、HttpSessionBindingListener和HttpSessionActivationListener四个接口。

  • 相关阅读:
    使用QQ邮箱发送邮件,QQ邮箱的smtp设置
    Linux常用命令
    Pycharm批量查找替换功能
    HTML/CSS学习笔记
    什么样的人适合做自动化测试
    如何测试一个WEB的输入框?
    我收集的学习网站
    SQL查询练习(一)
    linux消息队列应用编程
    linux共享内存简单介绍以及编码演示
  • 原文地址:https://www.cnblogs.com/tufujie/p/5177308.html
Copyright © 2011-2022 走看看