servlet开篇

    今天在看关于servlet的知识,像java程序都继承了object类一样,servlet程序都是servlet的子类,意思是,所有servlet程序都要继承于servlet(可继承的类有:GenericServlet,HttpServlet)。

在我写第一个servlet程序时,竟然不用写web.xml文件,只是在类的外面写了下面的一句话:

@WebServlet(name="servletname",urlPttern={“/servletReaplace”});

这是为什么呢?一开始我百思不得其解,在网上无意中看到一篇文章为我解开了困惑。

        

Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言?

当然首先是确定一下,是真实的,吃个定心丸先,不是谎言:) 

下载了Tomcat 7 RC4,解压到 D:\OpenSource\Tomcat\7.0.0-RC4 目录下后 
先将 JAVA_HOME 变量清除,如果你原先有设置 JAVA_HOME 变量的话,免得产生干扰 
在命令行下,先取消 JAVA_HOME 变量 

set JAVA_HOME= 

然后设置 JRE_HOME 变量 

set JRE_HOME=D:\JRE\1.6.0 

再启动,就可以顺利开启了。。。。 
cd /d D:\OpenSource\Tomcat\7.0.0-RC4\bin 
D:\OpenSource\Tomcat\7.0.0-RC4\bin>startup.bat 

当 然,也可以顺利地停止 
D:\OpenSource\Tomcat\7.0.0-RC4\bin>shutdown.bat 

对 于习惯性设置 JAVA_HOME 变量的开发者来说,如果仅是将它改为 JRE 所在的路径,想来试试,就会报错。 

set JAVA_HOME=D:\JRE\1.6.0 

然后 startup.bat 想启动之 
cd /d D:\OpenSource\Tomcat\7.0.0-RC4\bin 
D:\OpenSource\Tomcat\7.0.0-RC4\bin>startup.bat 

嘿 嘿,启不来了,呵呵,报告 JAVA_HOME 变量设置不对,应当指向JDK,而不是直接指向 JRE 路径了事 
The JAVA_HOME environment variable is not defined correctly 
This environment variable is needed to run this program 
NB: JAVA_HOME should point to a JDK not a JRE
 

可能会有疑问,不是明明文档里说只需要JRE 6.0的吗? 
Apache Tomcat 7.0 requires the Java 2 Standard Edition Runtime Environment (JRE) version 6.0 or later. 

但是,正如前面设置 JRE_HOME 变量所说的,不信,再翻开文档去看一下,里面说得很清楚是设置 JRE_HOME 变量,当然去看 setclasspath.bat 的脚本的具体内容可能更加能够了解清楚它 
Set an environment variable named JRE_HOME to the pathname of the directory into which you installed the JRE 

如果直接将 JRE 路径当作 JAVA_HOME,那则是习惯惹得错了,呵呵。不过话说回来,仅是配置 JRE_HOME 的情况比较少;都是设置过 JAVA_HOME 变量,然后 JRE_HOME 自己挂之,然后 PATH 里加上个 .;%JAVA_HOME%\bin 之类的。。。 

真实谎言,其实自从 Tomcat 5.5 开始,都说明只需要 JRE 就可以运行了。只不过 Tomcat 5.0 时候还是需要 JDK 1.3 才可以运行的。 

由 于Tomcat 7必须是J2SE 6以上版本才可以运行,那就试一下J2SE 5,看会有什么情况 

set JAVA_HOME=D:\JRE\1.5.0 

然后 startup.bat 想启动之 
cd /d D:\OpenSource\Tomcat\7.0.0-RC4\bin 
D:\OpenSource\Tomcat\7.0.0-RC4\bin>startup.bat 
并 加上 -verbose 进行跟踪,可以得到如下详细的错误信息

[Loaded java.io.IOException from shared objects file]  
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file  
        at java.lang.ClassLoader.defineClass1(Native Method)  
        at java.lang.ClassLoader.defineClass(Unknown Source)  
        at java.security.SecureClassLoader.defineClass(Unknown Source)  
        at java.net.URLClassLoader.defineClass(Unknown Source)  
        at java.net.URLClassLoader.access$100(Unknown Source)  
        at java.net.URLClassLoader$1.run(Unknown Source)  
        at java.security.AccessController.doPrivileged(Native Method)  
        at java.net.URLClassLoader.findClass(Unknown Source)  
        at java.lang.ClassLoader.loadClass(Unknown Source)  
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)  
        at java.lang.ClassLoader.loadClass(Unknown Source)  
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)  
[Loaded java.lang.Shutdown from shared objects file]  
[Loaded java.lang.Shutdown$Lock from shared objects file] 

实际上,启动脚本先会认 JAVA_HOME 变量,在找到 JAVA_HOME 的情况下,会将 JAVA_HOME 赋值给 JRE_HOME,如果有定义 JRE_HOME 变量的话,则 JRE_HOME 变量是最优先的,比如,你定义

JAVA_HOME=D:\JDK\1.6.0  
JRE_HOME=D:\JRE\1.5.0 

