大坑!转发时,忘记加.jsp
导致的后果是,控制台不停地打印异常错误。到最后还报了数据库连接过多的提示。写好了关闭数据库的代码,还有重启电脑都还是一样。到最后才发现!原来没加.jsp。
遇到的问题2
总结JSP的命名经验
servlet----- 假如是全部显示列表 ---StudentListServlet
web.xml---访问URL设为listStudent
<servlet-mapping>
<servlet-name>StudentListServlt</servlet-name>
<url-pattern>/listStudent</url-pattern>
</servlet-mapping>
jsp----命名为listStudent.jsp
经验总结:访问servlet的URL 的名字 设置尽量和jsp的名字一样 ,但事实上,还是通过了servlet才转发到jsp
JSP里的模板
假如想用JSTL和超级好用的ejs语法
这2个jar包 缺一不可。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
charset=UTF-8: 告诉浏览器以 utf-8去解码
pageEncoding="UTF-8" --表示当前jsp里的代码用utf-8 编码
假如想在JSP引用bootstrap的东西,懒得以后再去找CSDN了和下载文件了
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet"
href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet">
<script
src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js">
</script>
里面的servlet和jsp的绝对路径和相对路径的总结
正常来说, esclise都是有一个项目工程名字的,假如你的j2ee工程是SMS,那么你以后访问就得是http://localhost:8080/SMS/index.html
http://localhost:8080/SMS/login 这些。
而假如你在
action="/ABC/login" -->那么它就是相当于地址栏写死,http://localhost:8080/ABC/login
假如action="listServlet" --> 假如你现在当前访问的网页是http://localhost:8080/ABC/login, 那么你一点,它就会跳到http://localhost:8080/ABC/listServlet
这些无论是
href=" ";
request.getRequestDispatcher("listStudent.jsp").forward(request,
response);
response.sendRedirect("listStudent");
都是一样的原理的:
**只要是/XXX 还是直接XXX **
以/开头代表 绝对路径
以直接文件名开始,就是相对路径
或者以 ./文件名 开始,也是属于相对路径
小细节
比较的时候把常量字符串"admin" "123"放前面,因为用户可能没有输入账号密码就提交,servlet会获取到null。 这样就规避了空指针异常的问题。
cookie
Session
这个jsessionid是应该是全球唯一的!
既无论你有没有session,只要你第一次访问一个网站时,服务器发现你是没有jsessionid的,它就会给你创建一个新的session。
所以你才能够用下面的这句话。
<%
session.setAttribute("name", "teemo");
%>
小经验
SP的隐式对象指的是不需要显示定义,直接就可以使用的对象,比如request,response
JSP一共有9个隐式对象,分别是
request,response,out
pageContext, session,application
page,config,exception
1:request,response,out 2:pageContext, session,application
3.page
4.config
6:exeption