Servlet配置及使用详解

本文详细介绍了Servlet的创建过程,包括手动创建和使用IDEA创建Servlet项目。讲解了Servlet的调用过程,生命周期,以及与Servlet相关的对象如ServletContext、HttpServletRequest和HttpServletResponse的作用。此外,还探讨了Servlet的配置细节,如web.xml中的配置,以及如何处理文件下载、请求转发和重定向等问题。文章最后讨论了请求参数、请求域中的数据共享以及如何控制资源缓存。
摘要由CSDN通过智能技术生成

1. Servlet介绍

Sun提供的一种动态web资源开发技术,本质上就是一段java小程序。

可以将Servlet加入到Servlet容器中运行。

tomcat既是web容器也是Servlet容器。


1.1 如何创建Servlet

先写一个类,实现sun公司定义的Servlet接口:

package java_web.Servlet;//这里是我自己定义的包,后面用到

import java.io.*;
import javax.servlet.*; //servlet-api.jar中的包

//GenericServlet类已经帮我们实现了Servlet的接口,只需继承并编写service即可
public class HelloServlet extends GenericServlet{
   
    public void service(ServletRequest req, ServletResponse res) {
        res.getWriter().write("hello Servlet");
    }
}

上面是参照javaee api文档写的一个简单Servlet,然后在同目录下运行指令:

javac HelloServlet.java

会报错,找不到那些关于Servlet的包,因为我们一般使用的是JavaSE,缺少这些必要的package,而tomcat实际上是自带有的,所以我们可以通过命令设置临时的classpath,以便编译:

set classpath=%classpath%;%CATALINA_HOME%\lib\servlet-api.jar;

再运行javac HelloServlet.java,这时就应该可以成功了,不过我们需要的是一个文件夹package而不是单独的class文件,所以应该使用指令:

javac -d . HelloServlet.java

会在当前目录下生成一个包含了HelloServlet.classpackage,名为java_web

接下来,将该整个包文件放到Tomcat中

tomcat\webapps\news\WEB-INF\classes\java_web

news是一个web应用,需要将刚创建的整个包文件java_web放到该应用的classes中。

还需要配置WEB-INF中的web.xml(可以参考conf中的web.xml):

<?xml version="1.0" encoding="ISO-8859-1"?>
<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">

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>java_web.Servlet.HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/servlet/first</url-pattern>
    </servlet-mapping>

</web-app>

这样就通过URL映射到了相应的类文件。

在浏览器地址栏中访问localhost/news/servlet/first,即可看到刚才创建的servlet文件效果。


1.2 使用IDEA创建Servlet项目

  1. 点击Filenewproject

    newpro

  2. 选择Java Enterprise,并在右边配置好版本和路径,点击Next,再勾选Create project from template(或者在上一步勾选 Web Application):

    template

  3. 点击Next,选择项目的名称和目录,设置服务器为tomcat

    proconf

  4. 点击finish后,项目创建完毕,用默认的配置直接启动Tomcat运行该项目,会生成out文件夹及其内部结构,并自动打开浏览器跳转到index.jsp

    prodir

    src目录存放的是一些待编译的java文件,web目录存放的是网页的web资源。out目录存放的是编译输出文件,其中web_war_exploded的名称意为,项目名称为web的应用资源经过打包的war文件展开后的结构。

    为什么会出现这个呢?其实当我们启动项目,IDEA会自动生成这样的war文件,部署运行在Tomcat服务器上,只是为了方便所以开启了exploded模式,展开显示给开发者,可以在Project Structure中修改为war模式。因此,某个module有了artifacts 就可以部署到应用服务器中了。

    官方对artifacts的解释:

    An artifact is an assembly of your project assets that you put together to test, deploy or distribute your software solution or its part. Examples are a collection of compiled Java classes or a Java application packaged in a Java archive, a Web application as a directory structure or a Web application archive, etc.

    artifact是一个项目里资源的整合,比如说一些Java类文件,web资源等,我们可以对它们进行测试、部署或发布。

  5. 整个过程看似顺理成章,但是别忘了,我们是用IDEA生成的项目默认配置启动的,虽然运行成功,我们却不知其所以然。下面对它的一些相关配置进行解释。


1.3 项目相关配置

首先要明确,我们有两块需要配置:Project StructureRun/Debug Configurations,前者指的是刚创建的这个web项目的结构相关配置,后者指的是我们运行这个项目所用的相关配置,即Tomcat服务器的配置。


关于Project Struture

理解 IntelliJ IDEA 的项目配置和Web部署

IDEA里面的facets和artifacts的讲解

上面的文章已经对项目配置信息解释得很清楚了,相信认真看完之后,都能明白如何配置。需要强调的是,别对目录结构有疑惑,web资源原封不动输出,src编译输出到WEB-INF,种种设计是为了让我们能够更方便地开发web项目。


关于Run/Debug Configurations

理解了上面文章里的项目配置后,关于Run/Debug ConfigurationsTomcat设置,也不在话下,需要注意的是,记得在Deployment选项中给Tomcat添加资源路径,也就是将url与web应用的资源包进行映射,此处显示的应用资源包就是outartifactsweb_war_exploded目录。

tomconf


1.4 Servlet的调用过程

服务器处理请求的过程:

  1. 分析出当前请求的是哪台虚拟主机:
    1. 查看请求头中的Host,分析访问的是哪台主机。
    2. 如果没有该属性,则访问缺省虚拟主机。
  2. 分析访问的是虚拟主机中哪个web应用;
  3. 分析要访问的是这个web应用中的哪个资源(静态资源直接获取);
  4. 查看web.xml文件,是否有对应的虚拟路径,有则使用该路径对应的资源(如Servlet)做响应。

Servlet生命周期:

Servlet在第一次被访问到的时候,服务器会创建出Servlet对象,并立即调用init方法做初始化操作,创建出来的对象会一直驻留在内存中,之后对这个Servlet的访问

  • 30
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值