1-2章、笔记总结

一、javaweb体系结构思维导图

在这里插入图片描述

二、基础理论(01)

1、Uniform Resource Locator:统一资源定位符,用于完整地描述互联网资源的地址

URL组成
在这里插入图片描述

2、get与post请求方式对比

在这里插入图片描述

3、jsp指令和小脚本

  • JSP指令(Directives),用于声明页面属性、用于控制页面处理,表示如下:
    <%@ 指令名称 属性1=“属性值” 属性2=“属性值2,属性值3” %>
  • Page指令用于设置页面属性,表示如下:
    <%@ page 属性1=“属性值” 属性2=“属性值1,属性值2” %>
  • JSP页面中的Java代码片段,以<%开头,以%>结束,如:<%Java代码%>
  • 展示服务器端的响应结果,如:<%=Java变量或表达式%>

以上具体示例代码如下:
示例1

<%@ page import="java.text.DecimalFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>计算圆面积</title>
</head>
<body>
<%!
    //计算圆形面积
    double area(double r) {
        return Math.PI * r * r;
    }
    String getString() {
        return "hello world";
    }
%>
<%
    double r1 = 5;
    double r2 = 10;
    DecimalFormat df = new DecimalFormat("0.00 ");
%>
半径为<%= r1%>的圆面积为<%= df.format(area(r1))%>
<br/>
半径为<%= r2%>的圆面积为<%= df.format(area(r2))%>
</body>
</html>

三、JSP核心内置对象(02)

在这里插入图片描述

示例1:满意度调查

<%--此处文件名为:questionaire.jsp--%>
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
    <title>问卷调查</title>
</head>
<body>
<div align="center">产品满意度调查
<%--    此处重点注意action里面的链接,否则出现404--%>
    <form name="form1" method="post" action="questionaireInfo.jsp">
        <table  border="0" align="center">
            <tr>
                <td>商品评价</td>
                <td>
                    <input type="radio" name="productStar" value="5星" checked/>5<input type="radio" name="productStar" value="4星"/>4<input type="radio" name="productStar" value="3星"/>3<input type="radio" name="productStar" value="2星"/>2<input type="radio" name="productStar" value="1星"/>1</td>
            </tr>
            <tr>
                <td>使用反馈</td>
                <td><textarea cols="50" rows="10" id="feedback"></textarea></td>
            </tr>
            <tr>
                <td>配送评价</td>
                <td>
                    <input type="checkbox" name="delivery" value="配送快"/>配送快
                    <input type="checkbox" name="delivery" value="配送完好"/>配送完好<br/>
                    <input type="checkbox" name="delivery" value="服务态度好"/>服务态度好
                    <input type="checkbox" name="delivery" value="准时到达"/>准时到达<br/>
                </td>
            </tr>
            <!-- 以下是提交、取消按钮 -->
            <tr >
                <td colspan="2" align="center" >
                    <input type="submit" name="Submit" value="提交"/>
                    <input type="reset" name="Reset" value="取消"/>
                </td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>
<%--此处文件名为:questionaireInfo.jsp--%>
<%@ page language="java" pageEncoding="UTF-8" %>
<html>
<head>
    <title>问卷调查信息</title>
</head>
<body>
<%
    // 设置字符集编码
    request.setCharacterEncoding("UTF-8");
    // 获取星级评价
    String productStar = request.getParameter("productStar");
    // 获取使用反馈
    String feedback = request.getParameter("feedback");
    // 获取配送评价
    String[] deliveries = request.getParameterValues("delivery");
%>
<div align="center">您填写的问卷信息
    <table border="0" align="center">
        <tr>
            <td width="80" height="20">商品评价:</td>
            <td><%=productStar%>
            </td>
        </tr>
        <tr>
            <td height="20">使用反馈:</td>
            <td><%=feedback%>
            </td>
        </tr>
        <tr>
            <td height="20"> 配送评价:</td>
            <td>
                <%
                    if (deliveries != null) {
                        for (String delivery : deliveries) {
                            out.print(delivery + "&nbsp;");
                        }
                    }
                %>
            </td>
        </tr>
    </table>
</div>
</body>
</html>

总结核心方法为:setCharacterEncoding()指定每个请求的编码,getParameter()根据表单组件名称获取提交数据,getParameterValues()获取表单组件对应多个值时的请求数据

示例2:模拟登录功能

在登录页面(login.jsp)填写用户名、密码,点击“登录”按钮,执行重定向或转发操作

<%--login.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>用户登录</title>
  </head>
  <body>
  	<form name="form1" method="post" action="control.jsp">
  		<table>
			<tr>
				<td>用户名:</td>
				<td><input type="text" name="username"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password" name="password"></td>
			</tr>
			<tr>
				<td><input type="submit" value="登录"></td>
				<td><input type="reset" value="取消"></td>
			</tr>
  		</table>
	</form>
  </body>
