在js函数里嵌套的java代码即使不被调用也会执行
    JS代码是本地的静态的,JAVA代码是服务器的动态的。
    实例一、Cookie的增删
    这样写是无法达到在点击时触发删除的效果的,因为嵌套的java代码一定会被执行:

    1. <script type="text/javascript">
    2. function del() {
    3. <%
    4. Cookie[] cookies = request.getCookies(); //在js函数里嵌套的java代码即使不被调用也会执行
    5. if(cookies!=null){
    6. for(Cookie cookie:cookies){
    7. if(cookie.getName().equals("autologin")){
    8. cookie.setMaxAge(0); //函数即使没被调用cookie也会被设为0
    9. response.addCookie(cookie);
    10. }
    11. }
    12. }
    13. %>
    14. }
    15. </script>
    16. <a href="#" onclick=del()> </a>

    实例二、Session的增删 (同上会自动执行)

    1. function exitSystem()
    2. {
    3. var ok = confirm("您确定要退出该系统吗?");
    4. if(ok){
    5. <%session.removeAttribute("user");%>
    6. }
    7. window.close();
    8. }
    9. <a href="#" onclick=exitSystem()> </a>

    问题:包含这个js的页面,函数没运行,但是session中的user被清除了。

    分析: <%session.removeAttribute(“user”);%> 是在服务端执行的,而js是在浏览器端执行的。流程:访问服务器-》服务端运行Java代码,生成静态内容-》返回给客户端浏览器-》浏览器展示并运行js代码,也就是session清除user属性的操作在服务端已经执行了,这才会导致明明登录了,session中却没有user的问题。

    解决方法:用location.href或者window.location跳转到另一个处理页面
    在没有掌握其他技术的情况下,最好的方法便是jsp页面和js页面分开写,通过跳转来实现。分开写

    1. function exitSystem()
    2. {
    3. var ok = confirm("您确定要退出该系统吗?");
    4. if(ok){
    5. location.href="${pageContext.request.contextPath}/removeUser"; //通过跳转到后台的代码里来删除数据
    6. }
    7. window.close();
    8. }

    jsp
    在JS函数里嵌套JAVA的问题 - 图1
    exitRegister.jsp
    在JS函数里嵌套JAVA的问题 - 图2
    在welcome.jsp的js函数中直接跳转到exitRegister.jsp。由exitRegister.jsp来实现session的删除和跳转回登录首页。(cookie同理)
    jsp页面:

    1. <script type="text/javascript">
    2. function del() {
    3. location.href="${pageContext.request.contextPath}/FormServlet";
    4. window.close();
    5. }
    6. </script>
    7. <p>欢迎您!您已登录 <a href="#" onclick=del()>点击退出</a></p>

    FormServlet页面:

    1. Cookie[] cookies = request.getCookies(); //Cookie在这是可以正常删除的,但是Session对象可能不行
    2. if(cookies!=null){
    3. for(Cookie cookie:cookies){
    4. if(cookie.getName().equals("autologin")){
    5. out.println((String) cookie.getValue());
    6. cookie.setMaxAge(0);
    7. response.addCookie(cookie);
    8. }
    9. }
    10. }
    11. response.sendRedirect("/login.jsp");

    分页面处理就可以在想用的时候用