目录
jsp本质上是java的额外封装,解析过程中优先解析java
.jsp -> .java -> .class -> jvm执行
- <%=输入内容 %> - <% java脚本 %> - <%@page 页面指令 %> - <%@include 包含指令 %>
select * from ( select a.*,rownum myr from stu a )b where myr between begin and end;
jsp 将页面显示出来 dao 去数据库取数据,处理数据 dao层:1.拿数据 2.负责处理数据 【系统的耦合性:各个模块连接的紧密度】 【三层架构】 各司其职 高内聚,低耦合
一,JSP
1.什么是JSP
是一种文件格式
写java,html,css,js
jsp本质上是java的额外封装,解析过程中优先解析java
<a href="<%="www.baidu.com"%>">
.jsp -> .java -> .class -> jvm执行
2.安装tomcat
- 默认端口 8080
- 如果出现了端口异常,修改端口
二,基本指令
- <%=输入内容 %>
- <% java脚本 %>
- <%@page 页面指令 %>
- <%@include 包含指令 %>
三,表单提交方式
- get 通过地址栏带参,参数有长度限制
- post 不通过地址栏带参,参数没有长度限制
> 文件上传的时候 必须是post,必须是多段式表单
四,JSP跳转方式
转发 forward
-
可以携带数据(请求中的)
-
地址栏不变
-
是服务器行为
重定向 redirect
-
不可以携带数据(请求中的)
-
地址栏会改变
-
是客户端行为
五,cookie和session
都可以设定存在时间,默认关闭时间是:session-30分钟,cookie-当浏览器关闭的时候
1.session 服务端存储
2.cookie 客户端存储
应用场景:
* 浏览记录 cookie
* 鉴权 session
* 存数据库里面,缓冲数据库
六,数据分页
page当前页数 rows显示条数
page:1 rows:10 1~10
page:2 rows:10 11~20
page:3 rows:10 21~30
begin(开始位置): (page-1)*rows+1
end(结束位置): page*rows
【sql】
select * from (
select a.*,rownum myr from stu a
)b where myr between begin and end;
七,文件上传
文件上传的主要操作
1.将文件保存到电脑路径中
2.将保存的电脑路径存到数据库
3.绑定tomcat映射,为你保存文件的目录加上一个访问路径
如何诞生一个不重复的名字
1.使用UUID UUID.randomUUID()
2.富文本编辑器 (把你输入的语句变成了html来保存)
八,三层架构
jsp 将页面显示出来
dao 去数据库取数据,处理数据
dao层:1.拿数据 2.负责处理数据
【系统的耦合性:各个模块连接的紧密度】
【三层架构】
各司其职
高内聚,低耦合
【结构】
表示层 服务员
业务逻辑层 biz 厨师
数据库访问层 dao 买菜的人
【调用顺序】
表示层->业务逻辑层->数据库访问层-|
|
表示层<-业务逻辑层<-数据库访问层|
【命令规则】
com.biz -> Biz接口
com.biz.impl ->Biz的接口实现类
com.dao -> Dao接口
com.dao.impl -> Dao接口的实现类
具体操作:
1.在目录下建立以下的包和类
然后再依次编写代码:
IUserBiz.java:
package com.xly.biz;
import java.util.List;
import com.xly.pojo.User;
public interface IUserBiz {
String login(User user);
List<User>queryAll();
}
UserBizImpl.java:
package com.xly.biz.impl;
import java.util.List;
import com.xly.biz.IUserBiz;
import com.xly.dao.IUserDao;
import com.xly.dao.impl.UserDaoImpl;
import com.xly.pojo.User;
public class UserBizImpl implements IUserBiz{
private IUserDao userDao=new UserDaoImpl();
public String login(User user) {
User u=userDao.login(user);
if(u==null) {
return "account not found";
}
//这里有两个对象,u是数据库带来的,user是表示层给我的
if(!u.getUserPwd().equals(user.getUserPwd())) {
return "password error";
}
return "login success";
}
public List<User> queryAll() {
return userDao.queryAll();
}
}
IUserDao.java:
package com.xly.dao;
import java.util.List;
import com.xly.pojo.User;
public interface IUserDao {
User login(User user);
List<User>queryAll();
}
UserDaoImpl.java:
package com.xly.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import com.xly.dao.IUserDao;
import com.xly.pojo.User;
import util.DBHelper;
public class UserDaoImpl implements IUserDao{
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
public List<User>queryAll(){
return null;
}
public User login(User user) {
try {
con=DBHelper.getCon();
String sql="select * from t_user where user_name=?";
ps=con.prepareStatement(sql);
ps.setString(1, user.getUserName());
ps.setString(2, user.getUserPwd());
rs=ps.executeQuery();
if(rs.next()) {
//将信息赋值给user对象
User u=new User();
u.setUserName(rs.getString(2));
return u;
}
} catch (Exception e) {
}finally {
DBHelper.close(con, ps, rs);
}
return null;
}
}
User.java:
package com.xly.pojo;
public class User {
private Integer userId;
private String userName;
private String userPwd;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public User() {
// TODO Auto-generated constructor stub
}
public User(Integer userId, String userName, String userPwd) {
this.userId = userId;
this.userName = userName;
this.userPwd = userPwd;
}
}
DBHelper:
package util;
import oracle.jdbc.driver.OracleDriver;
import java.sql.*;
/**
* @author harrison
* @version v1.0
* @create 2022-04-04@星期一
* @Description {自定义描述}
**/
@SuppressWarnings("all")
public class DBHelper {
//加载驱动
static{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//定义链接字符串
private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
//获得链接
public static Connection getCon() {
try {
return DriverManager.getConnection(URL,"scott","tiger");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//关闭资源
public static void close(Connection con,PreparedStatement ps, ResultSet rs) {
try {
if (con!=null&&!con.isClosed()) {
con.close();
}if(ps!=null) {
ps.close();
}if(rs!=null) {
rs.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
doLogin.jsp:
<%@page import="com.xly.biz.impl.UserBizImpl"%>
<%@page import="com.xly.biz.IUserBiz"%>
<%@page import="com.xly.pojo.User"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//dologin是表示层
//需要取到用户的数据
String username=request.getParameter("username");
String password=request.getParameter("password");
//将数据封装到实体类中
User user=new User(0,username,password);
//判断用户是否登录
//里氏替换原则 可以用接口来约束实现类
//面向接口编程:
//1.先编写接口
//2.实现该接口
//3.使用里氏替换原则来声明接口对象
//4.调用接口的方法
IUserBiz userBiz=new UserBizImpl();
//这里的user是表示层给他的
String msg=userBiz.login(user);//这里的login调用的是Biz实现类的方法(UserBizImpl)
%>
<h1><%=msg%></h1>
index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="doLogin.jsp" method="post">
<p><input type="text" name="username"></p>
<p><input type="text" name="password"></p>
<p><button>登录</button></p>
</form>
</body>
</html>
效果图:
今天的分享就到此为止啦,精彩下期继续!