</html>
<%--control.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录处理页面</title>
</head>
<body>
<%
    request.setCharacterEncoding("UTF-8");
    String name = request.getParameter("username");
    String pwd = request.getParameter("password");
    if ("lv".equals(name) && "123".equals(pwd)) {
        // 发送新的请求,不包含上次请求中的数据
//			response对象提供了请求重定向功能
//			sendRedirect()方法可以将请求重定向到一个新的URL
        response.sendRedirect("index.jsp");

        //返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求
		//request.getRequestDispatcher("index.jsp").forward(request,response);
    }
%>
</body>
</html>
<%--index.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>微博系统首页</title>
</head>
<body>
<%
    String name = request.getParameter("username");
%>
你好!<%= name%>!
  <h1>欢迎进入微博系统!</h1>
</body>
</html>

运行结果如下:
sendRedirect重定向如:
在这里插入图片描述
getRequestDispatcher转发如:
在这里插入图片描述

总结:核心只在于control.jsp中sendRedirect和getRequestDispatcher两个方法

示例3:超链接传递值

<%--hotlist.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>微博热点</title>
</head>
<body>
    <h2>微博热点</h2>
    <a href = "output.jsp?id=102001">《在一起》太好看了,这才是优秀的抗疫剧!</a></br>
    <a href = "output.jsp?id=102002">冰壶国家集训队队内对抗赛,在北京首钢园国家冬季运动中心精彩开幕。</a></br>
    <a href = "output.jsp?id=102003">献唱《好儿好女好家园》,用歌声告白我们伟大的祖国!</a></br>
</body>
</html>
<%--output.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>我选择的热点</title>
</head>
<body>
    <%
        String id = request.getParameter("id");
        // 获取请求方法
        String method = request.getMethod();
        // 获取请求url
        StringBuffer requestURL = request.getRequestURL();
    %>
    我选择的热点微博编号为<%= id%>
    我使用的方法是<%= method+"===="+requestURL%>
</body>
</html>

示例4:设置并获取session信息

<%--login.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>用户登录</title>
  </head>
  <body>
  	<form name="form1" method="post" action="do_login.jsp">
  		<table>
			<tr>
				<td>用户名:</td>
				<td><input type="text" name="username"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password" name="password"></td>
			</tr>
			<tr>
				<td><input type="submit" value="登录"></td>
				<td><input type="reset" value="取消"></td>
			</tr>
  		</table>
	</form>
  </body>
</html>
<%--do_login.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录处理页面</title>
</head>
<body>
    <%
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if("lv".equals(username) && "123".equals(password)){
            //验证通过,设置登录用户信息
            session.setAttribute("user",username);
            //设置session过期时间
            session.setMaxInactiveInterval(15*60);
            //转发到首页
            request.getRequestDispatcher("index.jsp").forward(request,response);
        }else{
            //重定向到登录页
            response.sendRedirect("login.jsp");
        }
    %>
</body>
</html>
<%--index.jsp--%>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>微博系统首页</title>
</head>
<body>
<%
    String name = (String) session.getAttribute("user");
    if (name == null) {
        response.sendRedirect("login.jsp");
        return;
    }
%>
你好!<%= name%>!
<h1>欢迎进入微博系统!</h1>
<br>
<%--获取到当前会话id--%>
Session Id 是:<%= session.getId()%></br>
<%--获取到当前会话时间--%>
Session 创建时间:<%= new Date(session.getCreationTime())%>
</body>
</html>

session方法总结:
在这里插入图片描述

示例5:添加并获取cookie信息

<%--login.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>用户登录</title>
  </head>
  
  <body>
  	<form name="form1" method="post" action="do_login.jsp">
  		<table>
			<tr>
				<td>用户名:</td>
				<td><input type="text" name="username"></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password" name="password"></td>
			</tr>
			<tr>
				<td><input type="submit" value="登录"></td>
				<td><input type="reset" value="取消"></td>
			</tr>
  		</table>
	</form>
  </body>
</html>
<%--do_login.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录处理页面</title>
</head>
<body>
<%
    request.setCharacterEncoding("UTF-8");
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    //用户名写入cookie
    Cookie name = new Cookie("username", username);
    Cookie pwd = new Cookie("password", password);
    //设置cookie有效期
    name.setMaxAge(60);
//    pwd.setMaxAge(60);
//    把cookie写入响应对象中
    response.addCookie(name);
    response.addCookie(pwd);
//    重定向到获取cookies界面中
    response.sendRedirect("getCookies.jsp");

%>
</body>
</html>
<%--getCookies.jsp--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>显示Cookie</title>
</head>
<body>
    <%
        //显示SessionId
        out.print("Session id: " + session.getId());
        out.print("<br/><br/>");

        //显示Cookies,再次请求直接从cookie中获取
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for(int i=0; i<cookies.length; i++){
                out.print("cookie name: " + cookies[i].getName());
                out.print("<br/>");
                out.print("cookie value: " + cookies[i].getValue());
                out.print("<br/>");
            }
        }
    %>
</body>
</html>

