Java43: web基础2

servlet   
oracle 数据库使用比较繁琐,以后可能会和mysql 一起混着用.

两个在连接的时候没有太大的区别.

   数据库要支持中文,要设定正确的字符集  gbk utf-8

    jdbc 驱动要进行正确的编码和解码

    jdbc驱动在插入中文数据时 要做编码处理在查询中文数据时要做解码处理

mysql 的jdbc 驱动的某些版本 的 解码和编码有问题要添加

    ?useUnicode=true&characterEncoding=utf-8

确保可以正确的编码和解码  或者换一个jdbc驱动.

   sun 公司定制的一种用来扩展web服务器功能的组件规范
    扩展web 服务器功能
        apache
        tomcat
    组件规范
        符合一定规范 实现部分功能,需要部署到相应的容器上才能运行的软件模块
        容器是 符合一定规范 为组件提供运行tomcat环境的程序


tomcat 安装 使用  可以参看我linux分类中的内容


    1写一个java类,实现servlet接口或者继承HttpServlet 抽象类

    2 编译

    3打包

            appname

                WEB-INF

                    classes(字节码文件)

                    web.xml(部署描述文件)

                    lib(可选,jar文件)

    4部署

            将打包好的文件夹放到容器特定的文件夹下面

    5启动容器

            访问servlet

            http://ip:port/appname/servlet-url



servlet   
    sun 公司定制的一种用来扩展web服务器功能的组件规范
    扩展web 服务器功能
        apache
        tomcat
    组件规范
        符合一定规范 实现部分功能,需要部署到相应的容器上才能运行的软件模块
        容器是 符合一定规范 为组件提供运行环境的程序
        
        

package web;

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 HelloServlet extends HttpServlet{
    public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<div style=\"color:red\">HELLO! TOMCAT</div>");
        out.close();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<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>helloServlet</servlet-name>
      <!-- servlet 类名必须与实际类名完全一致 -->
      <servlet-class>web.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>helloServlet</servlet-name>
      <url-pattern>/hello</url-pattern>
  </servlet-mapping>

</web-app>


package web;


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 HelloServlet extends HttpServlet{
    public void service(HttpServletRequest requset, HttpServletResponse response)throws ServletException,IOException{
        //getParameter 方法用来根据请求参数名 获得请求参数值
        String name = requset.getParameter("name");
        String msg = "<h1>hello " + name + "</h1>";
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println(msg);
        out.close();
    }
}


<?xml version="1.0" encoding="UTF-8"?>
<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>helloServlet</servlet-name>
      <!-- servlet 类名必须与实际类名完全一致 -->
      <servlet-class>web.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>helloServlet</servlet-name>
      <url-pattern>/hello</url-pattern>
  </servlet-mapping>

</web-app>


 http://127.0.0.1:8080/web01/hello?name=lmdtx
        
        
        
http 中 ? 表示后面是请求参数  name  是请求参数名 jetty是请求参数值

浏览器与web 服务器之间的通信过程及数据格式 的规范

通信的过程     
    浏览器建立与web服务器之间的连接
    浏览器将请求数据打包并发送给web服务器
    服务器将响应数据打包并发送给浏览器
    服务器关闭连接
      如果浏览器要再次请求 必须重新建立一个新的连接
数据包的结构
        请求数据包
            a  请求行
                get请求和 post请求
                    直接在浏览器地址栏输入某个地址  get
                    点击链接 get
                    表单默认的提交方式 get     
                    设置 表单的method = "post"   post

                 GET /web02/hello?name=zongxuan HTTP/1.1

                请求方式(get/post) 请求资源路径(get方式会将请求参数名和路径放在一起) 协议的类型和版本    
             
                
                get请求的特点
                    请求参数会添加到请求资源路径的后面,只能添加少量的参数  只能存放2k的数据
                    
                post请求的特点
                    请求参数添加到实体内容里面,可以添加大量的参数
                    相对安全,  但是:post请求不会对请求参数进行加密
                
                https 来保证数据的安全

            b  消息头
                Host: 127.0.0.1:8888
                User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
                Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
                Accept-Encoding: gzip, deflate
                Connection: keep-alive
                Upgrade-Insecure-Requests: 1
                Cache-Control: max-age=0
                
                是一个键值对 由w3c定义  可以由通信的双方彼此发送
                
            c  实体内容
                只有的那个请求的方式是post的时候



        响应数据包
            a 状态行
                Content-Length: 25
            b 消息头
                Content-Type: text/html;charset=ISO-8859-1
                Date: Sun, 25 Sep 2016 13:47:37 GMT
                Server: Apache-Coyote/1.1
            c 实体内容
                程序处理完的结果

