Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

2023-11-16

        在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts、WebWork和Spring MVC都是基于Servlet的。本文主要讲述MyEclipse和Tomcat配置Servlet的过程和简单实现表单提交功能。
        希望对大家有所帮助,参考书籍《Java EE企业级应用开发实例教程》。
        Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门

一. Servlet编程

        1.Web基础知识
        在讲述Servlet之前,先了解下Web基础知识。Web(World Wide Web,万维网)本质就是Internet所有文档的集合,Web文档主要类型有HTML网页、CSS、JavaScript、各种动态网页、图片、声音和视频等。
        Web文档保存在Web站点(Site)上,Web站点驻留在Web服务器上。Web服务器是一种软件系统,提供Web文档的管理和请求服务,常见的Web服务器软件有Apache、IIS、WebLogic和Tomcat等。每个服务器都有一个唯一的IP地址,Web服务器对外都有一个服务端口,默认时80或8080端口。
        Web文档都有一个唯一的地址,通过URL格式来进行定位,其格式为:
        协议://IP地址:端口/站点名/目录/文件名
        其中协议主要有HTTP、HTTPS和FTP。根据不同的协议,默认端口可以省略,HTTP/HTTPS为80端口,FTP为21端口。例:
        http://210.30.108.30:8080/test/admin/login.jsp
        Web服务器接收到请求后,根据URL定位到相应文档,根据文档类型进行对应的处理,将文档通过网络发送到客户端,一般是浏览器,用户即可查看或下载请求的文档。Web通过请求/响应(Request/Response)模式进行工作,即由浏览器使用URL对Web文档进行请求,Web服务器接收并处理请求,处理结束后将响应内容发送到浏览器。
        Web请求方式主要包括GET、POST、PUT、DELETE和HEAD。其中GET请求直接返回请求的文档,同时传递参数在URL中;POST请求将传递到Web服务器的数据保存到数据流中,只有通过表单提交形式才能实现。如下:

Get请求:
http://localhost:8080/web01/main.do?id=1&password=123456
POST请求:
<form action = "add.do" method = "post">
        <input type="text" name="username">
        <input type="submit" value="提交">
</form>

        这些知识大家应该都非常熟悉了,我就不再介绍了,引出表单就开始叙述Servlet。

        2.什么是Servlet
        在Sun公司制定Java EE规范初期,为实现动态Web而引入了Servlet,用于替代笨重的CGI(通用网关接口),实现了Java语言编程的动态Web技术,奠定了Java EE的基础。后来为进一步简化动态Web网页的生成,并且在微软公司推出了ASP(Active X服务系统页面)技术的竞争下,Sun推出了JSP规范,进一步简化了Web网页的编程。但JSP在进行HTTP请求处理方面不如Servlet方便和规范,Servlet在当今的MVC模式Web开发中牢牢占据一地。并且现在流行的Web框架基本基于Servlet技术,如Struts、WebWork和Spring MVC等。只有掌握了Servlet才能真正掌握Java Web编程的核心和精髓。
        那么,究竟Servlet是什么东东呢?
        Servlet是运行在Web容器的类,能处理Web客户的HTTP请求,并产生HTTP响应。
        Servlet是Java EE规范定义的Web组件,运行在Web容器中。由Web容器负责管理Servlet的声明周期,包括创建和销毁Servlet对象。客户不能直接创建Servlet对象和调用Servlet的方法,只能通过向Web服务器发出HTTP请求,间接调用Servlet的方法。这是Servlet与普通Java类的重要区别。
        Sun在如下两个包中提供了Servlet的全部接口和类:
              1.javax.servlet包含支持所有协议的通用Web组件接口和类
              2.javax.servlet.http包含支持HTTP协议的接口和类

        Servlet可以完成Web组件具有的所有功能,如下:
              1.接收HTTP请求
              2.取得请求信息,包括请求头和请求参数数据
              3.调用其他Java类方法完成具体的业务功能
              4.生成HTTP响应,包括HTML和非HTML响应
              5.实现到其他Web组件的跳转,包括重定向和转发

        编写Servlet需要引入的两个包和Java I/O包:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
        编写接收HTTP请求并进行HTTP响应的Servlet要继承javax.servlet.http.HttpServlet。Servlet类的定义如下:
        public class LoginAction extends HttpServlet {}
        每个Servlet一般都需要重写doGet方法和doPost方法。当用户使用GET方式请求Servlet时,Web容器调用doGet方法处理请求;当用户使用POST方法请求Servlet时,Web容器嗲用doPost方法。

        Servlet是生命周期时序图如上图所示,包括加载类和实例化阶段、初始化阶段、处理请求阶段和销毁阶段。

