当前位置: 首页 > 图灵资讯 > 技术篇> servlet中的注解式开发

servlet中的注解式开发

来源:图灵教育
时间:2023-05-31 09:21:04

1.分析oa项目中的web.xml文件33

-现在只是单标CRUD,没有复杂的业务逻辑,一个丢失功能非常简单。web.xml文件中有这么多配置信息。如果使用这种方法,对于一个大项目,web.xml文件将非常大,最终可能达到几十兆。

-在web.servlet信息在xml文件中配置,显然开发效率相对较低,每一个都需要配置。

-而且在web.xml文件中的配置很少修改,所以这种配置信息可以直接写在java类别中吗?是的。

2.Servlet3.0版本后,基于注释开发推出了各种Servlet。优点是什么?33

-开发效率高,不需要编写大量的配置信息。注释直接用于java类别的标记。

-web.xml文件体积变小。

-并不是说注释有了之后,web.不需要xml文件:

-有些信息需要改变,或者需要配置到web.在xml文件中。一般是注释+配置文件的开发模式。

-建议使用一些不经常更改的配置注释。在配置文件中写下一些可能被修改的建议。

-我们的第一个注释:

jakarta.servlet.annotation.WebServlet

com中的代码.bjpowernode.javaweb.servletHelloServlet

package com.bjpowernode.javaweb.servlet;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebInitParam;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import javax.jws.WebParam;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;///servlet中的注解开发  33//这是servlet中的注释@WebServlet(name = "Hello",urlPatterns = {“/hello1”,“/hello2”,“/hello3”}//loadOnStartup = 1,initParams        = {@WebInitParam(name="username",value="root"),@WebInitParam(name="password",value="lzl")})public class HelloServlet extends HttpServlet {    ///无参结构方法    public HelloServlet(){        System.out.println(执行无参结构方法);    }    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        ///获得Servlet的Namee        String servletName = getServletName();        out.print("servlet name ="+servletName+"");//servlet name =Hello        //获得Servletet path        String servletPath = request.getServletPath();        out.print("servlet path ="+servletPath+"");//servlet path =/hello1        //获取初始化参数        Enumeration names = getInitParameterNames();        while(names.hasMoreElements()){            String name = names.nextElement();            String values = getInitParameter(name);            out.print(name+"="+values+"");            ///输出结果            //password=lzl            //username=root        }    }}

2.1用于Servlet类:@WebServlet,WebServlet注释中的属性是什么?33

-value属性:当注释属性名为value时,使用注释时,可以省略value属性名。

-注意:不需要写所有属性,只需要提供需要。(需要什么,用什么。)

-注:属性是一个数组。如果数组中只有一个元素,则可以省略使用该注释时属性值的大括号。

com.bjpowernode.javaweb.servletWelcomeServlet

package com.bjpowernode.javaweb.servlet;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;//@WebServlet(urlPatterns = {“/welcome1”, "/welcome2"     33// 注:当注释属性为数组,且数组中只有一个元素时,可以省略大括号。//@WebServlet(urlPatterns = "/welcome")// value属性与urlpatterns属性一致,均用于指定servlet的映射路径。//@WebServlet(urlPatterns = "/welcome")// value属性与urlpatterns属性一致,均用于指定servlet的映射路径。//@WebServlet(value = {“/welcome1”, "/welcome2"/ 如果注释的属性名是value,也可以省略属性名。//@WebServlet(value = “/welcome1”@WebServlet({"/wel", "/abc", "/def"})public class WelcomeServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        out.print(欢迎学习Servlet。");    }}

2.2注释对象的使用格式:33

-@注明名称(属性名=属性值,属性名=属性值,属性名=属性值...)

2.3利用反射机制分析类上的注释34com中的代码.bjpowernode.javaweb.servletReflectAnnotation

package com.bjpowernode.javaweb.servlet;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import java.lang.annotation.Annotation;////使用反射机制分析类上的注释   34public class ReflectAnnotation{    public static void main(String[] args) throws ClassNotFoundException {        ////使用反射机制分析类上的注释        ///获得Class对象        Class welcomeServletClass                = Class.forName("com.bjpowernode.javaweb.servlet.WelcomeServlet");        // 在此类上获得注解对象        // 首先判断这一类上是否有这个注释对象,如果有此注解对象,则获得该注解对象。//        boolean annotationPresent//                = welcomeServletClass.isAnnotationPresent(WebServlet.class);//        System.out.println(annotationPresent);        if(welcomeServletClass.isAnnotationPresent(WebServlet.class))如果这个注释存在,            ////在此类中获得注解对象            WebServlet webServletAnnotation                    = welcomeServletClass.getAnnotation(WebServlet.class);            ///在此注释中获得value属性值            String[] value = webServletAnnotation.value();            for (int i = 0; i < value.length; i++) {                System.out.println(value[i]);            }        }    }}