如何获得请求参数值

     String request getParameter(String paraName);  如果paraName 对应的值不存在 返回NULL

    String[] request getParameterValues(String paramName); 当有多个参数名相同的时候,用这个方法


package web;


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 HelloServlet extends HttpServlet{
    public void service(HttpServletRequest requset, HttpServletResponse response)throws ServletException,IOException{
        //getParameter 方法用来根据请求参数名 获得请求参数值
        String name = requset.getParameter("name");
        String age = requset.getParameter("age");
        String msg = "<h1>hello " + name+ age + "</h1>";
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println(msg);
        out.close();
    }
}

   

<?xml version="1.0" encoding="UTF-8"?>
<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>helloServlet</servlet-name>
      <!-- servlet 类名必须与实际类名完全一致 -->
      <servlet-class>web.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>helloServlet</servlet-name>
      <url-pattern>/hello</url-pattern>
  </servlet-mapping>

</web-app>
<html>
  <head>
    <title>MyHtml.html</title>
  </head>
  
  <body>
      <form action="hello" method="post">
          <fieldset>
              <legend>hello</legend>
              name:<input name="name"/><br/>
              age:<input name="age"/><br/>
              <input type = "submit" value="ok"/>
          </fieldset>
      </form>
  </body>
</html>



编码:

    servlet 输出中文

    setContentTYpe 中 charset=“utf-8”

    支持中文就可以,utf-8 gbk

    生成一个消息头 告诉浏览器 fuwuqi返回的数据类型和编码格式

    也设置了out.printlnz在输出的时候使用的编码格式


    表单中有中文参数

        当表单提交时 浏览器会对表单中的中文使用

    浏览器打开表单所在的页面时的编码格式进行编码

    保证表单所在的页面按照指定的编码格式打开

    <head>中

    <meta http-equiv="content-type" content="text/html;charset=utf-8">

    服务器按照指定的编码格式进行解码

    request.setCharacterEncoding("utf-8");

    只对post请求有效  get 的无效

    或者

   


重定向

    服务器发送应给302状态码,和一个Location  消息头

    值是一个地址,创维重定向地址,当浏览器收到以后,会立刻向重定向的地址发请求

    url:重定向地址

    response.sendRedirect(String url);

    重定向地址是任意的

    重定向之后,浏览器地址栏的地址编程重定向地址

    重定向之前,不能够调用out.close()方法

    重定向之前,会先清空response上缓存的数据

package add;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

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

public class addEmpServlet extends HttpServlet{
    public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        String sal = request.getParameter("sal");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("hi,"+name+"<br/>");
        out.println("年龄:"+age+"<br/>");
        out.println("工资:"+sal);
        Connection conn= null;
        PreparedStatement stmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot");
            stmt = conn.prepareStatement("insert into emp(name,sal,age) values(?,?,?)");
            stmt.setString(1, name);
            stmt.setDouble(2, Double.parseDouble(sal));
            stmt.setInt(3, Integer.parseInt(age));
            stmt.executeUpdate();
            out.println(" <br/>OK");
            String msg = "<input type=\"button\" name=\"Submit\" οnclick=\"javascript:history.back(-1);\" value=\"返回上一页\">";
            out.println(msg);
            response.sendRedirect("listEmpServlet");
        } catch (Exception e) {
            e.printStackTrace();
            out.println("系统繁忙,稍后再试");
        }finally{
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {

                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                }
            }
        }
        out.close();
    }
}
package del;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

public class delEmpServlet extends HttpServlet {
    public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        int id = Integer.parseInt(request.getParameter("id"));
        PrintWriter out = response.getWriter();
        Connection con = null;
        PreparedStatement stmt = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot");
            stmt = con.prepareStatement("delete from emp where id=?");
            stmt.setInt(1, id);
            stmt.executeUpdate();
            response.sendRedirect("listEmpServlet");
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {

                    e.printStackTrace();
                }
            }
        }
        out.close();
    }
}
package show;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

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

import java.sql.PreparedStatement;