是运行不起来的。 

其实从Tomcat 5.5开始就不通过JDK去编译JSP了,而是通过Eclipse JDT Java编译器来编译JSP文件。 

为了后面的试验方便,首先配置个管理用户,编辑 conf\tomcat-users.xml 配置文件, 
由于Tomcat 7重新定义了四个不同的角色来管理应用程序,而不是原来单一个manager角色,为此增加了角色为manager-gui的gui_admin用户,密 码password

<role rolename="manager-gui"/>  
<user username="gui_admin" password="password" roles="manager-gui"/> 

为此,你需要设置不同的角色处理不同的管理内容,具体如下: 
manager-gui - allows access to the HTML GUI and the status pages 
manager-script - allows access to the text interface and the status pages 
manager-jmx - allows access to the JMX proxy and the status pages 
manager-status - allows access to the status pages only
 

这样gui_admin可以访问进行管理

http://localhost:8080/manager/status  
http://localhost:8080/manager/html 

测试一下无需web.xml配置文件来创建一个Web应用程序项目 Tomcat7 
通过注解编写一个Servlet,名为 AnnotationServlet.java

@WebServlet("/AnnotationServlet")  
public class AnnotationServlet extends HttpServlet   
{  
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException   
	{  
		PrintWriter out = response.getWriter();  
		out.println("Annotation Servlet in Tomcat 7");  
	}  
}  
如果你用JDK 1.5来编译则会出错

javac -cp D:\OpenSource\Tomcat\7.0.0-RC4\lib\servlet-api.jar *.java  
AnnotationServlet.java:4: 无法访问 javax.servlet.ServletException  
错误的类文件: D:\OpenSource\Tomcat\7.0.0-RC4\lib\servlet-api.jar(javax/servlet/ServletException.class)  
类文件具有错误的版本 50.0,应为 49.0  
请删除该文件或确保该文件位于正确的类路径子目录中。  
import javax.servlet.ServletException;  
                     ^  
1 错误  

用1.6编译后,直接部署,启动,整个项目就一个 AnnotationServlet.class,启动后照样访问

http://localhost:8080/Tomcat7/AnnotationServlet

当然一个Web项目,少了web.xml文件估计也是玩不转的,试一下通过注解与没有注解的Servlet共同工作的场景,创建一个 NoneAnnotationServlet.java 
并在web.xml里配置之

<?xml version="1.0" encoding="UTF-8"?>  
<web-app 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"  
   version="3.0">    
     <display-name>Web Application Tomcat 7 Servlet 3.0 JSP 2.2</display-name>  
     <description>Web Application Tomcat 7 Servlet 3.0 JSP 2.2</description>  
     <servlet>  
         <servlet-name>NoneAnnotationServlet</servlet-name>  
         <servlet-class>NoneAnnotationServlet</servlet-class>  
     </servlet>  
   
     <servlet-mapping>  
         <servlet-name>NoneAnnotationServlet</servlet-name>  
         <url-pattern>/NoneAnnotationServlet</url-pattern>  
     </servlet-mapping>  
</web-app>  

编译、部署后,都可以正常工作。

蒽哪,很和谐的说。Tomcat还有很多新的Servlet 3.0与Java EE 6规范的特性,慢慢测试之。

框中的内容出自:http://www.oschina.net/question/12_9194

在刚开始照着书中的例子写时,由于书中的例子没有继承GenericServlet或HttpServlet,所以一直运行不起来,不完整的程序如下:

<pre name="code" class="java">package self.servlet.a;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;


//declaring a Servlet application with 
//@WebServlet(name = "MyServlet",urlPatterns={"/my"})
@WebServlet(name="MyServlet",urlPatterns = {"/my"})
public class MyServlet {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	//declaring variable
	transient ServletConfig servletConfig;
	
	public void init(ServletConfig servletConfig)
					throws ServletException {
		this.servletConfig = servletConfig;
	}
	
	public ServletConfig getServletConfig(){
		return this.servletConfig;
	}
	
	public String getServletInfo(){
		return "MyServlet!";
	}
	
	public void service(ServletRequest request,
			ServletResponse response) throws
			ServletException,IOException {
		String servletName = this.servletConfig.getServletName();
		response.setContentType("text/html");
		PrintWriter write = response.getWriter();
		write.print("<html><head></head>"+"<body>Hello,"+servletName+"</body>"+"</html>");
	}
	
	
	public void destroy(){
		
	}
	
}

<span style="font-size:18px;">运行时,程序一直报<span style="color:#ff0000;">Http:404错误。</span></span>
</pre><pre name="code" class="java"><span style="font-size:18px;">直到把MyServlet写上继承类:GenericServlet,才可以运行成功。</span>
</pre><pre name="code" class="java"><span style="font-size:18px;">这就是开头在说的:<span style="color:#333300;">所有servlet程序都是Servlet的子类,写程序时,都要写上继承了某个Servlet父类。</span></span>


 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.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)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值