目录
- servlet
- 源码:servlet01
- 启动测试
- 总结
servlet
- 上面就是一个web项目的典型目录,servlet处理request和response的逻辑
- web.xml管理路由信息
- index.jsp作为首页访问的页面,jsp是java server page可以认为用java和html混合写前端
源码:servlet01
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="false">
<!--注册Servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.zty.servlet.HelloServlet</servlet-class>
</servlet>
<!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!--404-->
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.zty.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
- 他的意思是除了hello页(输出hello),其他都是error页(输出404)
- hello页会用HelloServlet做处理
- error页会用ErrorServlet做处理
- metadata-complete需要注意,如果是True则不支持@WebServlet注解,如果是false表示web.xml路由不完全,支持注解
ErrorServlet.java
package com.zty.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class ErrorServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.print("<h1>404</h1>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
- get中设置了一下resp的输出类型,编码格式,来了一个PrintWriter把输出打印到html上,writer.print写的是html内容
- doPost不处理先
HelloServlet.java
package com.zty.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = "/helloanno")
public class HelloServlet extends HttpServlet {
//由于get或者post只是请求实现的方式不同,可以相互调用,业务逻辑都一样!
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("进入了doGet方法!");
//ServletOutputStream outputStream = response.getOutputStream();
PrintWriter writer = response.getWriter();//响应流
writer.println("Hello Servlet");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- sout在显示台输出,当然可以用log4j在文件记录,writer在前端输出
- @WebServlet(urlPatterns = “/helloanno”)所以访问helloanno也是会跳到这个servlet
启动测试
- helloano和hello下的输出都是Hello servlet
- 其他都是404
tomcat启动:
- 更新一下路由名为/s1简化一下
启动测试:
- index.jsp被error覆盖了,因为是/*
- 通过web.xml和注解都可以写好路由
- web.xml中是按照先后顺序的,因为先写了hello,所以不会被/*覆盖,至于为什么helloanno也不会被覆盖emmm,我觉得或许是因为注解的优先级更高?我猜的
总结
- servlet初使用
- 首先定义每个页面绑定会去到哪个servlet
- 每个servlet的处理逻辑是啥等
- 后面还有不同servlet之间的交互,以及resp的多种形式,jsp的具体编写等,好像听说是SpringMVC的基础哦!