1、JSP:
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。中文名叫java服务器页面。
下面通过一个简单的图书管理系统的例子简单介绍JSP等其他的功能。
登陆页面:
form表单的属性:method="post" 是以post的方式进行发送,οnsubmit="return login()" 如果为假值就不会继续执行action,在点击提交按钮时先触发onsubmit()函数,然后再将数据发送到Servlet执行action跳转的Servlet。herf="#login" 将会跳转到 id 值为login的地方。
2、servlet
当接受的数据发送方式为 post 时,触发doPost方法,在 dopost 的方法里调用 doGet 方法,相当于也是post方式。
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request, response);
}
Servlet.login:
通常在Servlet中进行对用户的登陆验证,数据库的查询,以及页面的转发和重定向。
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
// 获取前端的参数
String username = request.getParameter("user");
String password = request.getParameter("password");
String auto = request.getParameter("auto");
// 初始化一个udao用于数据库查询。
UserDao udao = new UserDao();
User user = udao.login(username, password);
if(user!=null){
if(auto!=null){
// 将用户名和密码存进Cookie中,用于自动登陆。
Cookie cookie = new Cookie("auto",username+"_"+password);
cookie.setPath("/");
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
}
String tag = user.getRule();
// 初始化一个session对象。将用户对象放进session中。
HttpSession session = request.getSession();
session.setAttribute("user",user);
session.setAttribute("tag","1"); // 加一条信息防止恶意打开其他页面
if("0".equals(tag)){
// 转发请求
request.getRequestDispatcher("/user?flag=select&pno=1").forward(request,response);
}else {
request.getRequestDispatcher("/admin?flag=select&pno=1").forward(request,response);
}
}else {
// 请求进行重定向
request.getRequestDispatcher("/Login.jsp").forward(request,response);
}
}
通过request.getParameter("name value"); 获取值的时候,如果遇到汉字就会乱码,对于乱码的地方用:
String name = new String(request.getParameter("name value").getBytes("ISO-8859-1"),"UTF-8");
对于复选框的多个值, 通过 request.getParameterValues(""); 方法获取一个数组。
String[] values = request.getParameterValues("name value");
存一个Cookie:
// 初始化一个Cookie对象,名字为“auto”,值为username和password
Cookie cookie = new Cookie("auto",username+"_"+password);
// 设置Cookie路径
cookie.setPath("/");
// 设置Cookie的最大存活时间,单位为秒
cookie.setMaxAge(60*60*24);
// 添加Cookie
response.addCookie(cookie);
存session:
// 初始化一个session对象
HttpSession session = request.getSession();
// 将一个值或对象加到session中
session.setAttribute("user",user);
存在请求中:
// 请求中加入一个对象或值,并设置key值
request.setAttribute("list",list);
转发和重定向的区别:
1、转发在服务器端完成的;重定向是在客户端完成的。2、转发的速度快;重定向速度慢。3、转发的是同一次请求;重定向是两次不同请求。4、转发不会执行转发后的代码;重定向会执行重定向之后的代码。5、转发地址栏没有变化;重定向地址栏有变化。6、转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成。重定向,不会共享request。
session和request的区别:
request对象的生命周期:是针对一个客户端(说确切点就是一个浏览器应用程序)的一起请求 当请求完毕之后,request里边的内容也将被释放点,而session的生命周期:也是针对一个客户端 但是却是在别人设置的会话周期内(一般是20-30分钟) session里边的内容将一直存在 即便关闭了这个客户端浏览器 session也不一定会马上释放掉的。
request和session的优点和缺点很明显 :request占用资源比较少,安全性也比较高,可是相对来说,缺乏持续性。
session则相对来说,对资源的消耗会大点,安全性相对来说也会稍微低点,可是它能实现比如会话跟踪技术。
request的作用域范围只在两个相邻页面起作用,而在三个或三个以上的页面就不行!要用session,session的作用域比request的强!
与数据库有关的操作:
在项目中数据库的地位举足轻重,大体可分为:连接数据、编写sql语句、执行sql语句并处理查询结果、关闭数据库连接。这只是一个简单的单表查询,后面还有多表查询。
public Type get(String id){
Type type = null;
try {
// 连接数据库
super.connect();
String sql = "select * from type where status=?";
// 预编译sql语句
pstmt = conn.prepareStatement(sql);
// 将第一个?的值设为id
pstmt.setString(1,id);
// 真正执行sql语句
rs = pstmt.executeQuery();
// 当有下一个查询结果时才继续执行。
while (rs.next()){
type = new Type();
// type的Status属性设置为从数据库里查询的第一条结果。
type.setStatus(rs.getString(1));
type.setContent(rs.getString(2));
}
}catch (Exception e){
e.printStackTrace();
}finally {
// 关闭数据库连接
super.closeAll();
}
return type;
}
3、JSTL(JSP标准标签库)
(1)、EL表达式:在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
1、语法结构:${expression}
${x.id}
2、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。
3、可以使用三目运算符用作判断,当比较两个字符串的值是否相同是用 ‘==’,不用equals。当使用${user.username}时相当于<%user.getUsername()%>, 当${user.username}不存在时不会报错错误<%user.getUsername()%>
(2)、taglib指令:定义一个标签库以及其自定义标签的前缀.。
使用之前需要导入jstl的jar包和一条指令:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
// test用于条件的判断
条件为真执行我
// var 就是用于迭代的变量,items 是一个可迭代的对象
我是循环体
// var是变量的名字,value是要赋的值,scope是作用于范围
在项目中用于循环生成一些表格数据:
${x.id}
${x.name}
${x.author}
${x.price}
${x.storage_time}
${x.content.content}
删除