javaweb servlet

()servlet生命周期

servlet什么时候生?第一次访问时

servlet什么时候死?web应用停止的时候

servlet存在的时候执行什么方法?第一次创建时,执行init函数初始化,每次请求会执行service函数,摧毁的时候destory会被执行

 

()一个servlet

public class ServletDemo extends GenericServlet {

 

       @Override

       public void service(ServletRequest req, ServletResponse res)

                     throws ServletException, IOException {

              // TODO Auto-generated method stub

              res.getOutputStream().write("hello".getBytes());

       }

}

()设置servlet模板

MyEclipse\Common\plugins

然后直接在该目录下搜索

com.genuitec.eclipse.wizards_9.0.0.me201108091322.jar

这个文件,不要去找,不容易找到,这是一个jar包,然后用压缩文件打开,找到里面的Servlet.java文件,修改就可以了

 

注:1、复制工程改名之后的配置跟原来的工程名都一样,需要在properties中的web更改发布目录

       2、servlet用于注册servlet  包含servlet-name:设置注册名称

              servlet-class: servlet完整类名

       3、servlet-mapping 映射一个已注册的servlet的一个对外访问路径包含servlet-name和url-pattern(对外访问路径)

       4、load-on-startup:服务器启动时候就创建servlet

 

()servlet线程安全(只有资源共享时才有安全问题)

SingleThreadModel接口

没有定义的接口叫标记接口,不可以序列化

有类继承了标记接口就可以实现序列化。servlet可以建立多个servlet

//子类在覆盖父类的方法,不能抛出比父类更多的异常

 

()SevletConfig(用于调用JDBC来操作数据库,数据不适合在程序里面写死

例如:servlet采用哪个码表,servlet连接到哪个库、servlet哪个配置文件

当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过servletConfig对象就可以得到当前servlet的初始化参数信息。

 

1、现在servlet中添加

<init-param>

       <param-name>data</param-name>

       <param-value>xxxxx</param-value>

</init-param>

2、将servlet中的信息添加得到servletConfig中

3、在函数中复写init方法:this.config = config;

4、定义变量记住servletConfig:private ServletConfig config;

5、doGet中config.getInitParameter(“data”);

6、因为父类定义好了config,可以将5中的config改为this.getServletConfig()

 

()servletContext

每个web应用都会创建一个servletContext对象,编写servlet时通过ServletConfig.getServletContext方法获得ServletContext。

多个servlet通过servletContext实现数据共享,

被称为域对象

共有4个域对象servletConfig request session page

1、获取web应用初始化参数

2、servlet的转发(注意与重定向区别:客户机一次请求,重定向客户机2次请求)

例如:将代码转给jsp输出

       RequestDispatcher rd =this.getServletContext().getRequestDispatcher(“文件路径”);

       rd.forward(request,response);

       而将数据带给jsp不能通过context域带过去,应该用request域

3、servletContext读取资源文件

 

配置文件分为两种web.xml 和 properties

没有关系的数据用properties

有关系的数据用web.xml

// servletContext读取资源文件

       private void test() throws IOException {

              InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

              Properties prop = new Properties();

              prop.load(in);

             

              String url = prop.getProperty("url");

              String username = prop.getProperty("username");

              String password = prop.getProperty("password");

              System.out.println(url+" "+username+" "+password);

       }

//servletContext的getRealPath得到资源的绝对路劲后,再通过传统留读取资源文件

public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");

              FileInputStream in = new FileInputStream(path);

              Properties prop = new Properties();

              prop.load(in);

             

              String url = prop.getProperty("url");

              String username = prop.getProperty("username");

              String password = prop.getProperty("password");

              System.out.println(url+" "+username+" "+password);

       }

 

//如果读取资源文件的不是servlet,就只能通过类装载器去读,配置文件不要太大

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

                     UserDao dao = new UserDao();

                     dao.update();

       }

 

public class UserDao {

      

       private static Properties dbconfig = new Properties();

       static{

              try{

                     InputStream in = UserDao.class.getClassLoader().getResourceAsStream("db.properties");

                     dbconfig.load(in);

              }catch(Exception e){

                     throw new ExceptionInInitializerError(e);

              }

       }

      

       public void update() throws IOException{

              System.out.println(dbconfig.getProperty("url"));

       }

}

//通过类装载的方式得到资源文件位置,传统方式读取数据,这样可以读取更新后的数据

              String path = UserDao.class.getClassLoader().getResource("db.properties").getPath();

              FileInputStream in = new FileInputStream(path);

              Properties pro = new Properties();

              pro.load(in);

              System.out.println(pro.getProperty("url"));

posted on 2014-10-28 19:59  徐异安  阅读(118)  评论(0)    收藏  举报

导航