Servlet技术栈要点

上次说道tomcat就是一个成品web服务器,他的底层应该是用socket接口实现了连接,然后绑定网址\监听,然后又读取数据.

再看tomcat的体会_数字公民某杨的博客-CSDN博客

然后又把数据包装成request对象以及response对象

这让tomcat看上去更像一台机器,里面装什么具体内容由开发者来决定.也像一个饭店,卖什么风格的菜由开饭店的人来决定.

具体什么菜,其实就是你开发什么样的servlet.

作为一个web应用来说,有很多sevlet\jsp等等的材料,其中servlet是核心的服务内容体现.

当一个开发者开发了很多servlet,要安装到tomcat中,首先需要编译成class文件,然后把这些文件放到webapps文件夹.这样启动tomcat的时候,这些servlet才会投入使用.

这有点像c语言中程序的运行.很多时候运行的程序不仅仅包括你刚写的代码,也包括系统中已经有二进制格式的程序,例如printf函数,c语言中把这个叫做链接.应该说所有程序应该都叫链接,有这么一步.

所以把servlet的class文件放在webapps,就好像c语言中的链接一样.

在c语言中是有个命令叫做link ,那么在tomcat中,servlet代码与tomcat容器的"link"接口,就是告诉tomcat,这里有servlet,方式是两种,一个是在web.xml文件中写上servlet标签(servlet class ,mapping),或者用注解方式,在servlet的类上面加上@Webservlet.

每个servlet都有个ServletConfig对象,在这个对象里面可以配置一些要求tomcat对servlet采取一些预先的配置措施,例如启动顺序,loadonstartup,initpm等等.

//获取ServletConfig
        ServletConfig servletConfig = this.getServletConfig();
        String value1 = servletConfig.getInitParameter("key1");
        String value2 = servletConfig.getInitParameter("key2");
        System.out.println(value1);
        System.out.println(value2);

除了servletconfig对象,还有对每个web应用(所有servlet\jsp,listener等等)都有个ServetContext,这是一个全局唯一的配置.可以对所有servlet作一些统一的配置.

@WebServlet("/attr.do")
public class ServletContextAttrServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("key","BJ");
        servletContext.setAttribute("key","IT");
        servletContext.removeAttribute("key");
    }
}

filter,过滤器,在请求到达servlet之前可以预先作一些处理和筛选(例如判断是否登陆),设置一些请求的中文编码格式的等等.filter像servlet一样可以在web.xml中作配置,或者用@WebFilter方式。

@WebFilter("/*")
public class AnnotationFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println(" Annotation Filter....");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}

Listener对象,可以实现对ServletContext, HttpRequest, 还有HttpSession三个对象的监听。这三个对象的产生、修改、销毁等变化,都可以根据需要获取有关信息。

public class HttpServletRequestLifecycleListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("----------Start requestDestroyed------------");
        System.out.println((HttpServletRequest)sre.getServletRequest());
        System.out.println("----------End requestDestroyed------------");

    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("----------Start Initialized------------");
        System.out.println((HttpServletRequest)sre.getServletRequest());
        System.out.println("----------End Initialized------------");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值