Servlet配置与使用

Servlet是什么?

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

Hello Servlet!

首先创建一个Maven项目,这里我们不使用模板创建,作为一个干净的Maven父项目,把不必要的src目录删除
image

导入Servlet所需依赖

我们去Maven仓库搜索所依赖的jar包。
image

选择合适的包

image
pom.xml文件中的dependencies标签内粘贴以下配置信息以添加远程仓库的jar包,
image
image

新建子项目

在我刚刚创建好的Maven项目中新建一个Moudule,并使用webapp模板创建maven项目
image

并完善项目结构,配置Tomcat
image
可以在父项目中的pom文件内看到出现了module标签,子项目可以使用父项目已经导入的jar包,父项目不可以使用子项目导入的包
image

在java文件夹内建包后新建一个java文件,继承HostServlet并重新doGet()和doPort()方法

package cn.cen;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}

HttpServlet是实现了Servlet接口的实现类,
image
image
我们需要做的操作就是编写自己的实现类,接受请求并给出响应信息

在doGet方法内编写代码,一个Hello,Servlet!
设置使用的编码格式以及文本类型

resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");

打印Hello Servlet!
resp.getWriter().print("<h1>Hello,Servlet!</h1>");

设置映射

以下操作均在项目内./src/main/webapp/WEV-INF/web.xml下设置
image

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>cn.cen.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>

运行部署在Tomcat服务器上并访问

启动服务时会默认找到index.jsp文件,需要在地址栏url后加上我们刚刚设置的访问路径
image

Context

context是连接上下文的一个对象,他是在Servlet对象创建时同时创建的一个对象
image

Context的具体使用

我们创建两个类

package cn.cen;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
ServletContext context = this.getServletContext();
context.setAttribute("userName","Cen"); // 将一个数据用键值对的方式保存在ServletContext中。
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

读取Context数据的类

package cn.cen;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class GetContext extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
ServletContext context = this.getServletContext();
String userName = (String) context.getAttribute("userName");
resp.getWriter().print("名字:" + userName);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

设置好两个Servlet的映射 并依次访问
结果:
image

posted @   CenGeng  阅读(457)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示