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