Servlet
什么是server?
Servlet是java web开发的基石,与平台无关的服务器组件,它是运行在Servlet容器/web应用服务器/Tomcat,负责与客户端进行通信
servlet的功能:
1,创建并返回基于客户请求的动态HTML页面
2,与数据库进行通信
``
package com.southwind.servlet;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
public class MyServlet implements Servlet{
@Override
public void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException{
}
@Override
public javax.servlet.ServletConfig getServletConfig(){
return null;
}
@Override
public void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException{
String id=servletRequest.getParameter("id");//用来接收id参数,浏览器中用问号来表示传参
System.out.println("我接受到了客户端发来的请求,参数是"+id);
servletResponse.setContentType("text/html;charset=UTF-8");
servletResponse.getWriter().write("hello! client");
}
@Override
public java.lang.String getServletInfo(){
return null;
}
@Override
public void destroy(){
}
}
浏览器不能直接访问servlet文件,只能通过映射的方式来间接访问servlet,映射需要开发者手动配置,有两种配置方式。(这两种方式完全一样)
-
基于xml文件的配置方式
``
MyServlet
com.southwind.servlet.MyServlet</servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> //自定义名称。与java文件名称相对应,一定要注意前面有“/”符号,不要忘记。 </servlet-mapping> -
基于注解的方式
在java文件最上方直接添加
@WebServlet("/myservlet")
``与下面相对应
public class MyServlet implements Servlet{@Override
servlet的生命周期
``
package com.southwind.servlet;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
@WebServlet("/myservlet")
public class MyServlet implements Servlet{
public MyServlet(){
System.out.println("创建了servlet对象");
}
@Override
public void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException{//初始化进行一次
System.out.println("对servlet完成初始化操作");
}
@Override
public javax.servlet.ServletConfig getServletConfig(){
return null;
}
@Override
public void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException{//每刷新一次运行一次
System.out.println("执行了servlet的业务方法");
}
@Override
public java.lang.String getServletInfo(){
return null;
}
@Override
public void destroy(){
System.out.println("释放了servlet");
}
}
1.当浏览器访问Servlet的时候,tomcat会查询当前Servlet的实例化对象是否存在,如果不存在,则通过反射机制动态创建对象。如果存在,直接执行第三步。
``
package com.southwind.servlet;
import java.lang.reflect.Constructor;
public class TomcatTest {
public static void main(String[] args){
String str="com.southwind.servlet.MyServlet";
try {
Class clazz=Class.forName(str);
Constructor constructor=clazz.getConstructor();
Object object =constructor.newInstance();
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2,调用init方法完成初始化操作。
3.调用Servlet方法完成业务逻辑操作
4,关闭tomcat时,会调用destory方法,释放当前对象所占用的资源。
Servlet的生命周期方法:无参构造函数,init,service,destory
1,无参构造函数只调用一次,用来创建对象
2,init只调用一次,用来初始化对象
3,service调用n次,执行业务方法
4,destory纸条用一次,卸载对象、
ServletConfig
该接口是用来描述Servlet的基本信息
getServletName()返回Servlet的名称,全类名(带着报名的类名)
getInitParameter(String key)获取init参数的值(web.xml)只能基于xml文件配置方式,不能使用注解方式。
getInitParameterNames()返回所有InitParameter的name值,一般用作遍历初始化参数;
getServletContext()返回ServletContext对象,他是Servlet的上下文,整个Servlet的管理者。
@Override
public void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException{
System.out.println(servletConfig.getServletName());
System.out.println(servletConfig.getInitParameter("username"));
Enumeration<String> enumeration=servletConfig.getInitParameterNames();
while(enumeration.hasMoreElements()){
String element= enumeration.nextElement();
System.out.println(servletConfig.getInitParameter(element));
}
System.out.println("对servlet完成初始化操作");
}
``
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.southwind.servlet.MyServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
<init-param>
<param-name>type</param-name>
<param-value>super</param-value>
</init-param>
</servlet>
可以配置多个。
ServletConfig和ServletContext的区别
ServletConfig作用于某个Servlet实例,每个Servlet都有对应的ServletConfig,ServletContext作用于整个Web应用,一个Web应用对应一个ServletContext,多个Servlet实例对应一个ServletContext;
本文深入讲解Servlet的概念,作为JavaWeb开发基石,它如何与客户端通信及与数据库交互。详细介绍了Servlet的生命周期,包括创建、初始化、服务和销毁过程,以及ServletConfig和ServletContext的作用。
4万+

被折叠的 条评论
为什么被折叠?