二. 配置Servlet

        Servlet作为Web组件可以处理HTTP请求/响应,因而对外要求一个唯一的URL地址。但由于Servlet是一个Java类文件,不像JSP那样直接存放在Web目录下就能获得URL请求访问地址。Servlet必须在Web的配置文件/WEB-INF/web.xml中进行配置和映射才能响应HTTP请求。
        1.Servlet声明
        它的任务是通知Web容器Servlet的存在,声明语法如下:

  <servlet>
  <servlet-name>HomePageAction</servlet-name>
  <servlet-class>servlet.HomePageAction</servlet-class>
  </servlet>

        其中<servlet-name>声明Servlet的名字,一般与Servlet的类名相同即可,要求在一个web.xml文件内名字唯一。<servlet-class>指定Servlet的全名,即包名.类型。Web容器会根据此定义载入类文件到内容中,进而调用默认构造方法创建Servlet对象。
        Servlet初始参数如数据库Driver、URL、账号和密码等信息,在Servlet中可以读取这些信息,如下定义了一个初始参数,即数据库的JDBC驱动。

  <servlet>
  <servlet-name>HomePageAction</servlet-name>
  <servlet-class>servlet.HomePageAction</servlet-class>
  <init-param>
	<param-name>driveName</param-name>
 	<param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
  </init-param>	
  </servlet>

        在Servlet中可以通过ServletConfig取得定义的初始化参数,取得以上定义的参数的代码如下:

