• JavaWeb核心之Servlet


    JavaWeb核心之Servlet

    什么是Servlet

    Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),

    用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容

    servlet规范:包含三个技术点

    1)servlet技术

    2)filter技术---过滤器

    3)listener技术---监听器

    Servlet快速入门

    实现步骤:

    1)创建类实现Servlet接口

    2)覆盖尚未实现的方法---重点实现service方法

    3)在web.xml进行servlet的配置

    但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多,    我们一般创建类继承HttpServlet

    实现步骤:

    1)创建类继承HttpServlet类

    2)覆盖doGet和doPost

    3)在web.xml中进行servlet的配置

    Servlet的API(生命周期)

    Servlet接口中的方法

    1)init(ServletConfig config)

    何时执行:servlet对象创建的时候执行

    ServletConfig : 代表的是该servlet对象的配置信息

     

    2)service(ServletRequest request,ServletResponse response)

    何时执行:每次请求都会执行

    ServletRequest :代表请求 认为ServletRequest 内部封装的是http请求的信息

    ServletResponse :代表响应 认为要封装的是响应的信息

     

    3)destroy()

    何时执行:servlet销毁的时候执行

    快速创建Servlet

    实现步骤:

      1)创建类实现Servlet接口

      2)覆盖尚未实现的方法---重点实现service方法

      3)在web.xml进行servlet的配置

    但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多, 我们一般创建类继承HttpServlet

    实现步骤:

      1)创建类继承HttpServlet类

      2)覆盖doGet和doPost

      在web.xml中进行servlet的配置

     访问过程:

     代码演示:

     1 public class MyServlet implements Servlet{
     2 
     3     public void destroy() {
     4         System.out.println("destroy正在运行...");
     5     }
     6 
     7     public ServletConfig getServletConfig() {
     8         return null;
     9     }
    10 
    11     public String getServletInfo() {
    12         return null;
    13     }
    14 
    15     public void init(ServletConfig arg0) throws ServletException {//封装配置信息
    16         //1、获取servlet信息
    17         String servletname=arg0.getServletName();
    18         System.out.println(servletname);
    19         //2、获取初始化参数
    20         String url=arg0.getInitParameter("url");
    21         System.out.println(url);
    22         //3、获取
    23         ServletContext servletContext =arg0.getServletContext();
    24     }
    25 
    26     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
    27         //前者封装请求信息,后者封装响应设置信息
    28         System.out.println("service is running...");
    29     }
    30 }

    HttpServlet类的方法

    1)init()

    2)doGet(HttpServletRequest request,HttpServletResponse response)

    3)doPost(HttpServletRequest request,HttpServletResponse response)

    4)destroy()

    Servlet的配置

     


     基本配置:

    其中url-pattern的配置方式:

    1)完全匹配 访问的资源与配置的资源完全相同才能访问到

    2)目录匹配 格式:/虚拟的目录../*   *代表任意

    3)扩展名匹配 格式:*.扩展名

    注意:第二种与第三种不要混用 /aaa/bbb/*.abcd(错误的)

    服务器启动实例化Servlet配置

    Servlet的何时创建:默认第一次访问时创建

    为什么是默认?

    当在servlet的配置时 加上一个配置 <load-on-startup> servlet对象在服务器启动 时就创建

    缺省Servlet

    可以将url-pattern配置一个/,代表该servlet是缺省的servlet

    什么是缺省的servlet?

    当你访问资源地址所有的servlet都不匹配时 , 缺省的servlet负责处理

    其实,web应用中所有的资源的响应都是servlet负责,包括静态资源

    用户登陆代码演示:

    前端:

    1 <body>
    2     <form action="/WEB002/LogingServlet" method="post">
    3         用户名:<input type="text" name="username"><br>
    4         密码:<input type="text" name="userpassword"><br>
    5         <input type="submit" value="登录"><br>
    6     </form>
    7 </body>

    实体类:

     1 public class user {
     2     private int uid;
     3     private String username;
     4     private String userpassword;
     5     public int getUid() {
     6         return uid;
     7     }
     8     public void setUid(int uid) {
     9         this.uid = uid;
    10     }
    11     public String getUsername() {
    12         return username;
    13     }
    14     public void setUsername(String username) {
    15         this.username = username;
    16     }
    17     public String getUserpassword() {
    18         return userpassword;
    19     }
    20     public void setUserpassword(String userpassword) {
    21         this.userpassword = userpassword;
    22     }
    23     @Override
    24     public String toString() {
    25         return "user [uid=" + uid + ", username=" + username + ", userpassword=" + userpassword + "]";
    26     }
    27 }

    服务器:

     1 public class LogingServlet extends HttpServlet {
     2 
     3     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     4         //1、获取用户名和密码
     5         String username=request.getParameter("username");
     6         String password=request.getParameter("userpassword");
     7         Connection conn=null;
     8         PreparedStatement pst=null;
     9         ResultSet rs=null;
    10         user users=new user();
    11         //2、连接数据库
    12         try {
    13             Class.forName("com.mysql.jdbc.Driver");
    14         //3、获得语句执行平台
    15             String url="jdbc:mysql://localhost:3306/students?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE";
    16             String user="root";
    17             String spassword="123456";
    18             conn=DriverManager.getConnection(url, user, spassword);
    19             String sql="select * from user where username=? and userpassword=?";
    20             pst=conn.prepareStatement(sql);
    21             pst.setString(1, username);
    22             pst.setString(2, password);
    23             rs = pst.executeQuery();
    24             if(rs.next()){
    25                 users.setUid(rs.getInt("uid"));
    26                 users.setUsername(rs.getString("username"));
    27                 users.setUserpassword(rs.getString("userpassword"));
    28                 response.getWriter().write("success"+users);
    29             }else{
    30                 response.getWriter().write("failure");
    31             }
    32         } catch (ClassNotFoundException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         } catch (SQLException e) {
    36             // TODO Auto-generated catch block
    37             e.printStackTrace();
    38         }finally{
    39             try {
    40                 rs.close();
    41                 pst.close();
    42                 conn.close();
    43             } catch (SQLException e) {
    44                 // TODO Auto-generated catch block
    45                 e.printStackTrace();
    46             }
    47         }
    48     }
    49 
    50     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    51         doGet(request, response);
    52     }
    53 }

     ServletContext对象

    ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象 内部封装是该web应用的信息

    ServletContext对象一个web应用只有一个。

    ServletContext对象的生命周期?

    创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状态))

    销毁:web应用被卸载(服务器关闭,移除该web应用)

    获得ServletContext对象

    1)ServletContext servletContext = config.getServletContext();

    2)ServletContext servletContext = this.getServletContext();(常用)

    ServletContext的作用

    获得web应用全局的初始化参数

    web.xml中配置初始化参数

    通过context对象获得参数

    获得web应用中任何资源的绝对路径

    方法:String path = context.getRealPath(相对于该web应用的相对地址);

    写一个相对地址,得到一个绝对的path

    ServletContext是一个域对象

    存储数据的区域就是域对象

    ServletContext域对象的作用范围:整个web应(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)

     

    域对象的通用的方法:

    setAtrribute(String name,Object obj);//类似于键值对,设置属性

    getAttribute(String name);//根据名称得到值

    removeAttribute(String name);//删除该名称对应的数据


     

     

  • 相关阅读:
    SVNKit学习——基于Repository的操作之print repository tree、file content、repository history(四)
    java操作svn【svnkit】实操
    python笔记38-使用zmail发各种邮件案例代码
    python笔记37-史上最好用的发邮件zmail
    python笔记3-邮件发送(smtplib)
    第9期《python3接口自动化测试》课程,6月29号开学!
    anyproxy学习4-Linux(Centos)搭建anyproxy环境
    anyproxy学习3-修改返回内容(beforeSendResponse)
    anyproxy学习2-rule模块实现接口mock功能
    anyproxy学习1-windows平台安装和抓手机app上https请求
  • 原文地址:https://www.cnblogs.com/2734156755z/p/9608471.html
Copyright © 2020-2023  润新知