- Servlet
- 简介
- 操作
- 1.构建一个普通的Maven项目,删掉里面的src文件夹,以后我们学习就在这个项目里面构建Module
- 2.在父maven项目中建一个webapp的子maven项目
- 3.优化环境
- 4.编写一个Servlet程序
- 启动测试
- 原理
- Mapping问题
- 写一个404页面
- 优先级问题
servlet是开发动态web的一门技术
sun公司在这些API中提供一个接口叫servlet,若要开发一个servlet程序,只要:
1.编写一个类,实现servlet接口
2.把开发好的Java类部署到Web服务器中
javax.servlet javax.servlet-api 4.0.1 provided
这段话加到pom.xml里面去,因为我们需要servlet的API
父项目的jar包子项目可以直接使用,但是子项目的maven父项目无法使用
①将web.xml修改为最新的
我自己的好像会报错先用原版的好了
②将maven文件搭建完整
①编写一个普通类
②实现Servlet接口,这里我们直接继承HttpServlet
当然我们会遇到HttpServlet无法引入的问题,这时候我们需要将tomcat里面的如下所示的两个包放入新建的lib文件夹里
然后在这个红箭头里引入这两个包的lib文件夹即可成功HttpServlet
然后重写HttpServlet
package top.servlet1;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet extends HttpServlet {
//重写一下get和post,他们俩可以相互调用,业务逻辑都一样
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
// ServletOutputStream outputStream = resp.getOutputStream();
PrintWriter writer=resp.getWriter();//响应流
writer.print("Hello,Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
super.doPost(req,resp);
}
}
编写Servlet映射
我们写的是java,需要浏览器访问,所以需要在web服务器中注册servlet,提供一个浏览器访问路径
web.xml
Archetype Created Web Application hello top.servlet1.HelloServlet hello /hello
配置Tomcat
Servlet是由Web服务器调用,web服务器在收到浏览器的请求后会:
Mapping问题一般都是一对一
一个servlet指定一个映射路径
localhost:8080/s1/hello/hello
hello /hello
一个servlet指定多个映射路径
localhost:8080/s1/hello/hello1
localhost:8080/s1/hello/hello2
localhost:8080/s1/hello/hello3
hello /hello1 hello /hello2 hello /hello3
也可以使用通用路径
localhost:8080/s1/hello/dwpqdhwqpdqwd随便什么
hello /hello/*
默认请求
hello /*
前后缀
localhost:8080/s1/hello/whuidqhudhu随便什么.xxx
写一个404页面hello *.xxx
package top.servlet1;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter writer = resp.getWriter();
writer.print("404
你的页面被我吃掉了!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
然后再到web.xml里面注册
error
top.servlet1.ErrorServlet
error
/*
优先级问题
设置了固有的映射路径的优先级最高
这里部分朋友的web-app会标红,用下面代码即可
结果