private Connection cn=null;     //定义数据库连接对象
private String driverName=null;  //数据库驱动器
//取得Servlet定义的初始参数
driverName=config.getInitParameter("driverName");
//根据Servlet初始参数连接数据库
Class.forName(driverName);
cn=DriverManager.getConnection("jdbc:odbc:cityoa");
        其中config是在Servlet中定义的ServletConfig类型的属性变量,由init方法取得它的实例。可见连接不同数据库,直接修改配置文件即可,不需要代码的修改和重新编译。

        2.Servlet映射
        任何Web文档在Internet上都要有一个URL地址才能被请求访问,Servlet不能像JSP一样直接放在Web的发布目录下,因此Servlet需要单独映射URL地址。在WEB-INF/web.xml中进行Servlet的URL映射。

  <servlet-mapping>
  	<servlet-name>HomePageAction</servlet-name>
  	<url-pattern>/loginAction.do</url-pattern>
  </servlet-mapping>
        上面代码是绝对地址方式映射,只能映射到一个地址。其中Servlet-name名称和Servlet声明中要一致,URL的格式如下:/目录/目录/文件名.扩展名。而匹配目录模式映射方式如下,可以请求多个URL。
  <servlet-mapping>
  	<servlet-name>MainAction</servlet-name>
  	<url-pattern>/main/*</url-pattern>
  </servlet-mapping>
        只要是以/main为开头的任何URL都能请求此Servlet。如下:
            http://localhost:8080/web01/main/login.jsp
            http://localhost:8080/web01/main/info/add.do
        同样能你还能使用匹配扩展名模式映射方式,也可以响应多地址的请求。

  <servlet-mapping>
  	<servlet-name>MainAction</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>
        以上配置中扩展名为action的任何请求均能被Servlet响应。如:
            http://localhost:8080/web01/login.action
            http://localhost:8080/web01/main/info/add.action
        注意:你不能混合使用两种匹配模式,否则会映射出错,如/main/*.action这种是错误的混合模式。

三. 简单实现表单提交功能

        创建Web Project项目,项目名称为TestServlet。项目结构如下图所示:


        在WebRoot文件夹下创建images文件夹,并添加图片logo.jpg。添加inc文件夹,新建style.css文件,代码如下:
.main {
	width: 1024px;
	text-align:left;
}
.font {
	font-family: "Trebuchet MS";
	font-size: 14px;
	font-weight: bold;
	color: #FFFFFF;
}
.div {
	margin: 0px;
	padding: 0px;
	width: 1014px;
}
.tdBgColor{
	background-color:#6b1101;
}
a{
	font-family: "Trebuchet MS";
	font-size: 14px;
	font-weight: bold;
	color: #FFFFFF;
	line-height:50px;
	text-decoration:none;

}
a.hover{
	font-family: "Trebuchet MS";
	font-size:14px;
	font-weight: bold;
	color:#0000FF;
	line-height:50px;
	text-decoration:underline;
	padding-bottom:1px;

}
a.visited{
	font-family: "Trebuchet MS";
	font-size:14px;
	font-weight: bold;
	color:#000066;
	line-height:50px;
	text-decoration:none;
}
a.active{
	font-family: "Trebuchet MS";
	font-size:14px;
	font-weight: bold;
	color:#0000FF;
	line-height:50px;
	text-decoration:none;
	padding-bottom:1px;
}
        然后修改index.jsp主页,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>火车票订票系统</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
	   <!-- 界面布局 -->	
	   <div align="center">
	   <div class="style">
	   <table width="1024"  height="150" cellpadding="0" cellspacing="0" >
	   		<!-- 动态首页订票界面 同时获取年月日和动态滚动消息 -->
			<tr>
				<td colspan="2">
					<img src="./images/logo.jpg" alt="logo" width="1024" height="149">
				</td>
			</tr>		
			<tr>
				<td width="205"  bgcolor="#b7d7ec">
					<p align="center">
					<!-- 注意:方法today.getYear()已经过时,需要添加1900 -->
					<script language=JavaScript>
					today = new Date();
					function initArray(){
					this.length=initArray.arguments.length;
					for(var i=0;i<this.length;i++)
					this[i+1]=initArray.arguments[i];  }
					var d=new initArray(
					"星期日","星期一","星期二","星期三","星期四",	"星期五","星期六");
					document.write("<font color=##ff0000 style='font-size:12pt;font-family: 宋体'> ",
					today.getYear()+1900,"年",today.getMonth()+1,"月",today.getDate(),"日    ",d[today.getDay()+1],
								  "</font>" );
					</script> 
					</p>	
			    </td>	
				<td width="819" bgcolor="#b7d7ec">
					<marquee  direction="left" οnmοuseοver=this.stop() οnmοuseοut=this.start() scrollAmount=3 scrollDelay=100>
	             	<FONT style="FONT-SIZE: 18px"color=blue>欢迎使用火车票订票系统管理系统 ,如有不足,敬请指导!</FONT>
	            	</marquee>
	            </td>
	        </tr>
	  </table>
	  </div>
	  
	  <table width="100%" height="75%" border="0" align="center">
		  <tr>
		    <td width="40%" height="20%"> </td>
		    <td width="20%" >	
          	<!-- 中间登录部分布局 提交表单  配置web.xml -->
          	<form action="loginAction.do">
          	<table width="500" height="80%" border="2" bordercolor="#12A0F5"  bgcolor="#dfeaf1">
               <tr>
                 <td></td>
                 <td align="center"><br />系统管理员登录 <br/><br/>
       				用户名:<input type="text" name="userid" size="19" maxlength="19" /><br/><br/>
       				密 码:<input type="password" name="password" size="20" maxlength="19" /><br /><br />
                	<input type="submit" name="Submit" value="登录"/>    
                	<input type="reset" name="Submit" value="重置" /><br/>                           		
                </td>
                <td></td>
              </tr>
          </table>
          </form>
          </td>
		  <td width="40%"></td>
		  </tr>
		  <tr><td height="67" colspan="3">  
		 	<!-- 底部版权所有界面 -->
			<TABLE class=wrapper border=0 cellSpacing=0 cellPadding=0 width="100%" align=center>
			 <TBODY>
			  <TR>
			  	  <TD style="LINE-HEIGHT: 150%" align="center"> 
			      <HR style="WIDTH: 96%; HEIGHT: 4px; COLOR: #02457c">
			      <font size="2"> <SCRIPT language=javascript src=""></SCRIPT>
			      <!-- target=_blank开启新的网页 -->
			      <BR><A href="aboutme.jsp" target=_blank>关于我们</A> | <A href="wzsm.jsp">网站声明</A>
			       <BR>版权所有&copy;2014-2015 北京理工大学 Eastmount <BR>京ICP备10009636号 </font>
			      </TD>
			  </TR>
			 </TBODY>
			</TABLE>
		  </td>
		 </tr>
		</table>
	  </div>
  </body>
</html>
        此时运行Web网站,点击Run As=》MyEclipse Server Application。如图所示:


        此时,输入用户名和密码登录效果如下图所示:

        然后在src中新建文件夹Servlet,新建HomePageAction.java文件,代码如下:
package servlet;

import java.io.IOException;
import java.sql.*; //导入数据库处理所有库
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;

//用户登录处理Servlet 系统登录主页处理表单
public class HomePageAction extends HttpServlet {
	
	private Connection cn=null;     //定义数据库连接对象
	private String driverName=null; //数据库驱动器
	private String url=null;        //数据库地址URL
	
	//初始化方法,取得数据库连接对象
	public void init(ServletConfig config) throws ServletException
	{
		super.init(config);
		driverName=config.getInitParameter("driverName");
		url=config.getInitParameter("url");
		
		try {
			Class.forName(driverName);
			cn=DriverManager.getConnection(url);
		} catch(Exception e) {
			System.out.println("取得数据库连接错误:"+e.getMessage());
		}
	}
	
	//处理GET请求方法
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
	{
		//取得用户注册表单提交的数据
		String userid=request.getParameter("userid");
		String password=request.getParameter("password");
		//判断登录账号为空,则自动跳转到注册页面
		if(userid==null||userid.trim().length()==0) {
			response.sendRedirect("index.jsp");
			JOptionPane.showMessageDialog(null, "User name or password can't be empty!");
		}
		//判断登录密码为空
		if(password==null||password.trim().length()==0) {
			response.sendRedirect("index.jsp");
			JOptionPane.showMessageDialog(null, "User name or password can't be empty!");
		}
		//查询数据库和跳转到登录主界面
		try {
			//查询数据库操作
			
			//跳转到主界面
			response.sendRedirect("success.jsp");
		} catch(Exception e) {
			System.out.println("错误:"+e.getMessage());
			response.sendRedirect("index.jsp");
		}
	}
	
	//处理POST请求方法
	public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException 
	{
		doGet(request,response);
	}
	
	//销毁方法
	public void destroy() {
		super.destroy();
		try {
			cn.close();
		}catch(Exception e) {
			System.out.println("关闭数据库错误:"+e.getMessage());
		}
	}		
}
        同时在WEB-INF文件夹web.xml文件中配置Servlet,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	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">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 配置Servlet -->
  <servlet>
  <servlet-name>HomePageAction</servlet-name>
  <servlet-class>servlet.HomePageAction</servlet-class>
  <init-param>
	<param-name>driveName</param-name>
 	<param-value>sun.jdbc.odbc.Jdbc0dbcDriver</param-value>
  </init-param>
  <init-param>
 	<param-name>url</param-name>
 	<param-value>jdbc:odbc:cityoa</param-value>
  </init-param>	
  </servlet>
  <servlet-mapping>
  	<servlet-name>HomePageAction</servlet-name>
  	<url-pattern>/loginAction.do</url-pattern>
  </servlet-mapping>
    
</web-app>
        最后新建success.java文件,跳转后显示的页面。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>验证成功界面</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    	界面表单提交跳转成功 <br>
    	<a href="index.jsp">返回</a>
  </body>
</html>
       显示效果如下图所示:


        此时Servlet配置成功,而且表单跳转功能也实现了。你可能遇到如下错误:

        解决方案如下:

        最后希望文章对你有所帮助,下一篇文章准备讲述JSP网站的一种经典网站模型和MyEclipse数据库配置相关知识。如果文章有不足或错误的地方,还请海涵!
        (By:Eastmount 2015-5-7 清晨4点   http://blog.csdn.net/eastmount/
       

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交 的相关文章

随机推荐

  • 数据仓库-日期维度表的设计与实现

    时间维度表的制作 1 需求背景 在大数据分析模块中 我们需要从不同的维度分析主题表 包括常用的公用维度 时间维 地区维度 教育信息维 以及各种各样的业务维度 员工维度 部门维度 业务维度就是我们从哪些角度去分析业务过程 本文就是做一张常用时
  • 高版本CubeIDE下使用DAP-LINK教程

    高版本CubeIDE下使用DAP LINK教程 背景 笔者此前在CSDN上写了两篇文章详述了如何在STM32CubeIDE下使用DAPLINK 在Stm32CubeIDE环境下使用DAP Link仿真 通过External Tools在ST
  • CentOS 几种重启方式的区别

    CentOS 几种重启方式的区别 Linux centos重启命令 1 reboot 普通重启 2 shutdown r now 立刻重启 root用户使用 3 shutdown r 10 过10分钟自动重启 root用户使用 4 shut
  • XAML三个顶级元素以及窗体的外观和位置

    XAML三个顶级元素介绍 Window 窗口 UserControl 用户控件 Page 把窗体以网页形式展现 注意 在XAML页面中我们只能有一个顶级元素 而且顶级元素只能有一个子元素 所以我们要使用布局控件 窗体的外观和位置 窗口的外观
  • 怎么把MySQL的数据存到区块链_区块链存储数据的方式是什么

    区块链存储数据的方式 分布式数据存储 区块链是分布式数据存储 点对点传输 共识机制 加密算法等计算机技术的新型应用模式 从本质上讲 它是一个共享数据库 存储于其中的数据或信息 具有不可伪造 全程留痕 可以追溯 公开透明 集体维护等特征 本教
  • springmvc进阶(3):mvc:annotation-driven和mvc:default-servlet-handler在springmvc中的作用

    在springmvc xml中 经常会配置
  • 2036: [蓝桥杯2022初赛] 统计子矩阵(二维前缀和,一维前缀和)

    2036 蓝桥杯2022初赛 统计子矩阵 内存限制 256 MB 时间限制 1 S 标准输入输出 题目类型 传统 评测方式 文本比较 上传者 外部导入 提交 310 通过 74 题目描述 给定一个 N M 的矩阵A 请你统计有多少个子矩阵
  • linux安装mysql

    安装环境 工具 1 Linux CentOS 7 4版 2 mysql 8 0 12 el7 x86 64 tar gz 安装步骤 参考 https dev mysql com doc refman 8 0 en installing ht
  • 【满分】【华为OD机试真题2023 JS】寻找相似单词

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 寻找相似单词 知识点字符串排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个可存储若干单词的字典 找出指定单词的所有相似单词 并且按照单词名称从小到大
  • 人工智能-马尔可夫模型

    马尔可夫与马尔科夫都可以 所以也别纠结 马尔可夫模型 Markov Model 是一种统计模型 广泛应用在语音识别 词性自动标注 音字转换 概率文法等各个自然语言处理等应用领域 经过长期发展 尤其是在语音识别中的成功应用 使它成为一种通用的
  • java.util.LinkedHashMap cannot be cast to com.XXX.XXX

    ResquestBody的HashMap转List时错误java util LinkedHashMap cannot be cast to com XXX XXX RequsetBody Map
  • 五个温度带的分界线_亚热带,暖温带,到底是些什么带?

    在地理课上 讲到有关气候的内容时 经常会提到各种 带 例如暖温带 中温带 寒温带 你能清晰地分清谁是谁吗 首先 我们先来澄清一个概念 温度带和热量带 很多人分不清这两个词 但实际上 它们的内在含义是大致相同的 但是如果细究 两者的划分方式是
  • 服务器间数据传输的四种方式

    scp 优点 简单方便 安全可靠 支持限速参数 缺点 不支持排除目录 用法 scp就是secure copy 是用来进行远程文件拷贝的 数据传输使用 ssh 并且和ssh 使用相同的认证方式 提供相同的安全保证 scp 参数 lt 源地址
  • cmake tutorial

    Tutorial 1 最基本的项目是从源代码构建可执行文件 对于简单的项目 三行CMakeLists txt足够了 这就是本教程的起点 在Step1目录下创建一个CMakeLists txt 如下所示 cmake minimum requi
  • 运行报错:from .qhull import * ImportError: DLL load failed: 找不到指定的模块。

    记录一次报错 当出现这个问题时说明模块安装有误 但不知道原因 应该是在此之前需要先把安装的numpy scipy sklearn卸载掉 先看究竟是哪个模块出的错误 直接 pip uninstall numpy pip uninstall s
  • Chatgpt 未来可以应用的场景

    ChatGPT是一款基于GPT 3的聊天机器人 它具有自然语言处理和生成语言的强大能力 在很多场景下可以有很广泛的应用 以下是ChatGPT未来可以应用的一些场景 客服 ChatGPT可以被用作客服机器人 为用户提供帮助和解答问题 教育 C
  • 坐上支付宝微信支付巨头的刷脸顺风车

    人脸识别技术已经在互联网 政务领域得到了广泛应用 超过100个城市的用户通过支付宝刷脸完成身份验证中国财政科学研究院应用学博士后盘和林认为 刷脸支付比密码支付更安全更便捷 随着门槛的进一步降低 刷脸支付或将在未来3年内呈现爆发式的增长 20
  • Pytorch 计算一个矩阵行向量之间的相似度

    import torch def similarity input tensor step 1 计算行向量的长度 len a torch sqrt torch sum input tensor 2 dim 1 b len a unsquee
  • Enum枚举类型实战总结,保证有用!

    一般在我们开发时如果能使用枚举罗列的 一般都会定义一个枚举类型 将枚举类型作为方法的参数 可以方便的进行调用 给我们带来不少的便利 当然有时候它还不如直接用一个int类型带来 带来一定灵活性 但只要能满足业务咱们就怎么方便怎么来吧 基本使用
  • Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

    在Java EE应用编程中Servlet是基础 JSP是建立在Servlet基础之上的 其他Web框架如Struts WebWork和Spring MVC都是基于Servlet的 本文主要讲述MyEclipse和Tomcat配置Servle