最后总结(如02大图)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主要介绍了概率图模型的基本概念和常见类型,以及如何利用Python实现这些模型。下面是一些笔记和代码示例。 ## 概率图模型的基本概念 概率图模型是一种用于表示和处理不确定性的图形化模型,它能够将一个复杂的联合概率分布表示为多个简单的条件概率分布的乘积形式,从而简化概率推理和模型学习的过程。概率图模型主要包括两种类型:有向图模型和无向图模型。 有向图模型(Directed Acyclic Graph, DAG)又称为贝叶斯网络(Bayesian Network, BN),它用有向边表示变量之间的因果关系,每个节点表示一个随机变量,给定父节点的条件下,每个节点的取值都可以用一个条件概率分布来描述。有向图模型可以用贝叶斯公式进行概率推理和参数学习。 无向图模型(Undirected Graphical Model, UGM)又称为马尔可夫随机场(Markov Random Field, MRF),它用无向边表示变量之间的相互作用关系,每个节点表示一个随机变量,给定邻居节点的取值,每个节点的取值都可以用一个势函数(Potential Function)来描述。无向图模型可以用和有向图模型类似的方法进行概率推理和参数学习。 ## 概率图模型的Python实现 在Python中,我们可以使用`pgmpy`库来实现概率图模型。该库提供了一个简单而强大的接口来定义和操作概率图模型,支持有向图模型和无向图模型的构建、概率推理、参数学习等功能。 ### 有向图模型 以下是一个简单的有向图模型的示例: ```python from pgmpy.models import BayesianModel model = BayesianModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`BayesianModel`是有向图模型的类,`('A', 'B')`表示A节点指向B节点,即B节点是A节点的子节点,依此类推。我们可以使用以下代码查看模型的结构: ```python print(model.edges()) # 输出:[('A', 'B'), ('B', 'D'), ('C', 'B')] ``` 接下来,我们可以为每个节点定义条件概率分布。以下是一个简单的例子: ```python from pgmpy.factors.discrete import TabularCPD cpd_a = TabularCPD(variable='A', variable_card=2, values=[[0.2, 0.8]]) cpd_c = TabularCPD(variable='C', variable_card=2, values=[[0.4, 0.6]]) cpd_b = TabularCPD(variable='B', variable_card=2, values=[[0.1, 0.9, 0.3, 0.7], [0.9, 0.1, 0.7, 0.3]], evidence=['A', 'C'], evidence_card=[2, 2]) cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.9, 0.1], [0.1, 0.9]], evidence=['B'], evidence_card=[2]) model.add_cpds(cpd_a, cpd_c, cpd_b, cpd_d) ``` 其中,`TabularCPD`是条件概率分布的类,`variable`表示当前节点的变量名,`variable_card`表示当前节点的取值个数,`values`表示条件概率分布的值。对于有父节点的节点,需要指定`evidence`和`evidence_card`参数,表示当前节点的父节点和父节点的取值个数。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import VariableElimination infer = VariableElimination(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`VariableElimination`是概率推理的类,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ### 无向图模型 以下是一个简单的无向图模型的示例: ```python from pgmpy.models import MarkovModel model = MarkovModel([('A', 'B'), ('C', 'B'), ('B', 'D')]) ``` 其中,`MarkovModel`是无向图模型的类,与有向图模型类似,`('A', 'B')`表示A节点和B节点之间有相互作用关系。 接下来,我们可以为每个节点定义势函数。以下是一个简单的例子: ```python from pgmpy.factors.discrete import DiscreteFactor phi_a = DiscreteFactor(['A'], [2], [0.2, 0.8]) phi_c = DiscreteFactor(['C'], [2], [0.4, 0.6]) phi_b = DiscreteFactor(['A', 'C', 'B'], [2, 2, 2], [0.1, 0.9, 0.3, 0.7, 0.9, 0.1, 0.7, 0.3]) phi_d = DiscreteFactor(['B', 'D'], [2, 2], [0.9, 0.1, 0.1, 0.9]) model.add_factors(phi_a, phi_c, phi_b, phi_d) ``` 其中,`DiscreteFactor`是势函数的类,与条件概率分布类似,需要指定变量名、变量取值个数和势函数的值。 接下来,我们可以使用以下代码进行概率推理: ```python from pgmpy.inference import BeliefPropagation infer = BeliefPropagation(model) print(infer.query(['D'], evidence={'A': 1})) # 输出:+-----+----------+ # | D | phi(D) | # +=====+==========+ # | D_0 | 0.6000 | # +-----+----------+ # | D_1 | 0.4000 | # +-----+----------+ ``` 其中,`BeliefPropagation`是概率推理的类,与有向图模型类似,`query`方法用于查询给定变量的概率分布,`evidence`参数用于指定给定变量的取值。 ## 总结介绍了概率图模型的基本概念和Python实现,包括有向图模型和无向图模型的构建、条件概率分布和势函数的定义、概率推理等。使用`pgmpy`库可以方便地实现概率图模型,对于概率模型的学习和应用都有很大的帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值