标签:
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包
标签:
原文地址:http://www.cnblogs.com/chengzhipcx/p/4964448.html