02

    xiaoxiao2025-06-22  9

    Servlet:Server applet,服务器端的小程序,用来动态的输出网页内容 狭义上就是Java中的一个接口 广义上就是实现了该接口的实现类,我们通常说的Servlet就是这种

    Servlet的开发步骤:

    1.创建JavaWeb项目 1).创建一个JavaProject:HelloServlet 2).在项目中创建一个web项目的根目录:webapp 3).在根目录中创建一个WEB-INF文件夹 4).在WEB-INF中创建一个classes文件夹,存放字节码文件 5).在WEB-INF中创建一个lib目录 6).在tomcat/webapps/root/WEB-INF目录中拷贝web.xml文件 2.开发Servlet 1)导入Servlet相关的jar包:servlet-api.jar 在tomcat/lib目录中找 2).定义一个类,实现javax.servlet.Servlet接口,并覆盖其中的方法 3).将Servlet交给Tomcat来管理其生命周期 (在web.xml文件中进行如下的配置) <servlet> <servlet-name>MappingServlet</servlet-name> <servlet-class>com.hello.mapping</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <!-- 一个Servlet可以有多个url-pattern --> <!-- url-pattern 不能为default__如果是default就不能访问当前项目中的静态文件 --> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> 3.部署项目 在tomcat/conf/server.xml文件中进行项目的部署 <Context docBase=”web项目的根路径” path=”上下文路径”/>

    Servlet的生命周期

    public void destroy():销毁方法 public String getServletInfo():获取Servlet的相关的信息 public void init(ServletConfig config):Servlet的初始化方法 public ServletConfig getServletConfig():获取Servlet的配置对象 public void service(ServletRequest req, ServletResponse res):服务方法

    Servlet的生命周期方法:Servlet在整个应用中只有一个对象,单例的

    1.构造器在第一次请求的执行 2.初始化方法在第一次请求的时候执行 3.service方法在每次请求的时候都会执行 4.destroy方法在正常关闭服务器的时候执行,所以资源销毁的操作通常不会放在该方法中(可能执行不到) 5.为了服务器能够顺利的通过反射创建Servlet对象,在Servlet中必须保留一个公共的无参数的构造器

    Servlet的请求流程

    1.解析请求: 协议:http 主机地址:localhost 端口:80 上下文路径:/pss 资源名称:/hello 2.通过/pss在server.xml文件中找到相关的配置,找到项目的根路径 <Context docBase=”项目的根路径” path=”/pss”/>如果没有:返回404 3.通过/hello去项目中的web.xml文件中找到<url-pattern>为/hello的节点 如果没有:返回404 4.通过资源名称找到Servlet的全限定名 5.在Tomcat中有一个Servlet的实例缓存池 Map<String,Servlet> cache = ...... 先从缓存池中获取对应全限定名的Servlet对象 Servlet obj = cache.get(“Servlet 的全限定名”); if(obj == null){ //第一次 //GOTO 6; }else{ //非第一次 //GOTO 8; } 6.创建Servlet对象 obj = Class.forName(“全限定名”).newInstance(); 将创建好的对象放到缓存池中 cache.put(“全限定名”, obj); 7.先创建ServletConfig对象,调用初始化方法 obj.init(config); 8.先创建ServletRequest,ServletResponse对象,调用service方法 obj.service(req,resp); 9.返回响应信息 ![这里写图片描述](https://img-blog.csdn.net/20160815010330390)

    servlet 请求的中文乱码处理 Tomcat中默认处理请求参数的编码方式是ISO-8859-1,不支持中文的处理 解决方案:

    1.拆,将按照ISO-8859-1编码之后的数据按照同样的方式进行拆分 bytes = username.getBytes(“ISO-8859-1”); 装,将字节数组按照UTF-8的方式进行编码 username=new String(bytes, “UTF-8”);

    以上的方式可以解决乱码,但是如果需要解决的数据非常多,那么就变得非常麻烦 2.可以通过修改server.xml文件中的配置,只针对get方式生效 3.可以调用request对象中的setCharacterEncoding(String encoding);,只针对post方式生效

    Servlet3.0新特性-注解配置

    使用注解的准备工作: 第一步:在Servlet类上贴@WebServlet(urlPatterns=“/anno”) 第二步: metadata-complete="true":表示不扫描类上的注解 metadata-complete="false":表示扫描类上的注解,缺省值

    使用注解可以将metadata-complete设置为false,也可以删除这个属性,也可以将web,xml文件删除 注意:注解只是替代web.xml文件中的部分配置 也就是说web.xml那么在项目中建议保留

    Servlet线程安全问题

    servlet的线程安全问题的根本原因:多线程并发访问同一个资源的时候造成的 Servlet的特点:单例的 解决方案: 方式一:可以让servlet实现一个接口:SingleThreadModel,表示当前的servlet同时只能被一个线程访问(不推荐) 方式二:建议以后在servlet中不要随便的使用成员变量(推荐)
    转载请注明原文地址: https://ju.6miu.com/read-1300204.html
    最新回复(0)