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的映射 并依次访问
结果:


浙公网安备 33010602011771号