一,jsp,servlet基础知识
1,jsp有一些内置对象,常用的有:
out(PrintWriter),request(HttpServletRequest),response(HttpServletresponse),session(HttpSession),application(ServletContext)
注意:建议html和java代码分开。
2,<%@ include file="要包含的页面路径" %>,这种叫静态包含。
<jsp:include page="要包含的页面路径" /> ,这叫做动态包含。
静态包含:导入文件会先被编译成html文件才进行导入。(会编译成一个servlet)
动态包含:(多个servlet,运行的时候包含进来)不进行任何编译,直接将要导入的文件原样导入,然后在被导入页面进行编译。
最佳实践:开发中90%使用静态包含。因为使用动态包含效率低而且有可能会出现变量的重名。其他比如权限用动态。
3,如果希望在不同页面中传递对象,可以通过xx.setAttribute("xx",obj)完成设置,可以通过xx.getAttribute("xx",obj)来接收。
可以传递对象的内置对象有如下一些:
.pageContext(对于servlet而言没有)
当前页面存在,当发生跳转之后数据丢失。
.request(HttpServletRequest)
当前页面存在,服务器跳转存在,客户端跳转不存在
.session(HttpSession)
只有浏览器关闭session才会丢失。否则一直存在
.application(ServletContext)
只要服务器没有重启就一直存在
使用原则:
能用pageContext就不用request,能用request就不用session,能用session就不用application。
重定向response.sendRedirect,跳转之后仍会执行完剩下的代码才进行跳转。
一定注意:在response.sendRedirect后加上 return;不能通过参数传中文。
4,解决乱码问题,使用filter
1 <filter> 2 <filter-name>CharEncoding</filter-name> 3 <filter-class>tk.dongyeblog.shop.filter.CharFilter</filter-class> 4 <init-param> 5 <param-name>encoding</param-name> 6 <param-value>UTF-8</param-value> 7 </init-param> 8 </filter> 9 <filter-mapping> 10 <filter-name>CharEncoding</filter-name> 11 <url-pattern>/*</url-pattern> 12 </filter-mapping>
定义filter实现Filter接口。通过request.setCharacterEncoding(encoding);设置编码。
1 @Override 2 public void doFilter(ServletRequest request, ServletResponse response, 3 FilterChain chain) throws IOException, ServletException { 4 request.setCharacterEncoding(encoding); 5 chain.doFilter(request, response); 6 7 }
1 @Override 2 public void init(FilterConfig cfg) throws ServletException { 3 String e = cfg.getInitParameter("encoding"); 4 if(e==null || "".equals(e)){ 5 encoding = "UTF-8"; 6 }else{ 7 encoding = e; 8 } 9 }
通过<init-param></init-param>来设置初始化编码。
5,判断是否登录。如果未登录不让访问admin目录
web.xml配置
1 <filter> 2 <filter-name>AdminCheckFilter</filter-name> 3 <filter-class>tk.dongyeblog.shop.filter.AdminCheckFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>AdminCheckFilter</filter-name> 7 <url-pattern>/admin/*</url-pattern> 8 </filter-mapping>
1 @Override 2 public void doFilter(ServletRequest request, ServletResponse response, 3 FilterChain chain) throws IOException, ServletException { 4 HttpServletRequest req = (HttpServletRequest)request; 5 HttpServletResponse resp = (HttpServletResponse)response; 6 HttpSession session = req.getSession(); 7 User u = (User)session.getAttribute("loginUser"); 8 if(u==null){ 9 resp.sendRedirect(req.getContextPath()+"/loginInput.jsp"); 10 } 11 chain.doFilter(request, response); 12 }