`
liuting37
  • 浏览: 9784 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

servlet基础

 
阅读更多

一、servlet基础

       在web开发的过程时,编写jsp页面可实现动态页面。原理是将java代码嵌入到html代码中,这样一个页面中,既要编写逻辑代码又要编写显示标记代码,往往篇幅很长。而且在其中一部分需要改动的时候,往往会牵扯到其他的地方,使修改变得很麻烦,代码可读性也很差。

       我们希望能将java代码和html代码进行分离,并按功能分开存放,使代码结构清晰,增强可读性。

       servlet就这样产生了,它是连接前端和后台的中间部分,可以看做是jsp的底层,jsp中的java代码是在底层实现了这样一个类之后进行运行的。现在我们直接编写这个类,就可以了。

        将java代码分离出来之后,可以进行重复调用,也可以实现对很多页面的统一处理。

 

什么是servlet?

       servlet是能完成一个功能的一个类,它有4个方法,初始化方法,销毁方法,doGet(),doPost(),用来实例化。它的访问方法有,直接访问,表单提交。直接访问是get方式,表单提交可以设置为get方式或者post方式。

编写servlet:

1.继承HttpServlet类

2.实例化doPost()、doGet()方法,完成servlet的实质功能。

配置servlet:

写道
<servlet>
<servlet-name>buyServlet (给servlet取一个名字)</servlet-name> 
<servlet-class>servlet.buyServlet  (servlet类的路径)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>buyServlet  (跟上面一样的名字)</servlet-name>
<url-pattern>/buyServlet (写一个访问路径)</url-pattern>
</servlet-mapping>
 

    访问下面这个访问路径就可以调用到上面那个类了。

什么是过滤器?

   过滤器就是用来对多个页面进行统一处理的的类。

编写过滤器:

   1.实现filter接口

写道
import javax.servlet.Filter;
public class testFilter implements Filter {
}
 

 

   2.重写doFilter方法

写道
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
           response.setCharacterEncoding("UTF-8");
           PrintWriter out = response.getWriter();
           out.println("中国字哦~");
           chain.doFilter(request, response);
}
 

 

配置过滤器:

写道
<filter>
<filter-name>encodingFilter (取一个名字)</filter-name>
<filter-class>filter.encodingFilter (过滤器类的路径)</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter (跟上面相同的名字)</filter-name>
<url-pattern>/buyBasket.jsp (写要顾虑的页面的路径)</url-pattern>
</filter-mapping>
 

   与servlet配置的不同之处,仅在于,<url-pattern></url-pattern>标签中放置的是,需要被过滤的路径,并且这个路径可以是一个包的形式比如/*。

什么是监听器?

       监听器是用来编写,当页面中的某些动作发生时,需要发生的伴随处理的。

编写监听器:

    1.实现HttpSessionListener接口,当然还有HttpSessionAttributeListener接口,ServletContextListener接口,ServletContextAttributeListener接口。分别用于监听不同的事件。

写道
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener{
}
 

    2.重写方法

写道
public void sessionCreated(HttpSessionEvent event) {
// TODO Auto-generated method stub
//对session进行初始化;
HttpSession session = event.getSession();
HashMap<String,book> books = new HashMap<String,book>();
session.setAttribute("books",books);
session.setAttribute("money",null);
}
  

 

配置监听器:

写道
<listener>
<listener-class>listener.SessionListener</listener-class>
</listener>
 

    监听器的配置非常简单,因为它是对内置的几个对象的动态的监听,不需要设置相关的url。

二、开发一个例子中注意的问题

        开发一个购物车的例子,例子中存在三张页面。(1)显示所有图书页面(每本书显示书号,书名,单价,后面包含购书按钮);(2)购买某种书页面(显示该书书名,价钱,购书数量输入框,提交按钮);(3)购物车页面(显示所有别添加到购物车中的书单,包含书号,书名,单价,数量,还有购书总价钱)。

例子中包含两个servlet,初始化InitServlet,BuyOneBookServlet。

        数据库的设计,考虑到三个页面的需要,图书的数据库中包含书号,书名,单价,数量四个字段。

        在各个页面,和前后台的数据传递中,如果用session传值的话,需要(1)查询出所有的图书列表”allbook“(2)放入购物车的所有图书的列表”books“(3)购物车中图书的总价钱”money“(4)购单类书信息”book“。session中可存放的变量的种类是可以不一样的,但是对于列表类的变量,我们便于索引就采用了HashMap类型。

        在servlet之前放置了encodingFilter用来过滤各页面的编码。

        在filter中要注意的问题,必须把编码设置response.setCharacterEncoding("")放在所有request.getWriter()之前,不然会影响整个网页页面的编码。

分享到:
评论
1 楼 沈冠军 2013-10-20  
相比前面的两篇进步挺大的了,但是对servlet了解的还是不够,比如servlet的本质是什么?它什么能和前端的页面进行通信呢,是通过socket、http还是其它的方式?另外就是它的四个方法什么时候会被调用?比如销毁方法是不是请求完了就销毁了,还是有一个缓冲池呢,是不是每个请求都会创建一个实例。建议通过在这几个方法里面都输出log看看

相关推荐

Global site tag (gtag.js) - Google Analytics