1.继承Servlet接口,重写servlet方法
package d01;
import javax.servlet.*;
import java.io.IOException;
import java.util.Date;
/**
* zt
* 2020/8/28
* 10:53
*/
public class MyServlet implements Servlet {
/**
* 初始化servlet,只执行一次
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("初始化,呱?"+this.hashCode());
}
/**
* 获取servlet配置
* @return
*/
@Override
public ServletConfig getServletConfig() {
System.out.println("获取servlet配置,呱?");
return null;
}
/**
* 服务方法,处理浏览器请求的方法
* @param request 请求对象:封装请求信息
* @param response 响应对象:封装响应信息
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
// 请求和响应乱码问题解决
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//控制台打印
System.out.println("service"+new Date());
//输出数据给浏览器
response.getWriter().write("hello 呱?");
}
/**
* 获取servlet基本信息,版本,作者等
* @return
*/
@Override
public String getServletInfo() {
System.out.println("getServletInfo:"+hashCode());
return null;
}
/**
* 销毁,tomcat关闭的时候执行
*/
@Override
public void destroy() {
System.out.println("destroy:"+hashCode());
}
}
2.继承HttpServlet类,重写doget、dopost方法
直接输入myServlet2,会访问doGet方法
直接输入Demo1.htlm,店家按钮,会访问doPost方法
package d01;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* zt
* 2020/8/28
* 11:33
*/
public class MyServlet2 extends HttpServlet {
/**
* 处理get请求(浏览器直接输入地址)
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doget执行了0.0呱?");
/*// 请求和响应乱码问题解决
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//输出数据给浏览器
response.getWriter().write("hello 呱?");*/
}
/**
* 处理post请求
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
System.out.println("dopost执行了0.0呱?");
}
}
运行结果
F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\bin\catalina.bat run
[2020-08-28 11:44:50,298] Artifact 0828:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE: "C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828"
Using CATALINA_HOME: "F:\Tomcat\Tomcat9\apache-tomcat-9.0.11"
Using CATALINA_TMPDIR: "F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\temp"
Using JRE_HOME: "C:\Program Files\Java\jdk1.8.0_221"
Using CLASSPATH: "F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\bin\bootstrap.jar;F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\bin\tomcat-juli.jar"
28-Aug-2020 11:44:52.831 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/9.0.11
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Aug 11 2018 19:47:23 UTC
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 9.0.11.0
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Windows 10
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 10.0
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: C:\Program Files\Java\jdk1.8.0_221\jre
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_221-b11
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: F:\Tomcat\Tomcat9\apache-tomcat-9.0.11
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828\conf\logging.properties
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote=
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.password.file=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828\jmxremote.password
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.access.file=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828\jmxremote.access
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=F:\Tomcat\Tomcat9\apache-tomcat-9.0.11
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\temp
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.17] using APR version [1.6.3].
28-Aug-2020 11:44:52.837 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
28-Aug-2020 11:44:52.837 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
28-Aug-2020 11:44:53.907 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.0.2o 27 Mar 2018]
28-Aug-2020 11:44:54.043 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
28-Aug-2020 11:44:54.065 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
28-Aug-2020 11:44:54.074 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
28-Aug-2020 11:44:54.076 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
28-Aug-2020 11:44:54.077 信息 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1669 ms
28-Aug-2020 11:44:54.118 信息 [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
28-Aug-2020 11:44:54.119 信息 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/9.0.11
28-Aug-2020 11:44:54.138 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
28-Aug-2020 11:44:54.151 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
28-Aug-2020 11:44:54.155 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 78 ms
Connected to server
[2020-08-28 11:44:54,419] Artifact 0828:war exploded: Artifact is being deployed, please wait...
[2020-08-28 11:44:54,915] Artifact 0828:war exploded: Artifact is deployed successfully
[2020-08-28 11:44:54,915] Artifact 0828:war exploded: Deploy took 496 milliseconds
28-Aug-2020 11:45:04.141 信息 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\webapps\manager]
28-Aug-2020 11:45:04.200 信息 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\webapps\manager] has finished in [58] ms
doget执行了0.0呱?
doget执行了0.0呱?
dopost执行了0.0呱?
3.利用idea快捷创建servlet
创建后会自动生成doget和dopost方法
/**
* zt
* 2020/8/28
* 14:09
*/
@WebServlet(name = "Servlet3")
public class MyServlet3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
System.out.println("dopost执行了0.0呱?");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doget执行了0.0呱?");
}
}
4.servlet一些关于web.xml的配置
4.1servlet与servlet-mapping配置
4.2servlet加载时机:1.(默认)第一次访问servlet时创建(-1)。2.启动tomcat时创建(>=0)
4.3servlet参数(可以在自己创建的servlet中调用)(可写在初始化里面或者servlet的其他方法中)
servletConfig.getInitParameter("username2");
<init-param>
<param-name>username2</param-name>
<param-value>呱?</param-value>
</init-param>
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_3_1.xsd"
version="3.1">
<!-- 配置-->
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>d01.MyServlet</servlet-class>
<!-- servlet参数-->
<init-param>
<param-name>username</param-name>
<param-value>zhuxi</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>18</param-value>
</init-param>
<!-- servlet加载时机:1.(默认)第一次访问servlet时创建,2.启动tomcat时创建-->
<!-- 1.(默认)第一次访问servlet时创建-->
<!-- <load-on-startup>-1</load-on-startup>-->
<!-- 2.启动tomcat时创建-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MyServlet2</servlet-name>
<servlet-class>d01.MyServlet2</servlet-class>
<!-- servlet参数-->
<init-param>
<param-name>username2</param-name>
<param-value>呱?</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet2</servlet-name>
<url-pattern>/myServlet2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MyServlet3</servlet-name>
<servlet-class>d01.MyServlet3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet3</servlet-name>
<url-pattern>/myServlet3</url-pattern>
<!-- <url-pattern>*.do</url-pattern>-->
<!-- 匹配所有不包括jsp-->
<!-- <url-pattern>/</url-pattern>-->
<!-- 匹配所有-->
<!-- <url-pattern>/*</url-pattern>-->
</servlet-mapping>
</web-app>
5.利用注解配置servlet (与web.xml中类似)
package d01;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* zt
* 2020/8/28
* 15:19
*/
//1. name (servlet名称) 相当于web.xml的 <servlet-name>MyServlet</servlet-name> , 注解中的名字可要可不要
// 2.1 value 配置访问路径
// 2.2 url-patterns 配置访问路径
// 3.loadonstartup (servlet创建时机)
// 4.initParams设置servlet参数 (没有意义,直接写在下面即可)initParams = {@WebInitParam(name="大明",value="498999698@qq.com")}
@WebServlet(value = {"/login","login2"},loadOnStartup = 0,initParams = {@WebInitParam(name="大明",value="498999698@qq.com")})
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("使用注解配置servlet");
String name = getInitParameter("大明");
System.out.println(name);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
6.浏览器、服务器交互
package d02;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* zt
* 2020/8/28
* 16:05
*/
@WebServlet(value = "/res")
public class RegistServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 请求和响应乱码问题解决
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//2. request封装浏览器发送的请求信息
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
//3. 其他方法
System.out.println("获取请求头:"+request.getHeader("Accept"));
System.out.println("请求方式:"+request.getMethod());
System.out.println("getRequestURI统一资源标识符(包含定位符)"+request.getRequestURI());
System.out.println("getRequestURL统一资源定位符"+request.getRequestURL());
System.out.println("getRemoteAddr"+request.getRemoteAddr());
//1.获取字节流(二进制数据(图片、声音或者文本)发给浏览器,使用ServletOutputStream)
// ServletOutputStream outputStream = response.getOutputStream();
//2.获取字符流,把文本数据发给浏览器(不能同时用)
PrintWriter writer = response.getWriter();
writer.write("hello,呱?");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
浏览器运行结果:
服务器运行结果:
用户名:null
密码:null
获取请求头:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
请求方式:GET
getRequestURI统一资源标识符(包含定位符)/0828_war_exploded/res
getRequestURL统一资源定位符http://localhost:8080/0828_war_exploded/res
getRemoteAddr0:0:0:0:0:0:0:1
此时的用户名密码为null,是可以通过get与post方式传递的
get方式:直接在浏览器地址栏输入http://localhost:8080/0828_war_exploded/res?username=123&password=123
post方式:在postman中测试,如下图: