javaweb开发核心之玩转Servlet4.0-xdclass
2020年9月29日03:08:25 by ddhhdd
Servlet是JavaServlet的简称,用Java编写的运行在Web服务器或应用服务器上的程序,具有独立与平台和协议的特性,主要功能在于交互式地浏览和生成动态Web内容。
作用:接收用户通过浏览器传来的表单数据,或者读取数据库信息返回给浏览器看,创建动态网页(发起请求,响应内容)
package javax.servlet
public interface Servlet {
}
有两个常见的子类:HttpServlet、GenericServlet

javaWeb Servlet文档:https://tomcat.apache.org/tomcat-9.0-doc/servletapi/index.html
学习javaWeb更多的是学习里面的类和对象怎么用(即上面文档,多做笔记)
Servlet HelloWorld 程序
- 创建class,继承HttpServlet
- 重写doGet()方法,返回HTML内容


UserServlet
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 响应内容
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div>hello,dawson.学习javaWeb中...</div>");
}
}
- 配置
web.xml
<servlet>
<servlet-name>userServlet</servlet-name>
<servlet-class>com.ddhhdd.web.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userServlet</servlet-name>
<url-pattern>/userServlet</url-pattern>
</servlet-mapping>
- 启动Tomcat进行访问

Servlet里面的doGet和doPost
doGet()方法
- http用Get方式提交的请求,普通的查询就会进入到此方法
doPost()方法
- http用post方式提交的请求就会进入到此方法
还有其他的doHead()、doDelete()等方法,都是根据http提交的Method来区分;
- Servlet访问URL使用路径映射(注意:一定要加
/开头)- url-pattern:以
/开头,可用/xx/yy来区分模块,*是通配符,最好用模块区分
- url-pattern:以
Servlet生命周期
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
- Servlet接口里面有5个方法,其中三个生命周期方法和两个普通方法
- 实例化 -> 使用构造方法创建对象
- 初始化 -> 执行
init()方法:Servlet的生命周期中,仅执行一次init方法,它是服务器装入Servlet时执行的,即第一次访问这个Servlet才执行 - 服务 -> 执行
service()方法:service方法是Servlet的核心。每当一个客户请求一个HttpServlet对象,该对象的service方法就要被调用 - 销毁 -> 执行
destroy()方法:destroy方法仅执行一次,即在服务器停止且卸装Servlet时执行该方法
新版Servlet3.0-5.0和旧版配置的区别
旧版Servlet,在xml里面配置servlet-class和url-pattern,比较不方便;新版Servlet3.0+支持注解的方式
@WebServlet(name = "userServlet", urlPatterns = {"/user1","/user2","/test"})
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 响应内容
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = resp.getWriter();
printWriter.write("<div>hello,dawson.学习javaWeb中...</div>");
}
}
自己测试访问userServlet报404错误,未解决(这个只是个名字name of the Servlet,2020年10月3日00:47:14-ddh);访问/user1等则可成功(array of URL patterns to which this Filter applies则会被拦截)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
//servlet名称,若不指定,则为Servlet的完整类名
String name() default "";
//路径映射,配置多个,需要/开头
String[] value() default {};
//路径映射,支持配置多个,需要/开头
String[] urlPatterns() default {};
//标记容器是否在启动应用时就加载Servlet,默认或数值为负数时表示第一次请求Servlet时再加载;0或正数表示启动应用就加载
int loadOnStartup() default -1;
//配置初始参数
WebInitParam[] initParams() default {};
//是否⽀支持异步操作模式
boolean asyncSupported() default false;
}

浙公网安备 33010602011771号