JavaWeb:Servlet注解
Servlet注解jakarta.servlet.annotation.WebServlet@WebServlet 在Servlet类上使用WebServlet注解中存在的属性:name属性:用来指定Servlet的名字。等同于:<servlet-name>urlPatterns属性:用来指定Servlet的映射路径。可以指定多个字符串。等同于:<url-pattern>l
·
Servlet注解
jakarta.servlet.annotation.WebServlet
@WebServlet 在Servlet类上使用
WebServlet注解中存在的属性:
- name属性:用来指定Servlet的名字。等同于:
<servlet-name> - urlPatterns属性:用来指定Servlet的映射路径。可以指定多个字符串。等同于:
<url-pattern> - loadOnStartUp属性:用来指定在服务器启动阶段是否加载该Servlet。等同于:
<load-on-startup> - value属性:当注解的属性名是value的时候,使用注解的时候,value属性名是可以省略的。
- 注意:不是必须将所有属性都写上,只需要提供需要的。如果属性是一个数组,且数组中只有一个元素,使用该注解的时候,属性值的大括号可以省略。
注解对象的使用格式:
- @注解名称(属性名=属性值, 属性名=属性值, …)
注解的使用:
@WebServlet(name = "hello", urlPatterns = {"/hello1","/hello2"}, //loadOnStartup = 1,
initParams = {@WebInitParam(name = "username", value = "root"), @WebInitParam(name="password", value = "123")})
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 Name
out.print("servlet name = " + getServletName() + "<br>");
// 打印Servlet Path
out.print("servlet path = " + request.getServletPath() + "<br>");
// 获取初始化参数
Enumeration<String> names = getInitParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = getInitParameter(name);
out.print(name + " = " + value + "<br>");
}
}
}
//@WebServlet(urlPatterns = {"/welcome1","/welcome2"})
// 这个value属性和urlPatterns属性一致,都是用来指定Servlet的映射路径的
//@WebServlet(value = {"/welcome1","/welcome2"})
// 属性只有一个的写法
//@WebServlet(value = "/welcome") // 写法一
@WebServlet("/welcome") // 写法二
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("doGet...");
}
}
通过放射机制解析@WebServlet注解
public class ReflectAnnotation {
public static void main(String[] args) throws ClassNotFoundException {
// 使用放射机制解析@WebServlet注解
// 获取类Class对象
Class<?> welcomeServletClass = Class.forName("cn.lwx.javaweb.AServlet.WelcomeServlet");
// 获取类上的注解对象,先判断存不存在
/*boolean annotationPresent = welcomeServletClass.isAnnotationPresent(WebServlet.class);
System.out.println(annotationPresent);*/
if (welcomeServletClass.isAnnotationPresent(WebServlet.class)) {
// 获取注解对象
WebServlet webServletAnnotation = welcomeServletClass.getAnnotation(WebServlet.class);
String[] value = webServletAnnotation.value();
for (int i = 0; i < value.length; i++) {
System.out.println(value[i]); //welcome
}
}
}
}
使用模板方法设计模式解决写的Servlet类很多的问题
// 模板类
@WebServlet({"/dept/list","/dept/save",...})
//@WebServlet("/dept/*")
public class DeptServlet extends HttpServlet {
// 模板方法
// 重写service方法
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取servlet path
String servletPath = request.getServletPath();
switch (servletPath) {
case "/dept/list":
doList(request,response);
break;
case "/dept/save":
doSave(request,response);
break;
...
default:
break;
}
}
private void doList(HttpServletRequest request, HttpServletResponse response) {
}
private void doSave(HttpServletRequest request, HttpServletResponse response) {
}
...
}
更多推荐



所有评论(0)