欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-02 17:22:58
...


一、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为核心的开发模式,流程如下:


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

步骤如下:

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>