jsp&servlet入门小项目--留言管理

一,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     }
原文地址:https://www.cnblogs.com/dongye/p/3242111.html