一、 初始JSP
HTML + Java代码 = JSP
1 声明 <%! %> 可以编写变量声明 方法声明
2 脚本 <%%> 可以编写变量声明 调用方法等
3 表达式 <%= %> 可以用于向页面输出内容 能调用有返回值的方法和直接输出一些变量 结尾不能写;号
二、重定向和转发
转发 相对路径
request.getRequestDispatcher("index.jsp").forward(request,response);
重定向 绝对路径
response.sendRedirect(request.getContextPath()+"/login.jsp")
使用request.getContextPath()获取到项目根路径
什么是项目根路径
localhost:8080/bus/login/login.jsp 项目根路径就是 bus
重定向与转发区别
1、重定向 可以跳转到任意的资源地址,但是转发是服务器内部的资源跳转,智能跳转到服务器内部的一些页面
2、转发的请求地址不发生改变,重定向的地址变成对应的跳转地址
3、请求转发是一次请求的多次跳转,重定向是开启新的请求,与之前的请求无关。
4、在请求中携带的setAttribute信息,只能保证在同一个请求中有效,因此使用SetAttribute的时候,应该是转发
三、传递信息
request.setAttribute("error","用户名或者密码错误")
获取到传递的信息
Object error = request.getAttribute("error")
四、中文乱码问题
在Tomcat 8.0中GET请求解决了乱码问题,但是POST还是存在中文乱码
Tomcat8.0以前解决中文乱码
方式1: 首先将内容以ISO解码成字节,然后再将以UTF8将其进行编码
String userCode = request.getParameter("userCode")
//解码
byte[] userCodeByte = userCode.getBytes("ISO-8859-1");
//编码
userCode = new String(userCodeByte,"UTF-8");
方式2: 仅对POST请求有效,在最前面写
request.setCharacterEncoding("UTF-8");
String userCode = request.getParameter("userCode");
方式3:修改Tomcat中的conf中的server.xml文件,将ISO-8859-1 改为 UTF-8
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
五、cookie和session
登录成功后,在主界面要显示当前登录的用户名
可以将数据存储在Session域中,然后从session中取出
session.setAttribute(key,value);
Session也是JSP的内置对象,他表示一次会话,多次请求多次响应的这整个过程就是一次会话。
每次会话都有一个会话id,可以通过getId获取
会话的生命周期:只要没有完全关闭浏览器都是同一个会话。不同浏览器的会话不一样。默认会话有效期为30分钟
修改Tomcat中的web.xml 修改session,可以改变时间,或者在自己的web.xml中修改session,优先级会比之前的高
如果关闭浏览器之后,怎么保证之前的登录有效呢?
cookie是浏览器用于在本地存储一些网站状态的。
Cookie cookie = new Cookie("loginUserName",username);
cookie.sexMaxAge(60);
response.addCookie(cookie);
Cookie与session区别
1、 Cookie是浏览器端的,session是服务器端的
2、生命周期不同。session是从客户端第一次请求开始,有服务器分配,当浏览器完全关闭或者无操作时销毁。cookie是由服务器响应回来之后才开始生效的。
3、 session可以存储Object类型的值,Cookie只能存储String类型
六、application对象
统计网站访问次数
步骤:先获取到当前网站的历史统计次数,然后自增,如果不能获取到,则初始化统计次数。
Object obj = application.getAttribute("ACCESS_COUNT");
int count;
if(obj == null){
count = 1;
} else {
count = 1 + (Integer)obj;
}
application.setAttribute("ACCESS_COUNT",count);
七、JSP中写Java代码
遍历一个数组然后展示
第一种方式
<select name="userRole">
<option value="0"> --请选择-- </option>
<%
RoleDao roleDao = new RoleDaoImpl();
//获取到关于Role的一个list
List<Role> roleList = roleDao.getList();
//遍历
for (Role role : roleList) {
String str = String.format("<option value='%s'>%s</option>",role.getId(),role.getRoleName());
}
</select>
第二种方式
<select name="userRole">
<option value="0"> --请选择-- </option>
<%
RoleDao roleDao = new RoleDaoImpl();
//获取到关于Role的一个list
List<Role> roleList = roleDao.getList();
//遍历
for (Role role : roleList) {
%>
<option value="<%=role.getId()%>"><%=role.getRoleName()%></option>
<%
}
%>
</select>