• 动态网页技术--Servlet


    1.servlet技术:

    •需求:   访问一个地址,通过java语言返回该地址对应的网页

               请求:  http://服务器的IP地址:tomcat端口号/项目工程名/访问路径  

               响应:   java通过流反回的html代码

    Get请求:  doget方法接收请求

                           地址栏改变   通过脚本动作打开的页面    表单get请求

                           理论上最多传递255个字节,  传递中文时易出现乱码

                           速度快  安全性不高

    Post请求:   dopost方法接收请求

                           表单post请求

                           理论上传递数据无上限

                           安全性高

    编码方式:   utf-8  中文字符集

                      Gbk   中文字符集

                      Gb2312  中文字符集

                      ISO8859-1  不支持中文的字符集

    使用servlet开发动态网页技术:

                   1.创建类继承httpservlet

                   2.重写doget或dopost方法

                   3.在web.xml中注册自定创建的类(将地址栏访问信息和java类关联)

    Xml文件的构成:

                           1.头文件

                           2.约束文件

                           3.功能标记

    一个类对应一个访问地址

                 <servlet>

                     <servlet-name>自定义名字</servlet-name>

                     <servlet-class>类路径(包名.类名)</servlet-class>

                </servlet>

               <servlet-mapping>

                      <servlet-name>自定义名字</servlet-name>

                      <url-pattern>从根目录开始的相对路径</url-pattern>

                </servlet-mapping>

    访问过程:   

                 1.地址栏访问 http://localhost:8088/testServlet/s

                 2.关联到web.xml中的url-pattern标记 

                 3.关联到web.xml中的servlet-class标记

                 4.关联到相关的类

                 5.根据请求方式执行doget或者dopost方法

    客户端发送数据到服务器上方法:

                  转发:让页面跳转,服务端跳转,不会将跳转后的路径显示在地址栏上,安全

                                                          request.getRequestDispatcher("index.jsp?a=1&b=2").forward(request, response);

                  重定向:让页面跳转,客户端跳转,会将跳转后的路径显示在地址栏上,不安全

                                                            response.sendRedirect("http://localhost:8088/testServlet/index.jsp?a=1&b=2");

     Servlet的生命周期-----受服务器调动支配

                                  1.在客户端第一次访问该servlet时,服务器调用了 servlet的构造方法

                                  2.再调用init方法初始化该servlet  

                                  3.然后调用doget或dopost来实现功能(反复调用)

                                  4.当服务器停止工作时,该servlet被销毁  destroy方法

    Servlet是接收请求和返回响应功能的java类

    Servlet容器能够运行servlet类的容器(服务器tomcat)

    需求:模拟客户端网页---- 注册用户 

    1

     1 User类
     2 
     3 package factory;
     4 
     5 public class User {   //标准的javaBean
     6     
     7     
     8      private   String   id;   //主键自增  
     9      private  String name;
    10      private String  psw;
    11      
    12      
    13     public String getId() {
    14         return id;
    15     }
    16     public void setId(String id) {
    17         this.id = id;
    18     }
    19     public String getName() {
    20         return name;
    21     }
    22     public void setName(String name) {
    23         this.name = name;
    24     }
    25     public String getPsw() {
    26         return psw;
    27     }
    28     public void setPsw(String psw) {
    29         this.psw = psw;
    30     }
    31     public User(String name, String psw) {
    32     
    33         this.name = name;
    34         this.psw = psw;
    35     }
    36     public User() {
    37         
    38     }
    39 
    40 }

    2

     1 CRUD 接口
     2 
     3 package factory;
     4 
     5 import java.util.List;
     6 
     7 public interface CRUD {    //用户管理
     8     
     9     // 增加
    10       public   int     addUser(User   u);
    11       
    12       //修改
    13       public   int       updateUser(String  id);     
    14       
    15       //删除
    16       public    int            deleteUser(String id);
    17       
    18       //查询
    19       public    List    getUser();
    20       
    21 
    22 }

    3

     1 UserCRUD实现类
     2 
     3 package factory;
     4 
     5 import java.sql.Connection;
     6 import java.sql.PreparedStatement;
     7 import java.sql.SQLException;
     8 import java.util.List;
     9 
    10 public class UserCRUD implements CRUD {
    11 
    12 
    13     public int addUser(User u) {
    14         int   x=0;
    15         DB   db=new DB();
    16         Connection   con=db.getCon();
    17         String   sql="insert into  usercrud  values(?,?,?)";
    18         try {
    19             PreparedStatement   pst=con.prepareStatement(sql);
    20             pst.setString(1, "1");
    21             pst.setString(2, u.getName());
    22             pst.setString(3, u.getPsw());
    23             x=pst.executeUpdate();            
    24         } catch (SQLException e) {
    25             // TODO Auto-generated catch block
    26             e.printStackTrace();
    27         }finally{
    28             
    29             db.conClose();
    30         }
    31           
    32         return x;
    33     }
    34 
    35     
    36     public int deleteUser(String id) {
    37         // TODO Auto-generated method stub
    38         return 0;
    39     }
    40 
    41     
    42     public List getUser() {
    43         // TODO Auto-generated method stub
    44         return null;
    45     }
    46 
    47     
    48     public int updateUser(String id) {
    49         // TODO Auto-generated method stub
    50         return 0;
    51     }
    52 
    53 }

    4

     1 DB类
     2 
     3 package factory;
     4 
     5 import java.sql.Connection;
     6 import java.sql.DriverManager;
     7 import java.sql.SQLException;
     8 
     9 public class DB {    //负责数据库的连接和关闭
    10     
    11     Connection   con;
    12     //连接
    13     
    14     public    Connection         getCon(){
    15         try {
    16             Class.forName("oracle.jdbc.driver.OracleDriver");
    17             con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","lihengyu","lihengyu");
    18             System.out.println("数据库已连接");  
    19             
    20         } catch (ClassNotFoundException e) {
    21             // TODO Auto-generated catch block
    22             e.printStackTrace();
    23         } catch (SQLException e) {
    24             // TODO Auto-generated catch block
    25             e.printStackTrace();
    26         }finally{
    27             
    28             return   con;
    29         }
    30     
    31     }
    32 
    33     //关闭
    34     public   void   conClose(){
    35         try {
    36             con.close();  
    37         } catch (SQLException e) {
    38             // TODO Auto-generated catch block
    39             e.printStackTrace();
    40         }
    41         
    42     }
    43 
    44 }

    5

     1 UserFactory工厂类
     2 
     3 package factory;
     4 
     5 public class UserFactory {
     6     
     7     //生产产品---生产具有产品共性的某个具体产品
     8     public  static  CRUD      getCRUD(){
     9         
    10         //CRUD   c1=new UserCRUD();  //向上转型
    11         //return   c1;
    12         return  new UserCRUD();
    13 
    14     }
    15 
    16 }

    6

     1 主方法中模拟客户端网页----注册用户
     2 
     3 package factory;
     4 
     5 public class Main {
     6 
     7     public static void main(String[] args) {
     8           //模拟用户在表单中填写用户名和密码
     9           User   user=new User();
    10           user.setName("Pioneer.HengYu");
    11           user.setPsw("123");
    12           
    13           //将生成的用户对象存入数据库中
    14           UserFactory.getCRUD().addUser(user);  
    15           
    16           System.out.println("用户注册成功");  
    17 
    18     }
    19 
    20 }

    7

     1 UserServlet要继承HttpServlet
     2  
     3 package factory;
     4 
     5 import java.io.IOException;
     6 
     7 import javax.servlet.ServletException;
     8 import javax.servlet.http.HttpServlet;
     9 import javax.servlet.http.HttpServletRequest;
    10 import javax.servlet.http.HttpServletResponse;
    11 
    12 public class UserServlet extends HttpServlet {
    13 
    14     // 承上启下: 接收用户名和密码 调用工厂模式
    15     public void doPost(HttpServletRequest request, HttpServletResponse response)
    16             throws ServletException, IOException {
    17         // 设置字符集
    18         request.setCharacterEncoding("utf-8");
    19         response.setContentType("text/html;charset=utf-8");
    20         // 接收用户名和密码
    21         String name = request.getParameter("name");
    22         String psw = request.getParameter("psw");
    23         // 将接收的变量封装到对象中
    24         User u = new User(name, psw);
    25         // 调用工厂
    26         int x = UserFactory.getCRUD().addUser(u);
    27         // 页面的响应 --跳转到不同页面
    28         if (x > 0) {
    29             request.getRequestDispatcher("success.html").forward(request,
    30                     response);
    31         } else {
    32             response.sendRedirect("fail.html");
    33         }
    34     }
    35 
    36     public void doGet(HttpServletRequest request, HttpServletResponse response)
    37             throws ServletException, IOException {
    38                 this.doPost(request, response);
    39     }
    40 }
  • 相关阅读:
    CentOs 安装 Mysql
    安装 CentOs 系统 及 Python 及 Scrapy 框架
    对IOC的理解
    SQL语句优化 -- 以Mysql为例
    探讨 java中 接口和对象的关系
    Java中组合 设计技巧 实例
    【题解】Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths Codeforces 741D DSU on Tree
    【题解】Tree-String Problem Codeforces 291E AC自动机
    【题解】打地鼠 SDOI2011 模拟 行列无关
    【题解】新型城市化 HAOI2017 网络流 二分图最大匹配 强连通分量
  • 原文地址:https://www.cnblogs.com/Pioneer-HengYu/p/6640747.html
Copyright © 2020-2023  润新知