java 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\" onclick=\"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" onclick="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" onclick="javascript:history.back(-1);" value="返回上一页">
    </form>
    
</body>

</html>
时间: 2024-10-17 10:40:57

java web基础2的相关文章

从Java Web 基础看SSH架构

Java Web开发现在已然成为大型Wed项目的标准,之前一直盲目的使用框架,往往知其然不知其所以然.在经过一段时间的学习与开发,大概掌握了其脉络的基础上,对其做一定总结. 一.Java Web 基础 一个典型的Java Web项目往往包含这些元素:Jsp页面.Servlet.Listener.Filter,以及配置文件web.xml.其中: Jsp和Servlet基本是一回事,主要用来响应客户端的请求.当然Jsp中可以直接嵌入HTML标签,主要还是负责展现. Listener则是负责监听Web

Java Web基础 --- Jsp 综述(上)

摘要: J2EE是一套规范,而Servlet/Jsp是J2EE规范的一部分,是Tomcat的主要实现部分.在最初的应用实践中,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,这导致Servlet开发效率极为低下.JSP技术通过实现普通静态HTML和动态部分混合编码,使得逻辑内容与外观相分离,大大简化了表示层的实现,提高了开发效率.本文以JSP的本质是Servlet为主线,结合JSP转译后所得的Servlet,详细探讨了JSP的原理.执行过程.脚本元素.编译指令

Java Web基础 --- Jsp 综述(下)

摘要: JSP脚本中包含九个内置对象,它们都是Servlet-API接口的实例,并且JSP规范对它们进行了默认初始化.本文首先通过一个JSP实例来认识JSP内置对象的实质,紧接着以基于请求/响应架构应用的运行机制为背景,引出JSP/Servlet的通信方式与内置对象的作用域,并对每个内置对象的常见用法进行深入介绍和总结. 一. JSP 九大内置对象概述及相关概念说明 JSP脚本中包含九个内置对象,这九个内置对象都是 Servlet API 接口的实例,并且JSP规范对它们进行了默认初始化(由 J

Java web基础总结六之—— Cookie与Session

Java web基础总结六之-- Cookie与Session 当我们在使用浏览器与服务器进行会话的过程中,就必然会产生一些数据.这个时候就需要对数据进行保存.比如常见的购物网站购物车信息的保存.保存客户端与服务器会话数据的两种技术是Cookie与Session. 一.Cookie 1.什么是Cookie? Cookie是保存在客户端的,以name,value的形式保存.当用户使用浏览器访问服务器产生数据时,服务器程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去

java web基础 --- URL重定向Filter

java web基础 --- URL重定向Filter httpRequest.getRequestDispatcher("/helloWorld").forward(httpRequest, response); 服务器端转发,不改变浏览器端URL地址,常用 httpResponse.sendRedirect(uri); 浏览器端重定向,改变URL在浏览器地址栏 URLOverWriteFilter.java 1 package com.web1.util; 2 3 import j

Java Web基础 --- Servlet 综述(实践篇)

摘要: 伴随 J2EE 6一起发布的Servlet 3.0规范是Servlet规范历史上最重要的变革之一,它的许多新的特性都极大的简化了 Java Web 应用的开发.本文从一个简单的 Servlet 例子开始,说明了如何开发.配置一个 Servlet.此外,还重点叙述了Servlet的一些新特性,包括Servlet 异步处理.Servlet 非阻塞IO 以及 Servlet 文件上传等内容,以便我们对Servlet有一个更全面的了解. 本篇主要介绍 Servlet 实践方面的知识,更多关注于S

Java Web基础小结之Jsp JavaBean

Java Web基础小结In computing, Java Web Start (also known as JavaWS, javaws or JAWS) is a framework developed by Sun Microsystems (now Oracle) that allows users to start application software for the Java Pl... http://bbs.chinaacc.com/forum-2-3/offset-1/to

Java Web 基础 --- Filter 综述

摘要: 伴随J2EE一起发布的Servlet规范中还包括一个重要的组件--过滤器(Filter).过滤器可以认为是Servlet的一种加强版,它主要用于对用户请求进行预处理以及对服务器响应进行后处理,是个典型的处理链.Servlet规范使用了三个接口对过滤器进行了抽象,即Filter是对具体过滤器的抽象,FilterChain是基于AOP理念对责任链方面的抽象,FilterConfig则是对Filter配置的抽象.本文概述了Filter的提出动机.工作原理.使用流程和应用实例,并指出Java W

Java web基础总结九之—— jsp标签

Java web基础总结九之-- jsp标签 JSP标签也称之为Jsp Action,在前面讲过,jsp的设计目的就是作为表现层.我们希望JSP页面仅用作数据显示模块,不要嵌套任何java代码引入任何业务逻辑,但在实际开发中不引入一点业务逻辑是不可能的,但引入业务逻辑会导致页面出现难看java代码.jsp的标签就是为了解决这个问题.所以jsp页面中也内置了一些标签(这些标签叫做jsp标签),开发人员使用这些标签可以完成页面的一些业务逻辑.我们也可以开发自定义标签,使jsp页面不出现一行java代

Java web基础总结八之—— jsp基础

Java web基础总结八之-- jsp基础 一.什么是jsp? JSP是Java ServerPages的缩写,它和servlet一样,都是用于开发动态web资源的技术.在servlet中拼凑输出html代码时,非常麻烦.而JSP的最大的特点在于,写jsp就像在写html,但是html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,开发动态资源. 现在随着前端越来越重要,很多的公司都会采取前后端分离的开发模式.即后端只提供返回json等格式的接口,而前端开发人员则通过对后端接