servlet进行实现网络编程
首先要使用对应的Servlet
的jar包文件,如果是maven
管理的项目就直接导入对应的pom
文件实现对应Servlet-api
文件包实现使用对应的Servlet
接口实现,但是要注意tomcat对应Servlet的api命名本文实现使用tomcat10
来操作所用的api是jakarta
使用Servlet要实现的方法
package com.itsense;
import jakarta.servlet.*;
import java.io.IOException;
public class ServletDemo implements Servlet {
//初始化Servlet(只会执行一次)
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
//获取SServlet的配置信息
@Override
public ServletConfig getServletConfig() {
return null;
}
//主要实现Service方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
//返回Servlet信息
@Override
public String getServletInfo() {
return "";
}
//销毁servlet(只会执行一次)
@Override
public void destroy() {
}
}
Servlet是单例模式,只会生成一次之后多次调用,生命周期是调用创建到最后的项目结束之后进行销毁实现
配置对应的Web.xml文件
<servlet>
<servlet-name>servletDemo01</servlet-name>
<servlet-class>com.itsense.ServletDemo01</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletDemo01</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
对应的servlet
和servlet-mapping
的servlet-name
必须保持一致,不然没有办法通过使用url-pattern
实现对应的反射实现servlet-class
的实现。在servelt
中使用init-param
来实现对应参数的初始化实现,可以直接设置对应的网站编码就不需要再service
方法中set
对应的encoding
,还可以使用load on startup
标签来实现初始化的时间,如果设置为0就随着使用tomcat
的启动同时创建对应的初始化类的实现,其中不同的Servlet
的实现的初始化顺序是根据load on startup
的大小顺序来实现的是升序的顺序进行初始化的,但是使用场景比较多的就是设置为0随着网站的初始化实现对应的实现类。Servlet
在使用上面还需要实现对应的5个方法比较臃肿,所以就使用Servlet
的孙子类HttpServlet
来实现对应的操作更加简便
HttpServlet实现网络编程
注入依赖
和Servlet
一样需要引入对应的pom文件的依赖
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
</dependency>
在Servlet
中实现对象的路径是使用url-pattern
来实现对应的访问路径但是使用HttpServlet
来实现路径就只需要使用@WebServlet("/path")
就直接实现对应的路径创建,就省去了使用Web.xml
文件设置对应的文件操作。同时HttpServlet
已经实现了所有的方法创建一个类并不必须要去重写所有的方法,就只要实现对应的service
方法就行了,之后就只需要使用两个对象的实现操作就可以直接使用对应的Servlet
网络实现
HttpServletRequest的使用方法
获取对应的信息请求行
System.out.println("请求方式:" + req.getMethod());
System.out.println("请求完整路径" + req.getRequestURL());
System.out.println("请求的资源路径" + req.getRequestURI());
System.out.println("请求项目的虚拟化路径" + req.getContextPath());
System.out.println("项目资源路径" + req.getServletPath());
使用req对象可以返回对应的参数,有三种返回方式
1.返回一个参数直接使用对应参数的Key来返回
String userName = req.getParameter("username");
System.out.println("useName : " + userName);
String pwd = req.getParameter("pwd");
System.out.println("pwd : " + pwd);
返回的参数一般是String
类型如果是Date
参数也是会转化为String
类型实现
2.返回一组参数使用同名的参数返回的值的数组实现
String[] hobbies = req.getParameterValues("hobby");
System.out.println("爱好 : " + Arrays.toString(hobbies));
返回的数据类型是String[]
类型,使用数组返回
3.返回所有参数的键值对返回类型是Map<String, String[]>
Map<String, String[]> parameterMap = req.getParameterMap();
Set<Map.Entry<String, String[]>> es = parameterMap.entrySet();
for(Map.Entry<String, String[]> e: es){
System.out.println(e.getKey() + ": " + Arrays.toString(e.getValue()));
}
碎碎念
复习一下之前的知识点,仅供参考,真正想要深入学习还是建议去看官方文档…这篇就到此为止…