网站jcms流程分析

news/2024/5/10 3:18:00/文章来源:https://blog.csdn.net/weixin_30354675/article/details/96267886

本实例大致流程:基于jsp页面,通过servlet传递数据调用方法,利用service更改数据库.
本文重点分析的是其中的两个小方法add()和delete(),来反映出反射机制的一个具体作用:减少Servlet文件的个数.
  

 利用反射减少Servlet文件个数的步骤:
  1 必须对每次请求进行标示,表示这个动作是什么
  2 对每个标示进行判断,然后在同一个Servlet调用与标示对应的方法
      第一种方法是一个Servlet文件对应一个动作
      第二种利用反射机制的方法是把每个动作写成一个方法,而不是一个单独Servlet,然后把这些方法统一封装到一个Servlet中,然后根据动作调用相应的方法,对数据进行增,删,改,查,验证等
   3 注意,第一种方法中Servlet的名字要统一改成第二种方法中统一了的Servlet的名字

添加用户的界面:

用户列表界面:

用户信息修改界面:

步骤一:.jsp文件中代码调用方法
 
    <td>
        <a href='admin/UserServlet?action=modify&id=<%=user.getId()%>'>修改</a>
        <a href='admin/UserServlet?action=delete&id=<%=user.getId() %>'>删除</a>
    </td>

步骤二:Servlet获取数据

第一种Servlet方式:
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        
    String action = request.getParameter("action");
    if ("list".equals(action)) {
                list(request, response);
            } else if ("add".equals(action)) {
                add(request, response);
            } else if ("modify".equals(action)) {
                modify(request, response);
            } else if ("modified".equals(action)) {
                modified(request, response);
            } else if ("validate".equals(action)) {
                 validate(request, response);
            } else if ("delete".equals(action)) {
                 delete(request, response);
            }
    public void add(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {...}
            ...
            ...
}

第二种Servlet方式:利用反射机制
反射机制(继承给子类):    
//问题:没有办法调用子类中的方法,但是在程序运行以后,都会有对象,就可以通过反射,调用对象中的方法
public class BaseServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void service (HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
        String action = request.getParameter("action");
        Class clazz = this.getClass();
        // 在运行的时候,通过java.lang.Class对应本类的对象
        Class[] types = {
                HttpServletRequest.class,HttpServletResponse.class
        };      //都是对应类的Class的对象
        Object[] objs = {request,response};
        try {
            Method method = clazz.getMethod(action, types);
            method.invoke(this, objs);
            //this:代表当前的对象,objs是上面Service传递过来的参数,需要传递到子类中那些方法中

            //Method method = clazz.getDeclaredMethod(action, types);  //不支持继承,上面之所以可以用this是因为支持继承
            //this就是代表了当时的那个子类对象
        
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
子类代码:
public class UserServlet extends BaseServlet {
    public static final long serialVersionUID = 1L;

    public UserServlet() {
        super();
    }
    public void add(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获得客户端提交的数据
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        String valid = request.getParameter("valid");
        String email = request.getParameter("email");
        String phone = request.getParameter("phone");
        //把数据用User对象封装
        User user = new User();
        user.setName(name);
        user.setEmail(email);
        user.setPassword(password);
        user.setPhone(phone);
        user.setTime_stamp(new Timestamp(new Date().getTime()));
       

   //调用UserSerce类中方法,将用户对象传入到UserService类中
        UserService userService = UserService.getInstance();
        userService.addUser(user);
        
        this.getServletContext().getRequestDispatcher("/admin/user_list.jsp").forward(request, response);
    }
    
    public void delete(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
        String id = request.getParameter("id");
        UserService userService = UserService.getInstance();
        userService.delete(Integer.parseInt(id));
        this.getServletContext().getRequestDispatcher("/admin/user_list.jsp")
        .forward(request, response);
    }
    ...
    ...
}

步骤三:通过Service更改数据库

使用单例模式:双检查模式
    private UserService() {
    }

    public static UserService getInstance() {
        if (userService == null) {
            synchronized (UserService.class) {
                if (userService == null) {
                    userService = new UserService();
                }
            }
        }
        return userService;
    }
public void addUser(User user) {
        Connection conn = DB.getConnection();
        PreparedStatement pstmt = null;
        String sql = "insert into cms_user(name,password,valid,email,phone,time_stamp) values (?,?,?,?,?,?)";
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user.getName());
            pstmt.setString(2, user.getPassword());
            pstmt.setInt(3, user.getValid());
            pstmt.setString(4, user.getEmail());
            pstmt.setString(5, user.getPhone());
            pstmt.setTimestamp(6, new Timestamp(new Date().getTime()));
            // pstmt.setTimestamp(6, new
            // Timestamp(user.getTime_stamp().getTime()));
            // 执行语句到数据库
            pstmt.executeUpdate();

            DB.commit(conn);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DB.close(pstmt);
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }

    }
    
    public void delete(int id) {
        String sql = "delete from cms_user where id=?";
        Connection conn = DB.getConnection();
        PreparedStatement pstmt = null;
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            pstmt.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            DB.close(pstmt);
            DB.commit(conn);
            DB.close(conn);
        }
    ...
    ...            
    }

