zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    gitlab 国内镜像安装
    docker 安装和启动redis
    jenkins 国内镜像更新地址
    docker 安装 jenkins
    docker 使用阿里云镜像加速
    '
    windows/linux 命令可以用符号连接执行
    思科访问控制列表优先级
    交换机泛洪
    虚拟机floppy0
  • 原文地址:https://www.cnblogs.com/dongye/p/3242111.html
Copyright © 2011-2022 走看看