Servlet配置及使用

Posted 经理,天台风好大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet配置及使用相关的知识,希望对你有一定的参考价值。

  1. 静态Web资源:不同的人,在不同的条件下访问后看到的是相同的效果,这样的资源叫做静态Web资源
    html、css、js等)
  2. 动态Web资源:在不同的访问条件下看到的是不同的效果,这样的资源叫做动态Web资源
    (Servlet、jsp、.NET、php等)



文章目录



【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

  1. 选中项目中的src目录,鼠标右键 —> New —> Servlet

  1. 在弹出的窗口中,根据提示填写内容:

  1. 点击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服务器,且只需创建一次即可!

  1. 发布项目到服务器:在服务器上右键 --> 点击 "add and remove" 将当前web项目发布到服务器中,并点击完成。

  2. 启动tomcat服务器:在服务器上右键 Start 即可启动服务器

  3. 通过浏览器访问Servlet:打开本地浏览器,通过路径访问,即可访问Servlet程序

http://localhost:8080/项目名称/HelloServlet

访问Servlet方式二:

  1. 在运行的Servlet上点击右键 ----> “Run As”----> "1 Run on Server"

  1. 在弹出的窗口中,直接点击完成即可!!!

  1. 运行结果如下:

或者打开浏览器,复制上图中的路径:

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配置及使用的主要内容,如果未能解决你的问题,请参考以下文章

Servlet案例7:jsp技术及案例

IDEA如何完美配置Servlet(适用于IDEA 2022及以下版本)

使用WebServlet注解和web.xml配置servlet映射路径的区别及注意事项

Servlet配置及使用

Java Servlet学习笔记

Servlet 的配置及生命周期方法