public class listEmpServlet extends HttpServlet{
    public void service(HttpServletRequest request, HttpServletResponse response ) throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        
        Connection con = null;
        PreparedStatement stmt = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot");
            stmt = con.prepareStatement("select * from emp");
            ResultSet rs =stmt.executeQuery();
            out.println("<table border=1>");
            out.println("<tr><td>ID</td><td>NAME</td><td>SAL</td><td>AGE</td><td>操作</td></tr>");
            while(rs.next()){
                int id= rs.getInt("id");
                String name = rs.getString("name");
                double sal = rs.getDouble("sal");
                int age = rs.getInt("age");
                out.println("<tr><td>"+id+"</td><td>"+name+"</td><td>"+sal+"</td><td>"+age+"</td><td><a href=\"delEmpServlet?id="+id+"\">删除</a><a href=\"loadEmpServlet?id="+id+"\">&nbsp修改</a></td></tr>");
            }
            out.println("</table>");
            out.println("<a href=\"addEmp.html\">添加新员工</a>");
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {

                    e.printStackTrace();
                }
            }
        }
        out.close();
    }
}
package show;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

public class loadEmpServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        int id = Integer.parseInt(request.getParameter("id"));
        PrintWriter out = response.getWriter();
        Connection con = null;
        PreparedStatement stmt = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot");
            stmt = con.prepareStatement("select id,name,sal,age from emp where id=?");
            stmt.setInt(1, id);
            ResultSet rs = stmt.executeQuery();
            
            if(rs.next()){
                out.println("<form action=\"updateEmpServlet?id="+id+"\" method=\"post\">");
                out.println("id:"+id+"<br/>");
                String name = rs.getString("name");
                double sal = rs.getDouble("sal");
                int age = rs.getInt("age");
                //out.println("<input type=\"hidden\">");
                out.println("Name:<input type=\"text\"  value="+name+" name=\"name\"/ ><br/>");
                out.println("Sal:<input type=\"text\"  value="+sal+" name=\"sal\" /><br/>");
                out.println("Age:<input type=\"text\"  value="+age+" name=\"age\" /><br/>");
                out.println("<input type= \"submit\" value=\"修改\">");
                out.println("</form>");
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {

                    e.printStackTrace();
                }
            }
        }
        out.close();
    }
}
package update;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

public class updateEmpServlet extends HttpServlet{
    public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        double sal = Double.parseDouble(request.getParameter("sal"));
        int age = Integer.parseInt(request.getParameter("age"));
        PrintWriter out = response.getWriter();
        Connection con = null;
        PreparedStatement stmt = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lmdtx","root","hiroot");
            stmt = con.prepareStatement("update emp set name=?,sal=?,age=? where id=?");
            stmt.setString(1, name);
            stmt.setDouble(2, sal);
            stmt.setInt(3, age);
            stmt.setInt(4, id);
            stmt.executeUpdate();
            response.sendRedirect("listEmpServlet");
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(con != null){
                try {
                    con.close();
                } catch (SQLException e) {

                    e.printStackTrace();
                }
            }
        }
        out.close();
    }
}
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
    <form action="addEmpServlet" method="post">
        <fieldset>
            <legend>基本信息</legend>
            姓名:<input type="text" name = "name" /><br/>
            年龄:<input type="text" name = "age" /><br/>
            <!-- 性别:<input  type="checkbox" name="sex" value="M" />
                  <label for="r1">男</label>
                  <input type="checkbox" name="sex" value="F"/>
                  <label for="c1">女</label><br/> -->
            工资:<input type="text" name = "sal" /><br/>
            <input type= "submit" value="提交">
        </fieldset>    
        <input type="button" name="Submit" οnclick="javascript:history.back(-1);" value="返回上一页">
    </form>
    
</body>

</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<form action="listEmpServlet" >
    <input type="submit" value="查询所有信息"/>
</form>

</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<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>addEmpServlet</servlet-name>
      <servlet-class>add.addEmpServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>addEmpServlet</servlet-name>
      <url-pattern>/addEmpServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>listEmpServlet</servlet-name>  
    <servlet-class>show.listEmpServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>listEmpServlet</servlet-name>
      <url-pattern>/listEmpServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>delEmpServlet</servlet-name>  
    <servlet-class>del.delEmpServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>delEmpServlet</servlet-name>
      <url-pattern>/delEmpServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>loadEmpServlet</servlet-name>  
    <servlet-class>show.loadEmpServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>loadEmpServlet</servlet-name>
      <url-pattern>/loadEmpServlet</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>updateEmpServlet</servlet-name>  
    <servlet-class>update.updateEmpServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>updateEmpServlet</servlet-name>
      <url-pattern>/updateEmpServlet</url-pattern>
  </servlet-mapping>     
</web-app>



改进版:




servlet 容器如何处理请求资源路径

http://127.0.0.1:8080/web03/listEmpServlet.html