项目中要用到的工具类部分代码:

/**
 * DB.java 是一个JDBC链接类
 * @version 0.1 目的是进行数据库链接测试,先在mian()方法里面进行测试,然后在写入方法
 * @version 0.2 完善整个DB类,把所有常见的DB操作全部完成
 */
public class DB {
    //最原始的测试方式
    public static void main(String[] args) {
        Connection conn = DB.getConnection();
        System.out.println(conn);
    }
    /**
     * get connection
     * @return
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##cms", "cms");
            conn.setAutoCommit(false);//打开了事务机制
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void close(PreparedStatement pstmt) {
        try {
            if (pstmt != null) {
                pstmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * close db connection
     * @param conn
     */
    public static void close(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
            }
            // DBConnectionPool.close(conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    /**
     * close resultSet
     * @param rs
     */
    public static void close(ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 失败以后回滚的方法
     * @param conn
     */
    public static void rollback(Connection conn) {
        try {
            conn.rollback();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
    }

    /**
     * 手动提交的方法
     * @param conn
     */
    public static void commit(Connection conn) {
        if (conn != null) {
            try {
                conn.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

 

//分页
public class PageList {
    // 1 每页显示的条数: pageSize
    private int pageSize = Constant.PAGESIZE;
    // 2总共有多少条记录: rowCount;
    private int rowCount;
    // 3当前页码数:pageNum;
    private int pageNum;
    // 4总页码数:pageCount;
    private int pageCount;
    // 5保存具体数据的集合
    private List list;

    public PageList() {
        super();
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getRowCount() {
        return rowCount;
    }

    public void setRowCount(int rowCount) {
        this.rowCount = rowCount;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getPageCount() {
        return pageCount;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    @Override
    public String toString() {
        return "PageList [pageSize=" + pageSize + ", rowCount=" + rowCount
                + ", pageNum=" + pageNum + ", pageCount=" + pageCount + "]";
    }
    
    
}


项目中要用到的.jsp文件部分代码:

 

<!--用户添加-->
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

<html>
<head>
<base href="<%=basePath%>" />
<title>用户添加</title>
<link rel="stylesheet" type="text/css" title="xp"
    href="css/skins/xp/validator/component.css" />
<link rel="stylesheet" type="text/css" title="xp"
    href="css/skins/xp/navbar/nav.css" />
<link rel="stylesheet" type="text/css" title="xp"
    href="css/skins/xp/table/skin.css" />
<link rel="stylesheet" type="text/css" title="xp"
    href="css/skins/xp/time/skin.css" />
<script type="text/javascript" src="jscript/time/calendar.js"></script>
<script type="text/javascript" src="jscript/time/calendar-zh.js"></script>
<script type="text/javascript" src="jscript/time/calendar-setup.js"></script>
<script type="text/javascript" src="jscript/common.js"></script>
<script type="text/javascript" src="jscript/validator/form_validator.js" /></script>



<style type="text/css">
body, table, td, select, textarea, input {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
}
</style>
</head>
<body>
    <div id="main">


        <form name="backuserform" method="post" action="admin/UserAddServlet"
            onSubmit='return submitForm(document.forms[0]);'>
            <table class="standard">
                <thead>
                    <tr>
                        <th align="center" colspan="2">用户添加</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td align="left">用户名</td>
                        <td align="left"><input name="name" type="text" TABINDEX="1"
                            id="name" />
                            <div class="Info">
                                <div id="name_info"></div>
                            </div></td>
                    </tr>
                    <tr>
                        <td align="left">用户密码</td>
                        <td align="left"><input name="password" type="password"
                            value="" TABINDEX="2" id="password" />
                            <div class="Info">
                                <div id="password_info"></div>
                            </div></td>
                    </tr>

                    <tr>
                        <td align="left">角色</td>
                        <td align="left"><select name="role" TABINDEX="4" id="role">
                                <option value="1">超级管理员</option>
                        </select>

                            <div class="Info">
                                <div id="role_info"></div>
                            </div></td>
                    </tr>

                    <tr>
                        <td align="left">是否有效</td>
                        <td align="left"><select name="valid" TABINDEX="3" id="valid">
                                <option value="1">有效</option>
                                <option value="0">无效</option>
                        </select>
                            <div class="Info">
                                <div id="valid_info"></div>
                            </div></td>
                    </tr>
                    <tr>
                        <td align="left">EMAIL</td>
                        <td align="left"><input name="email" type="text" value=""
                            TABINDEX="5" id="email" />
                            <div class="Info">
                                <div id="email_info"></div>
                            </div></td>
                    </tr>

                    <tr>
                        <td align="left">电话</td>
                        <td align="left"><input name="phone" type="text" value=""
                            TABINDEX="6" id="phone" />
                            <div class="Info">
                                <div id="phone_info"></div>
                            </div></td>
                    </tr>

                    <tr>
                        <td colspan="2" align="center"><input class="submitButton"
                            type="submit" TABINDEX="7" name="submit" value="提&nbsp;交">
                            <input type="button" name="返回" class="submitButton" value="返回"
                            οnclick="history.back();"></td>
                    </tr>

                </tbody>
                <tfoot>
                    <tr>
                        <td colspan="2" style="text-align: left"></td>

                    </tr>
                </tfoot>
            </table>
        </form>
    </div>
</body>
</html>

 

<!--用户列表-->
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<%@ page import="user.*" %>
    <%@ page import="util.*" %>
<%
    String path = request.getContextPath();//
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
    //获得网站根目录:WebContent
%>    
    
    
<html>
    <head>
        <base href="<%=basePath%>" />
    
        <title>backuser</title>
        <style type="text/css">
body,table,td,select,textarea,input {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
}
</style>
        <link rel="stylesheet" type="text/css" title="xp"
            href="css/skins/xp/validator/component.css" />
        <link rel="stylesheet" type="text/css" title="xp"
            href="css/skins/xp/navbar/nav.css" />
        <link rel="stylesheet" type="text/css" title="xp"
            href="css/skins/xp/table/skin.css" />
        <link rel="stylesheet" type="text/css" title="xp"
            href="css/skins/xp/time/skin.css" />

        <script type="text/javascript">
    function turn(frm, oper, totalpage, curpage, msg) {

        if (oper == 'first') {

            if (curpage == 1) {
                return;
            }
            frm.pagenum.value = 1;
            frm.submit();
            return;
        } else if (oper == 'prev') {
            if (curpage == 1) {
                return;
            }
            frm.pagenum.value = (curpage - 1);
            frm.submit();
            return;
        } else if (oper == 'next') {
            if (curpage >= totalpage) {
                return;
            }
            frm.pagenum.value = (curpage + 1);
            frm.submit();
            return;
        } else if (oper == 'last') {
            if (curpage >= totalpage) {
                return;
            }
            frm.pagenum.value = totalpage;
            frm.submit();
            return;
        } else if (oper == 'jump') {
            var jpage = document.getElementById("jumpto");
            var jpagev = curpage;
            if (jpage.value == ""
                    || !(jpage.value.search(/^(-|\+)?\d+$/) != -1)) {
                alert(msg);
                jpage.focus();
                jpage.select();
                return;
            } else {
                jpagev = parseInt(jpage.value);
            }
            if (jpagev == curpage || jpagev > totalpage || jpagev <= 0) {
                return;
            }
            frm.pagenum.value = jpagev;
            frm.submit();
            return;
        }
    }
</script>

    </head>
    <%
    PageList pageList = (PageList)request.getAttribute("pageList");
    if(pageList == null){
        pageList = new PageList();
    }
    //    List userList = (List)request.getAttribute("userList"); //获得userList对象
    List userList = (List)pageList.getList();
        if(userList == null){
            userList = new ArrayList();    //为了不报错而已
        }
    %>

    <body>
        <div id="main">
            <form name="sportform" method="post"
                action="admin/UserServlet?action=list">
                <table class="sadminheading" style="top-margin: 10">
                    <tr>
                        <td nowrap class="admintitle" colspan="3" align="center">
                            用户列表
                        </td>
                    </tr>

                    <tr>
                        <td align="left" width="10%">
                            用户名:
                        </td>
                        <td align="left" width="40%">
                            <input name="name" type="text" />
                        </td>
                        <td align="right">
                            <input type="submit" name="提交" value="提交"/>&nbsp;&nbsp;&nbsp;
                            <input type="hidden" name="pagenum" value="" />
                            <input type="hidden" name="pagerows" value="" />
                        </td>
                    </tr>


                </table>
            </form>
            <table class="standard">
                <thead>
                    <tr>
                        <th>
                            id
                        </th>
                        <th>
                            用户名
                        </th>
                        <th>
                            用户密码
                        </th>
                        <th>
                            角色
                        </th>
                        <th>
                            email
                        </th>
                        <th>
                            是否有效
                        </th>
                        <th>
                            电话
                        </th>
                        <th>
                            操作
                        </th>

                    </tr>
                </thead>
                <tbody>
                <!-- ****遍历出每个用户信息_开始***** -->
                <%
                    for(Iterator i = userList.iterator(); i.hasNext();){
                        User user = (User) i.next();
                %>
                    <tr>
                        <td>
                            <%=user.getId() %>
                        </td>
                        <td>
                            <%=user.getName() %>
                        </td>
                        <td>
                            <%=user.getPassword() %>
                        </td>
                        <td>
                            --NoRole--
                        </td>
                        <td>
                            <%=user.getEmail() %>
                        </td>
                        <td>
                            <%=user.getValid() %>
                        </td>
                        <td>
                            <%=user.getPhone() %>
                        </td>

                        <td>
                                <a href='admin/UserServlet?action=modify&id=<%=user.getId()%>'>修改</a>
                            <a href='admin/UserServlet?action=delete&id=<%=user.getId() %>'>删除</a>
                        </td>

                    </tr>
                    <%
                        }
                    %>
                    <!-- ****遍历出每个用户信息_结束***** -->
                    <tr>
                        <td colspan="8">
                            No data found
                        </td>
                    </tr>

                
                </tbody>
                    <tfoot>
                    <tr>
                    <!--
                    选定一个元素,监听一个事件,绑定一个函数,在函数中执行一段代码,在代码找对象改属性
                     -->
                    <td colspan="3" style="text-align: left">
                    <%= pageList.getPageNum() %>/<%= pageList.getPageCount()%> 总记录数 <%= pageList.getRowCount() %></td>
                    <td colspan="5" align="right">
                        <%if(pageList.getPageCount() >1){ %>
                            <%if(pageList.getPageNum() >1){ %>
                                <%if(pageList.getPageNum() < pageList.getPageCount()){ %>
                                    <a href="#"
                                        οnclick="turn(document.forms[0],'first','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">第一页</a>
                                    <a href="#"
                                        οnclick="turn(document.forms[0],'prev','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">上一页</a>
                                    <a href="#"
                                        οnclick="turn(document.forms[0],'next','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">下一页</a>
                                    <a href="#"
                                        οnclick="turn(document.forms[0],'last','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">最后一页</a>
                                <%}else{ %>
                                    <a href="#"
                                        οnclick="turn(document.forms[0],'first','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">第一页</a>
                                    <a href="#"
                                        οnclick="turn(document.forms[0],'prev','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">上一页</a>
                                <%} %>
                            <%}else { %>
                                <a href="#"
                                        οnclick="turn(document.forms[0],'next','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">下一页</a>
                                <a href="#"
                                        οnclick="turn(document.forms[0],'last','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">最后一页</a>
                            <%} %>
                        
                        <%} %>
                        
                        go <input type="text" name="cpage" size="5" id="jumpto" /> <a
                        href="#" οnclick="turn(document.forms[0],'jump','<%=pageList.getPageCount() %>','<%=pageList.getPageNum() %>','');return false;">go</a>
                    </td>
                </tr>
                </tfoot>
            </table>
        </div>
    </body>
</html>

转载于:https://www.cnblogs.com/hongxinlaoking/p/4719123.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_703521.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自学python推荐书籍同时找哪些来实践-Python学习路上有这些论坛、网站、书籍与你同行...

Python学习路上有这些论坛、网站、书籍与你同行 2019-05-03 18:24:41 613点赞 9508收藏 164评论 创作立场声明&#xff1a;希望我的一些经验可以给你少走一些弯路&#xff0c;但人总得走点弯路才可以成长。别怕&#xff0c;在学习python的路上有我陪着你。人生苦短&#xff0c;…

怎么在python下载网站内容-分析某网站,并利用python自动登陆该网站,下载网站内容...

本帖最后由 愤怒的小车 于 2019-5-8 09:41 编辑 一&#xff1a;本代码是我研究了好久才写出来&#xff0c;七功能主要有自动登陆、自动识别验证码、以及自动识别下载格式进行判断下载&#xff01; 首先&#xff0c;搬上我们的主角网址&#xff0c;http://lavteam.org/&#xff…

网站漏洞修复公司处理网站被篡改跳转到其他网站的解决办法

2019独角兽企业重金招聘Python工程师标准>>> 某一客户单位的网站首页被篡改&#xff0c;并收到网监的通知说是网站有漏洞&#xff0c;接到上级部门的信息安全整改通报&#xff0c;贵单位网站被植入木马文件&#xff0c;导致网站首页篡改跳转到caipiao网站&#xff0…

python爬虫怎么爬同一个网站的多页数据-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

原标题&#xff1a;不踩坑的Python爬虫&#xff1a;如何在一个月内学会爬取大规模数据Python爬虫为什么受欢迎 如果你仔细观察&#xff0c;就不难发现&#xff0c;懂爬虫、学习爬虫的人越来越多&#xff0c;一方面&#xff0c;互联网可以获取的数据越来越多&#xff0c;另一方面…

烂泥:纠结一天的zencart网站问题,终于解决了

本文由51cto.com提供友情赞助&#xff0c;首发于烂泥行天下。 本人的博客本来是存放在网站根目录下的wp文件夹下的&#xff0c;访问也正常&#xff0c;一切都正常。但是感觉还是不舒服&#xff0c;因为访问的时候要输入&#xff1a;http://www.lanni654321.com/wp&#xff0c;才…

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件&#xff0c;这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面&#xff0c;该网页如下&#xff1a;实现代码如下&#xff1a; import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件&#xff0c;这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面&#xff0c;该网页如下&#xff1a;实现代码如下&#xff1a; import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

网站开发常用jQuery插件总结(15)上传插件blueimp

在介绍这个插件之前&#xff0c;先吐槽一下。这个插件功能很强大。带有的功能有&#xff1a;上传&#xff08;单个文件或批量文件&#xff09;,自动上传或点击按钮上传&#xff0c;上传前缩略图显示&#xff0c;判断文件格式&#xff0c;上传前的文件操作&#xff0c;上传时进度…

自学python推荐书籍同时找哪些来实践-Python学习路上有这些论坛、网站、书籍与你同行...

Python学习路上有这些论坛、网站、书籍与你同行 2019-05-03 18:24:41 613点赞 9508收藏 164评论 创作立场声明&#xff1a;希望我的一些经验可以给你少走一些弯路&#xff0c;但人总得走点弯路才可以成长。别怕&#xff0c;在学习python的路上有我陪着你。人生苦短&#xff0c;…

怎么在python下载网站内容-分析某网站,并利用python自动登陆该网站,下载网站内容...

本帖最后由 愤怒的小车 于 2019-5-8 09:41 编辑 一&#xff1a;本代码是我研究了好久才写出来&#xff0c;七功能主要有自动登陆、自动识别验证码、以及自动识别下载格式进行判断下载&#xff01; 首先&#xff0c;搬上我们的主角网址&#xff0c;http://lavteam.org/&#xff…

python爬虫怎么爬同一个网站的多页数据-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

原标题&#xff1a;不踩坑的Python爬虫&#xff1a;如何在一个月内学会爬取大规模数据Python爬虫为什么受欢迎 如果你仔细观察&#xff0c;就不难发现&#xff0c;懂爬虫、学习爬虫的人越来越多&#xff0c;一方面&#xff0c;互联网可以获取的数据越来越多&#xff0c;另一方面…

《大型网站技术架构》-读书笔记四:高可用架构

一、网站可用性的度量与考核 1、可用性度量:通常用多少个9来形容网站的可用性 2、可用性考核&#xff1a;可用性指标是网站架构设计的重要指标&#xff0c;对外是服务承诺&#xff0c;对内是考核指标。 二、高可用的网站架构 三、高可用的应用 1、通过负载均衡进行无状态服务的…

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件&#xff0c;这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面&#xff0c;该网页如下&#xff1a;实现代码如下&#xff1a; import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

如何用python创建一个下载网站-用Python下载一个网页保存为本地的HTML文件实例...

我们可以用Python来将一个网页保存为本地的HTML文件&#xff0c;这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面&#xff0c;该网页如下&#xff1a;实现代码如下&#xff1a; import urllib.request def getHtml(url): html urllib.request.urlopen(url).read…

各种大型网站技术架构

引言近段时间以来&#xff0c;通过接触有关海量数据处理和搜索引擎的诸多技术&#xff0c;常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外&#xff0c;更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图&#…

自学python推荐书籍同时找哪些来实践-Python学习路上有这些论坛、网站、书籍与你同行...

Python学习路上有这些论坛、网站、书籍与你同行 2019-05-03 18:24:41 613点赞 9508收藏 164评论 创作立场声明&#xff1a;希望我的一些经验可以给你少走一些弯路&#xff0c;但人总得走点弯路才可以成长。别怕&#xff0c;在学习python的路上有我陪着你。人生苦短&#xff0c;…

怎么在python下载网站内容-分析某网站,并利用python自动登陆该网站,下载网站内容...

本帖最后由 愤怒的小车 于 2019-5-8 09:41 编辑 一&#xff1a;本代码是我研究了好久才写出来&#xff0c;七功能主要有自动登陆、自动识别验证码、以及自动识别下载格式进行判断下载&#xff01; 首先&#xff0c;搬上我们的主角网址&#xff0c;http://lavteam.org/&#xff…

python爬虫怎么爬同一个网站的多页数据-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

原标题&#xff1a;不踩坑的Python爬虫&#xff1a;如何在一个月内学会爬取大规模数据Python爬虫为什么受欢迎 如果你仔细观察&#xff0c;就不难发现&#xff0c;懂爬虫、学习爬虫的人越来越多&#xff0c;一方面&#xff0c;互联网可以获取的数据越来越多&#xff0c;另一方面…

理解大型分布式网站你应该知道这些概念

2019独角兽企业重金招聘Python工程师标准>>> 1. I/O优化 增加缓存&#xff0c;减少磁盘的访问次数。 优化磁盘的管理系统&#xff0c;设计最优的磁盘方式策略&#xff0c;以及磁盘的寻址策略&#xff0c;这是在底层操作系统层面考虑的。 设计合理的磁盘存储数据块&a…

Drupal 网站漏洞修复以及网站安全防护加固方法

2019独角兽企业重金招聘Python工程师标准>>> drupal是目前网站系统使用较多一个开源PHP管理系统&#xff0c;架构使用的是php环境mysql数据库的环境配置&#xff0c;drupal的代码开发较为严谨&#xff0c;安全性较高&#xff0c;但是再安全的网站系统&#xff0c;也…