`
insertyou
  • 浏览: 867189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Servlet开发(1)-----基础及MVC设计模式

 
阅读更多


一、Servlet介绍


Servlet简单的说就是一个Java程序,目的和Javabean差不多,为了使得JSP页面中代码简洁、清晰;

Servlet也是放在 WEB-INF/classes/中,并在web.xml中配置如下形式:


<servlet>

<servlet-name></servlet-name>

<servlet-class></servlet-class>

</servlet>

<servlet-mapping>

<servlet-name></servlet-name>

<url-pattern></url-pattern>

</servlet-mapping>


Servlet可以处理客户端传来的请求,即request,并且可以返回给客户端回应,即response,这个操作通过

public voidservice(HttpServletRequest req,HttpServletResponse resp)throws ServletExeption,IOException{}完成;

一般如果我们要自定义Servlet,则需要继承HttpServlet类,并覆盖相应的方法即可;


二、Servlet的结构


Servlet生命周期为:加载-->初始化--->服务--->销毁--->卸载;

继承HttpServlet后,可以覆写以下方法:

1.public void init()throws ServletException{} //初始化Servlet

2.public void init(ServletConfig config)throws ServletExeption{} //初始化Servlet,可以得到配置信息

3.public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletExeption,IOException{} 当get方式传递,则调用此方法

4.public void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletExeption,IOException{}当post方法传递,则调用此方法

5.public voidservice(HttpServletRequest req,HttpServletResponse resp)throws ServletExeption,IOException{}

6.public void destroy(){} //销毁时调用

注意:

1. 当1,2同时出现时,2有较高优先级;

2.当3或4和5同时出现时,5具有较高优先级;

3 .PrintWriter writer = resp.getWriter();可以获得输出流;


三、Servlet常见问题


1.在init方法中,通过config.getInitParameter()方法取得配置信息;

2.通过req.getSession()取得Session对象,通过super.getServletContext();取得application对象;


四、Servlet跳转


1.客户端跳转:resp.sendRedirect("....");

2.服务器跳转:req.getRequestDispatcher("hello.jsp").forward(req,resp);能够跳转到hello.jsp中;

注意:

1.客户端跳转属性只能通过session传递,不能通过request传递;


五、MVC设计模式


在之前我们讲过JSP+JAVABEAN的DAO开发模式,这个适用于小型开发;

MVC(Model View Control)是一种以Servlet为核心的开发模式,流程如下:


步骤如下:

1.客户端发送请求给Servlet;

2.Servlet接收请求后处理,并可以调用JavaBean;

3.Servlet返回结果给JSP显示;

因此JSP只是用于显示,而JavaBean只和Servlet通信;

注意:在MVC中,使用requestDispatcher的机会很多,我们都是通过这个类进行服务器跳转的;

六、过滤器


实现javax.servlet.Filter接口;

一般客户端发出请求后会交给Servlet;如果过滤器存在,则客户端发出的请求都是先交给过滤器,然后交给Servlet;

我们可以完成一些在执行Servlet之前必须要做的事,比如request.setCharacterEncoding("GB2312");

必须实现以下方法:

1.public void init(FilterConfig config) throws ServletException{}

2.public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){}

3.public void destroy(){}

注意:

1.init方法在Web容器初始化时就会调用;

2.doFilter的参数是ServletRequest和ServletResponse而不是Http的;

3.FilterChain含有public void doFilter(ServletRequest req,ServletResponse resp){}

4.一般代码形式如下:

public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){

chain.doFilter(req,resp);//执行Servlet操作;

}

则这个函数会调用两次,一次是执行chain.doFilter之前,一次是执行chain.doFilter()之后;

写完过滤器后,我们必须要限制过滤器调用的范围,即域名为多少时会调用过滤器,我们在web.xml 中进行配置;

<filter>

<filter-name></filter-name>

<filter-class></filter-class>

</filter>

<filter-mapping>

<filter-name></filter-name>

<url-pattern></url-pattern><!--过滤器应用的范围,如果为/*,则如果域名设置形如/a 或/abc等都会调用过滤器-->

</filter-mapping>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics