Servlet
简介
servlet是开发动态web的一门技术 sun公司在这些API中提供一个接口叫servlet,若要开发一个servlet程序,只要: 1.编写一个类,实现servlet接口 2.把开发好的Java类部署到Web服务器中
操作
1.构建一个普通的Maven项目,删掉里面的src文件夹,以后我们学习就在这个项目里面构建Module
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
这段话加到pom.xml里面去,因为我们需要servlet的API
2.在父maven项目中建一个webapp的子maven项目
父项目的jar包子项目可以直接使用,但是子项目的maven父项目无法使用
3.优化环境
①将web.xml修改为最新的 我自己的好像会报错先用原版的好了
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/jvavaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/jvavaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
</web-app>
②将maven文件搭建完整
4.编写一个Servlet程序
①编写一个普通类 ②实现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 {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
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
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>top.servlet1.HelloServlet</servlet-class>
</servlet>
<!-- 请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
配置Tomcat
启动测试
原理
Servlet是由Web服务器调用,web服务器在收到浏览器的请求后会:
Mapping问题
一般都是一对一 一个servlet指定一个映射路径 localhost:8080/s1/hello/hello
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
一个servlet指定多个映射路径 localhost:8080/s1/hello/hello1 localhost:8080/s1/hello/hello2 localhost:8080/s1/hello/hello3
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
也可以使用通用路径 localhost:8080/s1/hello/dwpqdhwqpdqwd随便什么
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
默认请求
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
前后缀 localhost:8080/s1/hello/whuidqhudhu随便什么.xxx
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.xxx</url-pattern>
</servlet-mapping>
写一个404页面
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("<h1>404<br>你的页面被我吃掉了!</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
然后再到web.xml里面注册
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>top.servlet1.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
优先级问题
设置了固有的映射路径的优先级最高 这里部分朋友的web-app会标红,用下面代码即可
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
结果
|