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.servletHelloServletpackage 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.servletWelcomeServletpackage 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.servletReflectAnnotationpackage 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]); } } }}