`
java书童
  • 浏览: 8566 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

六、《研磨struts2》第二章 Struts2的HelloWorld 之从Servlet+JSP+JavaBean实现MVC开始

 
阅读更多

2.3.Struts2的HelloWorld 之从Servlet+JSP+JavaBean实现MVC开始

2.3.1  起点概述

考虑到大部分朋友都是有一定经验的web开发者,因此从Servlet+JSP+JavaBean实现MVC开始,再过渡到Struts2的开发,这样能让大家把以前的知识自然迁移到Struts2上,使得学习曲线变得平滑。

说明一下,由于本机的8080端口被别的软件占用了,所以把tomcat改到了9080端口,以后在程序里出现的时候,也将是9080。

       注意:如果要修改Tomcat的端口,需要修改Tomcat中的server.xml配置文件,并且应该在创建动态工程之前进行修改。请找到Tomcat的安装目录下的conf子目录,找到其中的server.xml,在这个文件中搜索8080,会找到相应的配置部分:

java代码:
  1. <Connector port="8080" protocol="HTTP/1.1"   
  2.                connectionTimeout="20000"   
  3.                redirectPort="8443" />  
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

把上面配置中的8080改为9080即可。

比如Tomcat安装在E:\Struts2\server\apache-tomcat-6.0.29,因此需要修改的配置文件在E:\Struts2\server\apache-tomcat-6.0.29\conf\server.xml

2.3.2  建立动态的web工程

为了使用eclipse-jee-europa中各种与Web开发相关的功能,先来建立一个动态的web工程。

(1)在Package Expolorer视图中的空白处点右键,选择【New】->【Project】,在弹出页面选中web文件夹下的Dynamic Web Project选项,如下界面。

 

图2.10 选择新建动态web工程

(2)选择其中的”Dynamic Web Project”,点击Next。会跳转到如下界面。

图2.11 建立web工程的配置1

(3)输入项目名HelloWorld之后,然后选择Target Runtime的值为Apache Tomcat v6.0 ,这样eclipse会帮你导入tomcat下所有的jar包,然后点击Next,得到如下界面:

图2.12 建立web工程的配置2

(4)使用默认的配置,点击Next,得到如下界面:

图2.13 建立web工程的配置3

(5)修改Context Root的值为小写的helloworld,默认是工程名字,是“HelloWorld”。至于WebContent改不改,就看你的习惯了,用默认的就好了。

       点击Finish,一个动态的Web工程就创建好了。

2.3.3  配置工程运行环境

在Servers视图中空白处点击右键,选择【New】->【Server】,得到如下界面。

 

图2.14 选择新建服务器

       选择“Tomcat v6.0 Server”选项,点击Next,得到如下界面:

图2.15 选择web工程

选择HelloWorld工程,点击Add按钮,把工程添加到右边的列表,然后点击Finish,就完成了配置。这时候,在Package Explorer里会增加一个叫Servers的工程,这是eclipse自动管理的,暂时不需要修改这个工程中的任何文件。

2.3.4  编写JavaBean

用Model2来实现MVC,模型部分是使用JavaBean来实现的,而且视图和控制器之间的数据交互也是通过JavaBean来实现的,因此先来把JavaBean编写好。

这里不需要实现什么复杂的业务逻辑,只是一个简单的数据封装model,有三个属性,分别是account、password和submitFlag,其中的submitFlag是用来封装提交请求的标记,为他们提供相应的getter和setter方法,示例代码如下:

 

java代码:
  1. package cn.javass.hello.servletimpl.vo;  
  2. public class HelloWorldModel {  
  3.     private String account;  
  4.     private String password;  
  5.     private String submitFlag;  
  6.     public String getAccount() {  
  7.         return account;  
  8.     }  
  9.     public void setAccount(String account) {  
  10.         this.account = account;  
  11.     }  
  12.     public String getPassword() {  
  13.         return password;  
  14.     }  
  15.     public void setPassword(String password) {  
  16.         this.password = password;  
  17.     }  
  18.     public String getSubmitFlag() {  
  19.         return submitFlag;  
  20.     }  
  21.     public void setSubmitFlag(String submitFlag) {  
  22.         this.submitFlag = submitFlag;  
  23.     }  
  24.     public String toString(){  
  25.         return "account="+account+",password="+password  
  26.                              +",submitFlag="+submitFlag;  
  27.     }  
  28.     /** 
  29.      * 示例方法,表示可以执行业务逻辑处理的方法, 
  30.      * 比如对数据进行增删改查的操作等等 
  31.      */  
  32.     public void businessExecute(){  
  33.         System.out.println("正在进行业务处理=======>");  
  34.     }  
  35. }  
package cn.javass.hello.servletimpl.vo;
public class HelloWorldModel {
	private String account;
	private String password;
	private String submitFlag;
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getSubmitFlag() {
		return submitFlag;
	}
	public void setSubmitFlag(String submitFlag) {
		this.submitFlag = submitFlag;
	}
	public String toString(){
		return "account="+account+",password="+password
                             +",submitFlag="+submitFlag;
	}
	/**
	 * 示例方法,表示可以执行业务逻辑处理的方法,
	 * 比如对数据进行增删改查的操作等等
	 */
	public void businessExecute(){
		System.out.println("正在进行业务处理=======>");
	}
}

2.3.5  编写Servlet

Servlet在Model2中的作用相当于MVC中的控制器,这里只是一个简单的实现,基本的实现主要有如下工作:

  • 收集request传递过来的参数。
  • 把这些参数组织成为模型需要的类型
  • 调用模型进行逻辑功能处理
  • 选择下一个页面,先准备好下一个页面需要的数据,然后转向下一个页面。

       先来建立Servlet,在src下面先建包cn.javass.hello.servletimpl.servlet,然后在这个包下新建一个类HelloWorldServlet,这个类继承HttpServlet,并重写父类的doPost和doGet方法,其中doGet方法只是转调一下自己的doPost方法即可。在Servlet的doPost方法中,完成上面提到的工作。代码示例如下:

 

java代码:
  1. package cn.javass.hello.servletimpl.servlet;  
  2. import java.io.IOException;  
  3. import javax.servlet.ServletException;  
  4. import javax.servlet.http.HttpServlet;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7. import cn.javass.hello.servletimpl.vo.HelloWorldModel;  
  8.   
  9. public class HelloWorldServlet extends HttpServlet {  
  10.     protected void doGet(HttpServletRequest request, HttpServletResponse response)  
  11.             throws ServletException, IOException {  
  12.         doPost(request, response);  
  13.     }  
  14.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{  
  15.         //1:收集参数,不用做了,通过JavaBean传入  
  16.         //2:组织参数,也不用作了,已经组织好了,把数据封装成了JavaBean  
  17.         //这里只需要获取封装好的JavaBean即可  
  18.         HelloWorldModel hwm = (HelloWorldModel)request.getAttribute("helloModel");  
  19.           
  20.         //3:调用模型的逻辑功能处理  
  21.         hwm.businessExecute();  
  22.         //这里简单的输出一下传入的参数  
  23.         System.out.println("用户输入的参数为==="+hwm);  
  24.           
  25.         //4:根据逻辑处理的结果来选择下一个页面,这里直接选择转向欢迎页面  
  26.         //4.1:先把需要欢迎页面显示的数据准备好  
  27.         request.setAttribute("hwm",hwm);  
  28.         //4.2:转向欢迎页面  
  29.         request.getRequestDispatcher("/servletimpl/welcome.jsp").forward(request,response);  
  30.     }  
  31. }  
package cn.javass.hello.servletimpl.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.javass.hello.servletimpl.vo.HelloWorldModel;

public class HelloWorldServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		//1:收集参数,不用做了,通过JavaBean传入
		//2:组织参数,也不用作了,已经组织好了,把数据封装成了JavaBean
		//这里只需要获取封装好的JavaBean即可
		HelloWorldModel hwm = (HelloWorldModel)request.getAttribute("helloModel");
		
		//3:调用模型的逻辑功能处理
		hwm.businessExecute();
		//这里简单的输出一下传入的参数
		System.out.println("用户输入的参数为==="+hwm);
		
		//4:根据逻辑处理的结果来选择下一个页面,这里直接选择转向欢迎页面
		//4.1:先把需要欢迎页面显示的数据准备好
		request.setAttribute("hwm",hwm);
		//4.2:转向欢迎页面
		request.getRequestDispatcher("/servletimpl/welcome.jsp").forward(request,response);
	}
}

非常简单,对吧,接下来看看如何配置这个Servlet。

2.3.6  配置web.xml

在web.xml中,配置上面做好的Servlet,配置示例如下:

 

java代码:
  1. <servlet>  
  2.         <servlet-name>hello</servlet-name>  
  3.         <servlet-class>cn.javass.hello.servletimpl.servlet.HelloWorldServlet</servlet-class>  
  4.     </servlet>  
  5.         
  6.     <servlet-mapping>  
  7.         <servlet-name>hello</servlet-name>  
  8.         <url-pattern>/hello</url-pattern>  
  9.     </servlet-mapping>  
<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>cn.javass.hello.servletimpl.servlet.HelloWorldServlet</servlet-class>
	</servlet>
	  
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>

配置分为<servlet>元素和<servlet-mapping>元素,它们都有一个子元素<servlet-name>,而<servlet>元素和<servlet-mapping>元素的<servlet-name>子元素里面注册的名字必须一样。<servlet>元素的子元素<servlet-class>用来注册Servlet类的全类名,也就是包的全路径再加上类名称,而<servlet-mapping>元素的<url-pattern>元素指明了这个Servlet响应哪些URL对应的请求。

2.3.7  编写登录页面

在项目的WebContent文件夹下创建一个servletimpl的文件夹,然后在servletimpl文件夹上右击,选择【New】->【Other】->【JSP】,创建一个名称为login的jsp页面,然后修改里面的“ISO-8859-1”为“gb2312”。

       登录页面提供让用户填写用户名和密码的表单,用户填写好过后,可以点击提交按钮来向Servlet发出登录请求,示例代码如下。

 

java代码:
  1. <%@ page language="java" contentType="text/html; charset=gb2312"  
  2.     pageEncoding="gb2312"%>  
  3. <html>  
  4. <head>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  6. <title>Insert title here</title>  
  7. </head>  
  8. <body>  
  9. <jsp:useBean id="helloModel" class="cn.javass.hello.servletimpl.vo.HelloWorldModel" scope="request"></jsp:useBean>  
  10. <jsp:setProperty name="helloModel" property="*"/>  
  11.   
  12. <%  
  13.     if("login".equals(helloModel.getSubmitFlag())){  
  14. %>  
  15.     <jsp:forward page="/hello"></jsp:forward>  
  16. <%         
  17.     }  
  18. %>  
  19.   
  20. <form action="/helloworld/servletimpl/login.jsp" method="post">  
  21.     <input type="hidden" name="submitFlag" value="login"/>  
  22.     账号:<input type="text" name="account"><br>  
  23.     密码:<input type="password" name="password"><br>  
  24.     <input type="submit" value="提交">  
  25. </form>  
  26.   
  27. </body>  
  28. </html>  
<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="helloModel" class="cn.javass.hello.servletimpl.vo.HelloWorldModel" scope="request"></jsp:useBean>
<jsp:setProperty name="helloModel" property="*"/>

<%
	if("login".equals(helloModel.getSubmitFlag())){
%>
	<jsp:forward page="/hello"></jsp:forward>
<%		
	}
%>

<form action="/helloworld/servletimpl/login.jsp" method="post">
	<input type="hidden" name="submitFlag" value="login"/>
	账号:<input type="text" name="account"><br>
	密码:<input type="password" name="password"><br>
	<input type="submit" value="提交">
</form>

</body>
</html>

说明一下:<form>元素的action属性用来指定由谁来进行响应,由于这里使用JavaBean来收集页面的数据,因此需要先提交到本页面,然后再转向相应的servlet进行处理,其中的“/helloworld”为这个工程的web上下文名,而“/login”是这个Servlet在这个web工程中的资源名,和web.xml中的配置要对应(就是<servlet-mapping>元素的子元素<url-parttern>中的值)。

提示:为了方便中文的处理,在今后的学习中统一采用gb2312编码,有些朋友可能习惯统一采用utf-8,都没有问题,只要全部统一起来,处理中文的时候就会比较方便。

2.3.8  编写欢迎页面

欢迎页面是完成登录功能过后跳转到的页面,用来显示欢迎信息,非常简单,只是简单的把需要展示的信息输出到页面上。

 

java代码:
  1. <%@ page language="java" contentType="text/html; charset=gb2312"  
  2.     pageEncoding="gb2312"%>  
  3. <html>  
  4. <head>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  6. <title>Insert title here</title>  
  7. </head>  
  8. <body>  
  9. <jsp:useBean id="hwm" class="cn.javass.hello.servletimpl.vo.HelloWorldModel" scope="request"></jsp:useBean>  
  10.   
  11. 欢迎账号为<%=hwm.getAccount() %>的朋友来访  
  12. </body>  
  13. </html>  
<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="hwm" class="cn.javass.hello.servletimpl.vo.HelloWorldModel" scope="request"></jsp:useBean>

欢迎账号为<%=hwm.getAccount() %>的朋友来访
</body>
</html>

2.3.9  测试示例

       要测试上面写的示例,需要先启动tomacat服务器,先选中Servers视图的里面的“Tomcat v6.0 Server at localhost”选项,然后点击start的按钮,则会启动tomcat6.0,如下图所示:

 

图2.16 启动tomcat

等几秒钟,tomcat启动的信息输出会出现在Console视图中,这就表示tomcat启动成功了。

       当Tomcat正常启动后,在浏览器窗口中输入如下地址并运行:http://localhost:9080/helloworld/servletimpl/login.jsp,会出现登录页面。如下所示:

图2.17 访问登录页面

在登录页面输入账号和密码,点击提交,则会跳转到相应的HelloWorldServlet。 HelloWorldServlet会先接收请求中的参数,然后在后台输出你刚刚输入的数据,后台输出如下所示:

 

java代码:
  1. 正在进行业务处理=======>  
  2. 用户输入的参数为===account=test,password=test,submitFlag=login  
正在进行业务处理=======>
用户输入的参数为===account=test,password=test,submitFlag=login

接着HelloWorldServlet会把这些数据设置到request中,作为共享的数据传递给下一个页面,接下来就该跳转到下一个页面welcome.jsp,也就是欢迎页面了。欢迎页面会把HelloWorldServlet中传递过来的数据,输出到页面上。如下图所示:

 

2.3.10  中文处理

示例做到这里,好像已经可以很好的工作了,但是,如果在账号里输入“中文”,会发现后台输出的信息和欢迎页面接收到的参数都是乱码,如下所示:

 

java代码:
  1. 正在进行业务处理=======>  
  2. 用户输入的参数为===account=????,password=test,submitFlag=login  
正在进行业务处理=======>
用户输入的参数为===account=????,password=test,submitFlag=login

后台输出接收到的参数是乱码,再看看页面上的表现,如下图所示:

图2.19 欢迎页面接收到的参数也是乱码

遇到中文问题了,该怎么处理呢?

在实际项目里会使用一个Filter来解决Tomcat的中文问题,这里不去讨论Filter的写法,在Tomcat的包中就有一个写好的处理字符集的filter,位置在下载的Tomcatd的zip包下\webapps\examples\WEB-INF\classes\filters文件夹下面,名称是SetCharacterEncodingFilter.java。

为了示例简单,去掉了所有的注释,代码如下:

 

java代码:
  1. public class SetCharacterEncodingFilter implements Filter {  
  2.     protected String encoding = null;  
  3.     protected FilterConfig filterConfig = null;  
  4.     protected boolean ignore = true;  
  5.   
  6.     public void destroy() {  
  7.         this.encoding = null;  
  8.         this.filterConfig = null;  
  9.     }  
  10.   
  11.     public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)    throws IOException, ServletException {  
  12.         if (ignore || (request.getCharacterEncoding() == null)) {  
  13.             String encoding = selectEncoding(request);  
  14.             if (encoding != null)  
  15.                 request.setCharacterEncoding(encoding);  
  16.         }  
  17.         chain.doFilter(request, response);  
  18.     }  
  19.   
  20.     public void init(FilterConfig filterConfig) throws ServletException {  
  21.                 this.filterConfig = filterConfig;  
  22.         this.encoding = filterConfig.getInitParameter("encoding");  
public class SetCharacterEncodingFilter implements Filter {
    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;

    public void destroy() {
        this.encoding = null;
        this.filterConfig = null;
    }

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)	throws IOException, ServletException {
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
                request.setCharacterEncoding(encoding);
        }
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
				this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");

 

java代码:
  1. String value = filterConfig.getInitParameter("ignore");  
  2.        if (value == null)  
  3.            this.ignore = true;  
  4.        else if (value.equalsIgnoreCase("true"))  
  5.            this.ignore = true;  
  6.        else if (value.equalsIgnoreCase("yes"))  
  7.            this.ignore = true;  
  8.        else  
  9.            this.ignore = false;  
  10.    }  
  11.    protected String selectEncoding(ServletRequest request) {  
  12.        return (this.encoding);  
  13.    }  
  14.    
 String value = filterConfig.getInitParameter("ignore");
        if (value == null)
            this.ignore = true;
        else if (value.equalsIgnoreCase("true"))
            this.ignore = true;
        else if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
        else
            this.ignore = false;
    }
    protected String selectEncoding(ServletRequest request) {
        return (this.encoding);
    }
} 

然后在web.xml中进行配置,示例如下:

 

java代码:
  1. <filter>  
  2.     <filter-name>encoding</filter-name>  
  3.     <filter-class>filters.SetCharacterEncodingFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>encoding</param-name>  
  6.         <param-value>gb2312</param-value>  
  7.     </init-param>  
  8.   </filter>  
  9.     
  10.   <filter-mapping>  
  11.     <filter-name>encoding</filter-name>  
  12.     <url-pattern>/*</url-pattern>  
  13.   </filter-mapping>  
<filter>
  	<filter-name>encoding</filter-name>
  	<filter-class>filters.SetCharacterEncodingFilter</filter-class>
  	<init-param>
        <param-name>encoding</param-name>
        <param-value>gb2312</param-value>
    </init-param>
  </filter>
  
  <filter-mapping>
  	<filter-name>encoding</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

 

再次运行示例,会发现已经可以正常使用中文了

分享到:
评论

相关推荐

    机械原理课程设计 破碎机.doc

    机械原理课程设计 破碎机.doc

    电子设计论文施密特触发器电子设计论文施密特触发器

    电子设计论文施密特触发器电子设计论文施密特触发器

    电子设计论文往返式流动灯电子设计论文往返式流动灯

    电子设计论文往返式流动灯电子设计论文往返式流动灯

    基于深度学习来实现序列到序列.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    美国扩大电动汽车充电基础设施政策(英文).pdf

    政策背景与动机: 签署法案:2021年11月15日,拜登总统签署了《基础设施投资和就业法案》(IIJA),旨在通过多项措施推动美国电动汽车充电基础设施的扩张。 市场增长:随着电动汽车市场的快速增长,对充电基础设施的需求也日益增加,政府政策成为推动这一发展的关键力量。 电动汽车充电基础: 充电技术:电动汽车充电技术通常分为三级,各级充电速度和功率不同,满足不同场景下的充电需求。 充电站类型:包括公共、私人及工作场所充电站,各自具有不同的访问限制和使用特点。 市场趋势与现状: 市场增长:EV市场增长依赖技术进步、成本降低及充电便利性的提高。 充电站数量:截至2022年10月,美国公共和私人充电站总数超过50,000个,其中93%为公共充电站。 区域差异:充电站分布存在地区差异,部分低收入社区充电基础设施不足。 政策与项目: NEVI公式计划:通过IIJA设立的国家电动汽车基础设施(NEVI)公式计划,为各州提供资金以建设EV充电站。 税收抵免:扩展了替代燃料汽车加油站的税收抵免政策,包括EV充电站,以激励投资者。 联合办公室:DOT和DOE成立联合办公室,负责NEVI计划的实施和监管,确保

    电子设计论文照明过暗提醒电路电子设计论文照明过暗提醒电路

    电子设计论文照明过暗提醒电路电子设计论文照明过暗提醒电路

    前端,HTML+CSS的综合案例,网页开发

    我选用的软件是:Visual Studio CODE,这个软件在前端开发中十分常用,且提供了很大的便利。 当然也可以用记事本开发,记得把后缀名改成.html 还有我的CSS使用的是内部样式表。 写在head标签下。用到的标签有  <h1></h1>    <img src="lyf.jpg" class="god">     <p>    </p> 就是这三个标签,构成了HTML的主体架构。 而CSS则是设置了以下形式。 font-size: 16px;             line-height: 32px;             font-family: "Microsoft Yahei";             text-align: left;             text-indent:2em;          text-decoration: none;             color: #888888         width:66px

    MFC MAPI 源码和可执行文件

    大名鼎鼎的MFC MAPI 源码和可执行文件,是开发OUTLOOK插件的好帮手。

    机械原理课程设计插床机构机械设计.doc

    机械原理课程设计插床机构机械设计.doc

    基于深度学习的音频分类 前端App.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    基于BERT模型的深度学习中文文本分类实现,包含大约20000条新闻的训练和测试集,包装有简单HTTP接口可供调用。.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    《化工设备机械基础》课程设计 IB储罐设计.doc.doc

    《化工设备机械基础》课程设计 IB储罐设计.doc.doc

    机械原理课程设计网球自动捡球机.doc

    机械原理课程设计网球自动捡球机.doc

    EKFUKFCKF录屏.mp4

    EKFUKFCKF录屏.mp4

    仿新浪读书小程序源码学习

    仿新浪读书小程序源码学习

    基于科大讯飞AI营销算法比赛实现CTR深度学习方法.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    ecbbc商城系统源码 BSD开源协议多商户购物商城系统

    ecbbc多商户系统BSD开源协议,和yii2框架一样的开源协议,做国内首款真正开源BSD的多商户系统,欢迎大家研究学习,商用项目使用。Fecbbc多商户购物商城系统BSD一:多商户介绍Fecbbc多商户系统正式开源免费,BSD开源协议,和yii2框架一样的开源协议,真正商用免费授权。做国内首款真正开源BSD的多商户系统,欢迎大家研究学习,商用项目使用。

    机械设计课程设计 同轴式二级减速器.doc

    机械设计课程设计 同轴式二级减速器.doc

    网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码

    网页设计期末大作业基于HTML+CSS的仿中国银行网站源代码

    喜鹤付费V3(1).zip

    喜鹤付费V3(1).zip

Global site tag (gtag.js) - Google Analytics