重温servlet①

本文深入解析Servlet的工作原理,包括其单例特性、线程安全性及配置方式。详细介绍了如何通过web.xml进行初始化设置,并探讨了常见HTTP状态码含义。此外,还提供了应用ServletContext对象进行数据传递的具体实例。

Servlet是单例的,是线程不安全的。比较灵活,但是容易会使两个线程产生错误

类由我们自己来写,对象由服务器生成,方法由服务器自己调用。

 

一个servletconfig对象对应着一段web.xml中的servlet的配置信息。

可以获取到servletname --getServletName

获取servlet的上下文 --getServletContext

都是接口 实现类都是tomcat提供的。

获取初始化参数 --getinitparameter(String name)

 

在web.xml里面配置初始化参数

<servlet>

        <servlet-name>AServlet</servlet-name>

        <servlet-class>com.pcx.servlets.AServlet</servlet-class>

 

        <init-param>

            <param-name>p1</param-name>

            <param-value>v2</param-value>

        </init-param>

        <init-param>

            <param-name>p2</param-name>

            <param-value>v2</param-value>

        </init-param>

    </servlet>

 

    <servlet-mapping>

        <servlet-name>AServlet</servlet-name>

        <url-pattern>/AServlet</url-pattern>

    </servlet-mapping>

在servlet初始化的时候通过servletConfig获取到这些参数

    @Override

    public void init(ServletConfig servletConfig) throws ServletException {

        System.out.println("init...");

        System.out.println(servletConfig.getInitParameter("p1"));

        System.out.println(servletConfig.getInitParameter("p2"));

        

        Enumeration es=servletConfig.getInitParameterNames();

        while(es.hasMoreElements()){

            System.out.println(es.nextElement());

        }

    }

Service(ServletRequest req,ServletResponse res) 请求 响应 每请求一次调用一次

4开头的错误是客户端的错误

404 访问的路径找不到

405 找不到处理的请求方式doPost或者doGet

200正常

304重定向

500 服务器端程序出现错误

 

 

不要再servlet里面创建成员,尽量使用局部变量。

可以创建只读状态成员。

 

让服务器启动的时候就创建色servlet

    在<servlet>中配置<load-on-startup>,其中配置一个数字(非负的整数)。

url-pattern 可以有多个。

可以在配置路径的时候给出通配符

路径匹配/servlet/*

类型匹配*.Do

/*匹配所有

*只能在两端宝宝不能出现在中间。

 

Web.xml文件的继承

Conf 目录下的web.xml文件的父文件。

404 default

Session的存活时间

每一中文件格式都对应一个mime类型

 

 

 

一个项目只有一个servletContext对象!application 域对象 --》传递数据

我们可以在对个servlet中来获取这个唯一对象,使用它可以给多个servlet传递数据!耦合度低了。 高内聚 低耦合

与天地同寿!这个对象与tomcat一块启动一块销毁。

可以死而复生。

域对象内部其实是一个map。

 

小练习:

记录访问量:

public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        ServletContext app=this.getServletContext();

        Integer count=(Integer) app.getAttribute("count");

        if (count==null) {

            app.setAttribute("count", 1);

        }else {

            app.setAttribute("count", count+1);

        }

        PrintWriter pw=response.getWriter();

        pw.print("<h1>"+count+"</h1>");

    }

 

访问类路径下的资源文件

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

//        ClassLoader cl=this.getClass().getClassLoader();

        //相对于classes路径

//        InputStream is=cl.getResourceAsStream("com/pcx/servlets/a.txt");

        //相对于class文件

        InputStream is=this.getClass().getResourceAsStream("a.txt");

        //如果加上/则相对于classes目录下 linux系统相似

//        InputStream is=this.getClass().getResourceAsStream("/a.txt");

        String s=IOUtils.toString(is);

        System.out.println(s);

    }

需要加入commons-io-1.4.jar包

图片生成:

public class Demo2 {

    public static void main(String[] args) throws FileNotFoundException, IOException {

        VerifyCode vc=new VerifyCode();

        BufferedImage bi=vc.getImage();

        System.out.println(vc.getText());

        VerifyCode.output(bi, new FileOutputStream("b.jpg"));

    }

}

需加入itcast-tools-1.4.2.jar包

转载于:https://www.cnblogs.com/chengzhipcx/p/4964448.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值