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目录删除
导入Servlet所需依赖
我们去Maven仓库搜索所依赖的jar包。
选择合适的包
在pom.xml文件中的dependencies
标签内粘贴以下配置信息以添加远程仓库的jar包,
新建子项目
在我刚刚创建好的Maven项目中新建一个Moudule,并使用webapp模板创建maven项目
并完善项目结构,配置Tomcat
可以在父项目中的pom文件内看到出现了module标签,子项目可以使用父项目已经导入的jar包,父项目不可以使用子项目导入的包
在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接口的实现类,
我们需要做的操作就是编写自己的实现类,接受请求并给出响应信息
在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下设置
<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后加上我们刚刚设置的访问路径
Context
context是连接上下文的一个对象,他是在Servlet对象创建时同时创建的一个对象
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的映射 并依次访问
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?