Servlet配置及使用
Posted 经理,天台风好大
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet配置及使用相关的知识,希望对你有一定的参考价值。
文章目录
【servlet继承关系】
一、Servlet概述
(一)什么是Servlet?
Servlet是由SUN公司提供的一门动态Web资源开发技术
Servlet本质上是一段Java程序,和之前的Java程序不同的是,Servlet程序无法独立运行,需要将Servlet程序放在服务器中(比如tomcat服务器),由服务器调用才可以执行。
Servlet: 服务器端的Java程序.
Servlet是运行在服务器端的Java程序,其作用是什么?
- 其作用是对服务器接收过来的请求进行处理(作用为处理请求)
二、开发Servlet程序
(一)开发Servlet程序的步骤
第一步: 写一个类,实现一个Servlet接口或者继承Servlet接口的子类(GenericServlet/HttpServlet),并实现其中的方法
Servlet接口
|-- GenericServlet类(抽象类)
|-- HttpServlet类
第二步: 在web应用的web.xml文件中配置Servlet程序对外访问的路径。
Eclipse在创建一个Servlet时,会在web.xml文件中生成Servlet配置,所以不需要我们手动配置。
(二)使用Eclipse创建Web项目
以上是Web项目在工程视图(Project)和包视图(package)下结构,推荐使用包视图!
1、创建一个Web工程: 在左侧窗口中, 点击鼠标右键 —> New —>Dynamic Web Project。
2、接着会弹出如下窗口:
注意:
- 3.0版本不会创建web.xml文件,并且创建Servlet时也不会在web.xml文件中生成Servlet相关的配置信息, 记得改为2.5。
- Target runtime选项中如果没有可选的服务器,可点击右侧的"New Runtime…"进行配置。
3、Eclipse中创建的Web工程的目录结构:
- day09: 工程名称/项目名称
- src: 源码目录, 创建的java源文件、配置文件(properties、xml文件等)都可以放在src源码目录下
- build/classes: 编译文件的输出目录, src源码目录中的文件编译后会输出到classes目录下。
其中的classes目录在发布时会放在WEB-INF目录下,随着项目一起发布到服务器中 - WebContent: 就是Web应用的目录,其中可以存放 html、css、js、jsp、图片以及编译后的class文件、jar包、web.xml文件等. 将来发布项目到服务器,其实就是将WebContent中的所有内容一起发布到服务器中。
- WebContent/WEB-INF/lib: 用于存放当前项目所依赖的jar包。比如要访问mysql数据库,需要导入mysql驱动包,直接将jar包拷贝到lib目录下即可!(也不用再去做 build path --> add to build path)
(三)使用Eclipse创建Servlet
- 选中项目中的src目录,鼠标右键 —> New —> Servlet
- 在弹出的窗口中,根据提示填写内容:
- 点击finish即可完成Servlet创建过程, 创建好的Servlet如下:
通过Eclipse创建Servlet,默认继承HttpServlet。由于HttpServlet也是Servlet接口的子类,让HelloServlet继承HttpServlet,相当于间接实现了Servlet接口。
继承HttpServlet类,默认会覆盖doGet方法和doPost方法,两个方法的作用为:
-
doGet方法: 当浏览器发送请求的方式为GET提交时, 将会调用doGet方法来处理请求
-
doPost方法: 当浏览器发送请求的方式为POST提交时,
将会调用doPost方法来处理请求
提示:
如果当GET提交和POST提交处理代码相同时,可以将代码写在其中一个方法里(例如写在doGet中),并在另外一个方法(例如doPost)中调这个方法。这样一来,不管是GET提交还是POST提交,最终doGet方法都会执行,都会对请求进行处理!!
package com.tedu;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet
private static final long serialVersionUID = 1L;
//如果浏览器发送的请求方式为GET提交,将会由doGet方法进行处理
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
//向浏览器响应一个字符串
response.getWriter().write("hello..." + new Date());
/**
* 问题一:
* 如果浏览器发送的请求方式为POST提交,将会由doPost方法进行处理
* 当GET提交和POST提交处理方式一样时,可以将处理请求的代码放在其中的一个方法中(比如doGet)
* 在另一个方法中调用这个方法即可
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
doGet(request, response);
(四)Servlet在web.xml中的配置
在通过Eclipse创建Servlet时,会自动在web.xml文件中进行Servlet相关信息的配置
(注意:如果是复制Servlet类文件,但配置信息不会跟着复制,需要自己手动添加配置,否则复制的Servlet将无法访问!)
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.tedu.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
关于上面的配置信息:
-
a) Eclipse每创建一个Servlet,就会在web.xml文件中添加两个标签:
<servlet>
和<servlet-mapping>
标签(可以将这两个标签看成一个组的标签) -
b)
<servlet>
和<servlet-mapping>
标签内都会有一个<servlet-name>
标签,标签的内容可以更改,但要求更改后的这两个<servlet-name>
标签的内容也必须一致。 -
c)
<servlet-class>
标签用于配置Servlet类的全路径名(即包名+类名)需要注意:
如果在创建Servlet后修改了Servlet类的名称,这个地方也要一起更改,否则将会出现
ClassNotFoundException
,即类找不到异常 -
d)
<url-pattern>
标签用于配置浏览器以什么路径访问当前Servlet(即Servlet对外访问的路径),默认的路径是:/类名例如:上面为HelloServlet配置的
<url-pattern>
为/HelloServlet
,因此我们在浏览器中的访问路径则为:
http://主机名/web项目访问路径 /HelloServlet
(五)运行Servlet程序、访问测试
访问Servlet方式一:
若是第一次运行,需要先创建tomcat服务器,即在Servers窗口中点击链接可创建一个tomcat服务器,且只需创建一次即可!
-
发布项目到服务器:在服务器上右键 --> 点击 "add and remove" 将当前web项目发布到服务器中,并点击完成。
-
启动tomcat服务器:在服务器上右键 Start 即可启动服务器
-
通过浏览器访问Servlet:打开本地浏览器,通过路径访问,即可访问Servlet程序
http://localhost:8080/项目名称/HelloServlet
访问Servlet方式二:
- 在运行的Servlet上点击右键 ----> “Run As”----> "1 Run on Server"
- 在弹出的窗口中,直接点击完成即可!!!
- 运行结果如下:
或者打开浏览器,复制上图中的路径:
http://localhost:8080/Hello/HelloServlet
,粘贴到浏览器的地址栏中,回车访问:
(六)Eclipse默认发布Web应用的位置
Tomcat服务器中默认只有一台虚拟主机,叫做localhost主机
而localhost主机发布web应用的位置是webapps。
将day09发布到localhost主机中,但为什么day09项目没有在webapps目录下?
--------------------------------------------------------------------------------------------------------
默认情况下,发布一个Web应用到localhost主机中,只需要将Web应用的目录拷贝到webapps目录下即可完成发布!
而将Eclipse和Tomcat整合之后,通过Eclipse发布一个web应用到tomcat服务器中,发布的路径默认被改成了:
[工作空间]:\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps
-
如何修改Eclipse默认发布Web应用的目录位置:
-
(1) 关闭服务器,将服务器中的所有应用移除
-
(2) 在服务器上右键 --> clean
-
(3) 双击tomcat服务器,在弹出窗口中找到 Server location, 选择第二个选项,并将下方的
Deploy Path
改为:webapps
改完后,Ctrl+s保存配置即可!!
-
(七)Eclipse如何发布一个Web应用
当通过eclipse将day09项目发布到服务器中,是直接将day09拷贝到服务器中对应的目录下吗?
发布的过程如下:
三、Servlet调用过程
通过浏览器访问服务器中的一个Servlet程序,这个Servlet程序是如何执行的?又是如何被调用的?
localhost/Hello/HelloServlet
四、扩展:修改Servlet模版
通过Eclipse可以直接创建一个Servlet类,这相比通过记事本等文本编辑工具创建Servlet,可以节省配置Servlet的时间,提高了我们的开发效率。
但是通过Eclipse生成的Servlet类中包含了许多我们不需要的注释和默认实现代码,这些每次都删除也非常占用时间。
接下来可以通过添加模版代码的形式,来生成Servlet的内容,以便于提高我们的开发效率。
1、先创建一个Servlet,将其中的内容修改为自己期望的模版格式,并复制其中的内容,例如:
package $enclosing_package;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* author: bjzhangsz@tedu.cn
* datetime: $date $time
*/
public class $primary_type_name extends HttpServlet
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
doGet(request, response);
2、点击菜单栏中的window --> Preferences:
3、在出现的窗口左侧依次点击:Java --> Editor --> templates–>(在右边的窗口中) 点击New… :
4、在出现的新窗口中填写如下内容:
5、替换包路径和类名(作用是在新建Servlet生成的Servlet模版中使用当前类的包路径和类型)
效果如下:
效果如下:
6、点击OK保存,创建新的Servlet文件,测试:
将Servlet中的所有内容全选删除,并输入"servlet",接着按 “Alt+ /”
提示即可生成自己想要的Servlet模版内容!
效果如下:
以上是关于Servlet配置及使用的主要内容,如果未能解决你的问题,请参考以下文章
IDEA如何完美配置Servlet(适用于IDEA 2022及以下版本)