Java servlet 定义
- A Java servlet is a Java software component that extends the capabilities of a server. Although servlets can respond to many types of requests, they most commonly implement web containers for hosting web applications on web servers and thus qualify as a server-side servlet web API.
Java Servlet是扩展服务器功能的Java软件组件。 尽管Servlet可以响应多种类型的请求,但它们最常见的是实现Web容器以将Web应用程序托管在Web服务器上,因此符合服务器端Servlet Web API的要求。 - Such web servlets are the Java counterpart to other dynamic web content technologies such as PHP and ASP.NRT.
Servlet & jsp
servlet | jsp |
---|---|
servlet is a java code | JSP is a html based code |
Writing code for servlet is harder than JSP as it is html in java | JSP is easy to code as it is in html |
Servlet plays a control
什么是协议
一种规范,双方共同的约定
Life cycle of a servlet
- Three methods are central to the life cycle of a servlet.
package javax.servlet;
import java.io.IOException;
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
- They are implemented by every serlet and are invoked at specific times by the server.
准备:
第一种Servlet:implements Servlet
package com.java.code.servlet;
import javax.servlet.*;
import java.io.IOException;
public class TestServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
servletResponse.getWriter().println("Hello servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
- 修改web.xml配置servlet
前添加代码
...
<servlet>
<servlet-name>testServletName</servlet-name>
<servlet-class>com.java.code.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServletName</servlet-name>
<url-pattern>/testServlet1</url-pattern>
</servlet-mapping>
</web-app>
运行
第二种Servlet:extends HttpServlet
package com.java.code.servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import java.io.IOException;
public class TestServletV2 extends HttpServlet {
}
如上修改web.xml
运行报错HTTP Status 405 – 方法不允许
HttpServlet中的doget方法(如图)需要重写
修改代码如下:
...
public class TestServletV2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Hello servlet v2");
}
}
和浏览器简单交互
public class TestServletV2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String myHeader = req.getHeader("myHeader");
resp.getWriter().println("Hello servlet v2"+myHeader);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String param = req.getParameter("param");
resp.getWriter().println("Hello servlet POST v2 " + param);
}
}
在postman中运行
GET
POST
不用在web.xml中配置的Servlet
添加注解
@WebServlet("/testServletV3")