JavaEE学习01--简述

servlet

servlet是一个接口,现在开发一般是通过继承HttpServlet来实现,这个类或者说接口的主要功能就是提供http通信功能,servlet可以指定一个访问的url,在servlet被成功部署到web服务器上面之后,以http协议的格式向这个url发送请求将会在webapp里面生成一个httpServletRequest对象来处理请求,生成一个HttpServletResponse对象来进行响应,对于请求,最重要的是怎么获取请求的参数,这样获取并响应:

    /**
     * 以get方式提交的请求将会在这个函数里面处理
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取参数
        String param=request.getParameter("para");
        //生成响应,response.getWriter()返回一个printWriter对象,和System.out类型相同
        response.getWriter().println("");
    }

    /**
     * 以post方式提交的请求将会在这个函数里面处理
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取参数
    }

filter

filter可以拦截请求,是在HttpServletRequest对象生成之后,进行响应之前调用,也可以在响应之后调用,可以看成对请求的响应是在doFilter()里面进行的,所以这个并不会拦截到forward,最经典的应用是利用filter拦截用户的每次请求,看是否登录,未登录就重定向到其它页面,filter需要配置拦截规则,在Servlet3.0里面用注解可以实现

@WebFilter(filterName = "AuthorityFilter", urlPatterns = { "/" })

接下来是代码:

package liujie.jee.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Servlet Filter implementation class AuthorityFilter
 */
@WebFilter(filterName = "AuthorityFilter", urlPatterns = { "/" }, initParams = {
        @WebInitParam(name = "encoding", value = "GBK"),
        @WebInitParam(name = "loginPage", value = "/login.jsp"),
        @WebInitParam(name = "proLogin", value = "/proLogin.jsp") })
public class AuthorityFilter implements Filter {

    private FilterConfig config;

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        this.config = null;
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        String encoding = config.getInitParameter("encoding");
        String loginPage = config.getInitParameter("loginPage");
        String proLogin = config.getInitParameter("proLogin");
        // 设置字符集
        request.setCharacterEncoding(encoding);
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpSession session = httpServletRequest.getSession(true);
        String requestPath = httpServletRequest.getServletPath();
        // 如果session范围内的user为null,即表明没有登录
        // 而用户请求的既不是登录界面也不是登录前界面
        if (session.getAttribute("user") == null
                && !requestPath.endsWith(loginPage)
                && !requestPath.endsWith(proLogin)
                && !requestPath.endsWith("/login")) {
            // froward 到登录页面
            System.out.println("没有登录");
            System.out.println(requestPath);
            request.setAttribute("tip", "您还没有登录");
            request.getRequestDispatcher(loginPage).forward(request, response);
        } else {
            System.out.println("已经登陆");
            chain.doFilter(request, response);
        }
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        this.config = fConfig;
    }

}

先写到这里,明天写session和application

猜你喜欢

转载自blog.csdn.net/fate_killer_liu_jie/article/details/47320985
今日推荐