0
点赞
收藏
分享

微信扫一扫

JavaWeb(part1)--servlet

学习笔记,仅供参考,有错必究


文章目录

  • ​​JavaWeb​​
  • ​​什么是Servlet​​
  • ​​举个例子​​
  • ​​Servlet执行原理​​
  • ​​Servlet注解​​
  • ​​Servlet的体系结构​​
  • ​​Servlet访问路径的配置​​
  • ​​注意事项​​

JavaWeb



什么是Servlet



Servlet就是运行在服务器端的小程序,本质上servlet就是一个实现了servlet接口的类,servlet接口定义了Java类被tomcat识别的规则。



举个例子



首先,我们创建一个JAVAEE项目项目ServletDemo,并在src文件夹下创建com.servlet.demo包,并在其中创建Demo1.html, 定义类实现Servlet接口,并实现接口中的service方法:

package com.servlet.demo;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

public class Demo1 implements Servlet {

@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destroy");
}

@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}

@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}

@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Hello Gui");
}

}



在WebContent的WEB-INF文件夹下的web.xml里配置Servlet:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ServletDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<!--增加的代码,start-->
<servlet>
<servlet-name>demo-01</servlet-name>
<servlet-class>com.servlet.demo.Demo1</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>demo-01</servlet-name>
<url-pattern>/my_demo</url-pattern>
</servlet-mapping>
<!--增加的代码,end-->

</web-app>

运行项目,向http://localhost:8080/ServletDemo/my_demo发起请求,控制台得到如下输出:

Hello Gui



Servlet执行原理

JavaWeb(part1)--servlet_ide



Servlet注解

定义类实现Servlet接口,实现接口中的方法,并在类上使用​​@WebServlet​​注解配置。



Servlet的体系结构

  • Servlet接口
  • GenericServlet抽象类
  • 将Servlet的其它方法做了默认的空实现,只将Service方法做了抽象,继承该抽象类只需要实现Service方法即可
  • HttpServlet抽象类
  • 对Http协议的封装简化操作,判断请求方式进行对应处理
  • 继承该抽象类需要实现doGet和doPost方法


Servlet访问路径的配置



一个Servlet可以定义多个访问路径

@WebSevlet({“/s1”,”/s2”,”/s3”})

路径定义规则:

/xxx
/xxx/xxx
/xxx/*
*.do

例如:

package com.servlet.demo;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet({"/d03/*", "/dd003/*"})
public class Demo03 extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doPost(req, resp);
System.out.println("我是demo03的post");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
// super.doGet(req, resp);
System.out.println("我是demo03的get");
}
}



注意事项



  • Servlet是单例的
  • 多个用户同时访问可能存在线程安全问题
  • 尽量不要在Servlet中定义成员变量,如果定义了,不要在方法中修改
  • 服务器被关闭时Servlet被销毁
  • 先执行Destroy然后Servlet才被销毁


举报

相关推荐

0 条评论