/web03/listEmpServlet


容器要依据请求资源路径找到应用所在的文件夹,

容器会 认为访问的是一个servlet  然后去在web.xml 文件中和他匹配的servlet

匹配方式: 精确匹配  web.xml 当中    必须

                    <url-pattern>/listEmpServlet.html</url-pattern>

                  通配符匹配 会用*匹配任务的0个 1个 多个字符

                <url-pattern>/*</url-pattern>

                <url-pattern>/abc</url-pattern>

                后缀匹配 使用”*.“开头,后接上任意的1个或者多个字符

                <url-pattern>*.action</url-pattern>

                匹配所有以“.action” 结尾的请求

 如果以上都不匹配 容器会查找相应的文件如果找到,返回,找不到,返回404.


如何让一个servlet 处理多种请求

使用后缀匹配模式

分析请求资源路径



servlet 生命周期

    servlet容器如何创建servlet对象  如何初始化,如何调用servlet 对象的方法处理请求,以及如何销毁servlet 想的整个过程

    四个阶段

        实例化

            容器调用servlet 的构造器创建一个servlet对象,在默认情况下,不管有多少个请求,容器只会创建一个servlet对象

            默认情况小 容器在收到请求的之后,才会创建servlet对象

            容器在启动的时候就将某些servlet对象创建好,servlet 必须配置一个参数  web.xml中

        <load-on-startup> 大于等于0的整数</load-on-startup>

        参数:大于等于0的整数

                    值越小,优先级越高

        初始化

                    容器创建好servlet对象之后,会立即调用init方法

                    一般情况下,不需要写init 方法,因为GenericServlet已经实现了init方法

                    将容器创建的ServletConfig方法来获得该对象

                    调用一个空的init方法  该init方法用于子类去覆盖

                    如果要实现自己的初始化处理逻辑只要覆盖init()方法

                    初始化方法只会执行一次

                    ServletConfig对象可以用来访问servlet的初始化参数

        就绪

                    servlet 容器收到请求之后,会调用servlet 对象的service 方法来处理请求

                    处理逻辑:

                        1、override HttpServlet 的service 方法

                        HttpServlet的service方法的实现

                            依据请求类型调用doGet 或者doPost方法 但是 这两个方法只是简单的抛出一个异常

                        2、overide HttpServlet的doGet和doPost方法(建议使用这个)

        销毁

                    容器依据自身的算法 决定是否销毁servlet对象 容器在销毁servlet对象之前会调用servlet对象的destroy方法

                    destroy方法只会执行一次

                    也可以override

                    例如 释放一些资源,连接


    servlet 生命周期相关的接口和类

        1、HttpServlet 抽象类   有一个父类  GengericServlet 抽象类


        2、ServletRequest接口是HttpServletRequest接口的父接口           

            ServletREspone接口是HttpSerlvetResponse的父接口


        3、ServletConfig接口

                使用ServletConfig config = getServletConfig();

                String name = config.getInitParameter("name")

               可以获取 web.xml中的配置


        4 、 Servlet 接口

                    intit(ServletConfig config)

                    service(ServletRequest request ServletResponse response)

                    destroy()


       5 、GengericServlet   抽象类  实现了  Servlet 中的部分方法(init 和destroy)

      

       6、 HttpServlet抽象类 继承了GenericServlet  实现了service 方法


Servlet 接口有三个方法  其中 init(ServletConfig config)  需要一个参数  所以 依赖ServletConfig这个接口  service(ServletRequest request ServletResponse response) 方法中有两个参数 ServletResopn 和ServletRequest   所以他依赖 ServletResopn 和ServletRequest  这两个接口,GenericServlet 抽象类实现了init 和destroy 方法 HttpServlet 继承了GenericServlet  实现了service(HttpServletRequest request,HttpServletResponse response)方法  他有两个参数HttpServletRequest request,HttpServletResponse response   这个两个参数 分别继承 ServletResopn 和ServletRequest 
我们编写的方法  继承了 HttpServlet   所以 可以重写 service方法 或者doGet和doPost方法

package action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.Emp;
import dao.EmpDAO;
import dao.Factory;

public class actionServlet extends HttpServlet {
    public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
        String uri = request.getRequestURI();
        
        if("/web04/addEmpServlet.action".equals(uri)){
            
            request.setCharacterEncoding("utf-8");
            Emp emp = new Emp();
            emp.setName(request.getParameter("name"));
            emp.setSalary(Double.parseDouble(request.getParameter("sal")));
            emp.setAge(Integer.parseInt(request.getParameter("age")));        
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            try {
                EmpDAO dao = (EmpDAO)Factory.GetInstance("EmpDAO");
                dao.save(emp);
                response.sendRedirect("listEmpServlet.action");
            } catch (Exception e) {
                e.printStackTrace();
                out.println("系统繁忙,稍后再试");
            }
            out.close();
            
        }else if("/web04/delEmpServlet.action".equals(uri)){
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            int id = Integer.parseInt(request.getParameter("id"));
            PrintWriter out = response.getWriter();
            try{
                EmpDAO dao = (EmpDAO) Factory.GetInstance("EmpDAO");
                dao.del(id);
                response.sendRedirect("listEmpServlet.action");
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                
            }
            out.close();
            
        }else if("/web04/listEmpServlet.action".equals(uri)){
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            try{
                out.println("<table border=1>");
                out.println("<tr><td>ID</td><td>NAME</td><td>SAL</td><td>AGE</td><td>操作</td></tr>");
                EmpDAO dao = (EmpDAO)Factory.GetInstance("EmpDAO");
                List<Emp> emps = dao.findAll();
                for(int i=0;i<emps.size();i++){
                    Emp emp = emps.get(i);
                    int id =emp.getId();
                    String name = emp.getName();
                    double sal = emp.getSalary();
                    int age = emp.getAge();
                    out.println("<tr><td>"+id+"</td><td>"+name+"</td><td>"+sal+"</td><td>"+age+"</td><td><a href=\"delEmpServlet.action?id="+id+"\">删除</a><a href=\"loadEmpServlet.action?id="+id+"\">&nbsp修改</a></td></tr>");
                }
                out.println("</table>");
                out.println("<a href=\"addEmp.html\">添加新员工</a>");
            }catch(Exception e){
                e.printStackTrace();
            }
            out.close();
            
        }else if("/web04/loadEmpServlet.action".equals(uri)){
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            int id = Integer.parseInt(request.getParameter("id"));
            PrintWriter out = response.getWriter();
            
            try{
                EmpDAO dao = (EmpDAO) Factory.GetInstance("EmpDAO");
                Emp emp = dao.findById(id);
                if(emp != null){
                    out.println("<form action=\"updateEmpServlet.action?id="+id+"\" method=\"post\">");
                    out.println("id:"+id+"<br/>");
                    String name = emp.getName();
                    double sal = emp.getSalary();
                    int age = emp.getAge();
                    out.println("Name:<input type=\"text\"  value="+name+" name=\"name\"/ ><br/>");
                    out.println("Sal:<input type=\"text\"  value="+sal+" name=\"sal\" /><br/>");
                    out.println("Age:<input type=\"text\"  value="+age+" name=\"age\" /><br/>");
                    out.println("<input type= \"submit\" value=\"修改\">");
                    out.println("</form>");
                }
            }catch(Exception e){
                e.printStackTrace();
            }
            out.close();
            
        }else if("/web04/updateEmpServlet.action".equals(uri)){
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            int id = Integer.parseInt(request.getParameter("id"));
            String name = request.getParameter("name");
            double salary = Double.parseDouble(request.getParameter("sal"));
            int age = Integer.parseInt(request.getParameter("age"));
            PrintWriter out = response.getWriter();
            Emp e = new Emp();
            try{
                EmpDAO dao = (EmpDAO) Factory.GetInstance("EmpDAO");
                e.setId(id);
                e.setName(name);
                e.setSalary(salary);
                e.setAge(age);
                dao.update(e);
                response.sendRedirect("listEmpServlet.action");
            }catch(Exception ex){
                ex.printStackTrace();
            }
            out.close();
        }
        
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<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>action</servlet-name>  
    <servlet-class>action.actionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>action</servlet-name>
      <url-pattern>*.action</url-pattern>
  </servlet-mapping>     
</web-app>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
    <form action="addEmpServlet.action" method="post">
        <fieldset>
            <legend>基本信息</legend>
            姓名:<input type="text" name = "name" /><br/>
            年龄:<input type="text" name = "age" /><br/>
            <!-- 性别:<input  type="checkbox" name="sex" value="M" />
                  <label for="r1">男</label>
                  <input type="checkbox" name="sex" value="F"/>
                  <label for="c1">女</label><br/> -->
            工资:<input type="text" name = "sal" /><br/>
            <input type= "submit" value="提交">
        </fieldset>    
        <input type="button" name="Submit" οnclick="javascript:history.back(-1);" value="返回上一页">
    </form>
    
</body>

</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值