Jsp&Servlet

环境配置

陆陆续续,有很多的博客已经很详细了,在这里我就不赘述了。

JSP页面元素

<%
局部变量,java语句
%>
<%!
%>
<%=输出表达式%>

page指令:

<%@ page language=“java”–>jsp页面所使用的语言
import–>导入包
contentType=“text/html; charset=UTF-8”–>浏览器解析jsp的编码
pageEncoding=“UTF-8”%–>jsp文件自身编码 jsp–>java>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
public String bookName;//全局变量
public void init(){
	Date date=new Date();
	bookName="java书"+date ;
}
%>
<%
String name="Zhangsan";
out.print("<font color=red>hello</font>"+name+"<br/>");
init();
%>
<%="he<br/>llo"+bookName%>


</body>
</html>

在这里插入图片描述

注释

  • html <!-- -->
  • java // /*....*/
  • jsp <%-- --%>

JSP九大内置对象(不需要new 也能使用的对象)

Person per=new Person()

名称功能对象常用方法
out输出对象,向客户端输出内容
request请求对象:存储“客户端向服务端发送的请求信息”String getParameter(String name):根据请求的字段名key,返回值value/String getParameterValues(String name):根据请求的字段名key,返回多个字段值setCharacterEncoding(“编码格式utf-8”):设置请求编码getRequestDisPatcher().forward(): 请求转发A–>B
respose响应对象void addCookie(Cookie cookie):服务端向客户端增加cookie对象 void sendRedirect(String location) throws IOException:页面跳转的一种方式/void setContetType(String type):设置服务端响应的编码(设置服务端的contentType类型)
cookie(客户端,不是内置对象)Cookie是由服务端产生,再发送给客户端保存,即本地缓存,可以提高访问服务端的效率,但是安全性较差Cookie:key=value javax.servlet.http.Cookie   public(String key,String value) String getName()    String getValue()最大有效期: void setMaxAge(int expiry)   服务端准备cookie: response.addCookie(Cookie cookie)页面跳转(转发,重定向) 客户端获取cookie:request.getCookies(); 注意:服务端增加cookie:response对象,客户端获取对象:request对象,b.不能只获取一个单独的对象,全部的对象都需要获取
session(服务端)会话:a.浏览网站:开始–关闭b.购物:浏览,付款,退出c.邮件:浏览,写邮件,退出–>开始–结束
application全局对象String getContextPath:虚拟路径 `

`绝对路径

get/post 提交方式:

  • method=“get”、地址栏、超链接(a href=“XX”) 请求方式 默认都属于get提交方式
  • get和post请求方式的区别
  • get方式 在地址栏显示请求信息(但是地址栏能顾容纳的信息有限,如果有图片,视频等大文件则容量可能出现不足),post不会显示
  • 文件上传操作,必须是post
    总结:推荐使用post

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="show.jsp" method="post">
用户名:<input type="text" name="uname"/><br/>

密码:<input type="password" name="upwd"/><br/>
年龄:<input type="text" name="uage"/><br/>
爱好:<br/>
<input type="checkbox" name="uhobbies" value="足球"/>足球
<input type="checkbox" name="uhobbies" value="篮球"/>篮球
<input type="checkbox" name="uhobbies" value="乒乓球"/>乒乓球
<br/>
<input type="submit" value="注册">
</form>
</body>
</html>

show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 获取元素 -->
<%
//设置编码
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
int age=Integer.parseInt(request.getParameter("uage"));
String pwd=request.getParameter("upwd");
String[] hobbies=request.getParameterValues("uhobbies");

%>
注册成功:信息如下:<br/>
姓名:<%=name %>
年龄:<%=age %>
密码:<%=pwd %>
<br/>
爱好:
<%
if(hobbies !=null){
	for(String hobby:hobbies){
		out.print(hobby+"&nbsp;");
	}
}
%>

</body>
</html>

统一请求的编码:request

get:

  • 统一每一个变量的编码 new String(旧编码,新编码)name=new String(name.getbytes(“iso-8859-1”),“utf-8”)
  • 修改 server.xml URIEncoding=“UTF-8”

建议使用tomcat时,首先在server.xml 中 统一get方式的编码 URIEncoding=“UTF-8”

post:

  • reques.setCharacterEncoding(“utf-8”)

请求转发以及重定向的区别

重定向请求转发
地址栏是否改变改变不变
是否保留第一次请求的数据不保存保存
请求次数21
内部操作张三(客户端)–>服务端窗口(A)(服务端)–>去找B–>张三(客户端)–>服务端窗口(B)(服务端)–>结束张三(客户端)–>服务端窗口(A)(服务端)–>服务窗口B

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="check.jsp" method="post">
用户名:<input type="text" name="uname"><br/>
用户名:<input type="password" name="upwd"><br/>
<input type="submit" value="登录">
</form>

</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
if(name.equals("zs")&&pwd.equals("abc")){
	//response.sendRedirect("success.jsp");由于页面跳转而导致的页面数据丢失,重定向
request.getRequestDispatcher("success.jsp").forward(request,response);
}else{
	//登录失败
	out.print("用户名或者密码有误");
}
%>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 登录成功!<br/>
 欢迎您:
 <%
 String name=request.getParameter("uname");
 out.print(name);
 %>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

使用cookie进行记住密码的操作

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
String uname;
%>
<%
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
	if(cookie.getName().equals("uname")){
		uname=cookie.getValue();
	}
}
%>
<form action="check.jsp" method="post">
用户名:<input type="text" name="uname" value="<%=(uname==null?"":uname)%>"><br/>
密码:<input type="password" name="upwd"><br/>
<input type="submit" value="登录">
</form>

</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
//将用户名加入到cookie到当中
Cookie cookie=new Cookie("name",name);
response.addCookie(cookie);
response.sendRedirect("result.jsp");
%>
</body>
</html>

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

session

  • seesion存在于服务端
  • session是在同一个用户(客户)请求共享
  • 实现机制:第一次客户请求时 产生一个sessionID 并复制给 cookie的sessionID 然后发给客户端 最终 通过session的sessionID–>cookie的sessionID

session机制
客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的信息);
并且每个sesson对象都会有唯一的sessionID(用于区分其他session);
服务端又会产生一个cookie,并且该cookie的name=JESSIONID,value=服务端sessionID的值;
然后服务端会在响应客户端的同时,将该cookie发送给客户端,至此,客户端就有了一个cookie(JESSIONID)
因此,客户端的cookie就可以和服务端的session一一对应(JESSIONID–sessionID)
客户端第二次/第n次请求服务端的时候,服务端会先用客户端cookie中的JESSIONID 去服务端的session中匹配的sessionid,如果匹配成功(cookie jsessionID和sessionID)

session方法

  • getID():获取sessionID
  • boolean isNew():判断是否是新用户(第一次访问)
  • void invalidate():使sessionID失效(退出登录、注销)
  • getAttribute():
  • getAttribute():
  • void setMaxInactiveInternal(秒):设置最大有效(非活动时间)
  • int getMaxInactiveInternal:获取最大有效(非活动时间)

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="check.jsp" method="post">
用户名:<input type="text" name="uname"><br/>
密码:<input type="password" name="upwd"><br/>
<input type="submit" value="登录">
</form>

</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="check.jsp" method="post">
用户名:<input type="text" name="uname"><br/>
密码:<input type="password" name="upwd"><br/>
<input type="submit" value="登录">
</form>

</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
if(name.equals("zs")&&pwd.equals("abc")){
//只有登录成功--session才能有uname和pwd
session.setAttribute("uname", name);
session.setAttribute("upwd", pwd);
System.out.println("sessionID"+session.getId());

//登录成功,转发或者重定向
//session.setMaxInactiveInterval(10);
request.getRequestDispatcher("welcome.jsp").forward(request,response);
}else{
	//登录失败--重新登录
response.sendRedirect("login.jsp");
	
}
%>
</body>
</html>

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎您:

<%
String name=(String)session.getAttribute("uname");
//如果用户没有注册,而是直接登录,则必然是:用户名:null
if(name!=null){
	out.print(name);

	%>
	<a href="invalidate.jsp">注销</a>
	<% 
}else{
	response.sendRedirect("login.jsp");
}
	%>
</body>
</html>

invalidate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
session.invalidate();//session失效
//失效完重定向
response.sendRedirect("login.jsp");
//session.removeAttribute("uname");

%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JDBC

JDBC

  • JDBC:Java database Connectivity:可以为多种关系数据库DBMS提供统一的访问方式
    在这里插入图片描述

JDBC API 主要功能:

三件事:具体是通过以下类/接口来实现
DriverManager:管理jdbc驱动
Connection:连接
Statement(PreparedStatement):增删改查
CallabaleStatement:调用数据库中的存储过程/存储函数
ResultSet:结果集
在这里插入图片描述

  • JDBC API:提供各种操作访问接口:Connection Statement PreparedStatement ResultSet
  • JDBC DriverManager:管理不同的数据库驱动
  • 各种数据库驱动:由相应的数据库厂商提供,作用是为了连接/直接操作数据库

jdbc访问数据库的具体操作步骤

  • 导入驱动,加载具体的驱类
  • 与数据库进行连接
  • 发送sql;,执行
    -处理结果集(查询)

在这里插入图片描述

使用jdbc进行数据库进行操作的时候,只需要修改:驱动,具体驱动类,连接字符串,用户名,密码

Connection Statement

import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class OA{
	private static  final String URL = "jdbc:mysql://localhost:3306/mysql";


	public static void update() {
		Connection conn = null;
		java.sql.Statement stmt = null;
		// a.导入驱动包,加载具体的驱动类
		try {
			Class.forName("com.mysql.jdbc.Driver");
			// b.与数据库进行连接
			String url = "jdbc:mysql://localhost:3306/stt?user=root&password=&useUnicode=true&characterEncoding=utf-8";
		    conn = DriverManager.getConnection(url);
			stmt = conn.createStatement();
			String sql = "insert into sta values('17','李四','男','26')";
			int count = stmt.executeUpdate(sql);

			if (count > 0) {
				System.out.println("发送成功");
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
try {
	stmt.close();// 对象.方法
	conn.close();
}catch(Exception e) {
	// TODO: handle exception
	e.printStackTrace();
}
		}

	}
	public static void query() {//查询
		Connection conn = null;
		java.sql.Statement stmt = null;
		ResultSet rs=null;
		// a.导入驱动包,加载具体的驱动类
		try {
			Class.forName("com.mysql.jdbc.Driver");
			// b.与数据库进行连接
			String url = "jdbc:mysql://localhost:3306/stt?user=root&password=&useUnicode=true&characterEncoding=utf-8";
		    conn = DriverManager.getConnection(url);
			stmt = conn.createStatement();
//			String sql = "select sno,sname from sta";
			String sql="select sname from sta where sno=12";
		    rs = stmt.executeQuery(sql);//返回值表示增删改查几条数据
            while(rs.next()) {
//           	int sno=rs.getInt("sno");
           	String sname=rs.getString("sname");
//            	int sno=rs.getInt(1);
//         	String sname=rs.getString(2);
            	
//             	System.out.println(sno+"----"+sname);
           	System.out.println(sname);
            }
		
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
try {
	if(rs!=null) rs.close();
	stmt.close();// 对象.方法
	conn.close();
}catch(Exception e) {
	// TODO: handle exception
	e.printStackTrace();
}
		}

	}

	   public static void main(String[] args) {
		   update();
		   query();
		   
	   }
}

	public static void getCount(){
	
    	Connection conn = null;
   PreparedStatement pst=null;        
        int rs=0;
 
        try {
        	String sql="insert into sta (sno,sname,ssex,sage) values(?,?,?,?)";
            String url = "jdbc:mysql://localhost:3306/stt?user=root&password=&useUnicode=true&characterEncoding=utf-8";
        	conn=DriverManager.getConnection(url);
        	pst=(PreparedStatement) conn.prepareStatement(sql);
            //pst.setString(1,tableName);
        	pst.setInt(1, 55);
        	pst.setString(2, "liquan");
        	pst.setString(3, "男");
        	pst.setInt(4, 12);
        	 rs=pst.executeUpdate();
           
        
           
            	
            	
     //      	System.out.println(sname);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
        	try {
        		if(pst!=null) pst.close();
        		pst.close();// 对象.方法
        		conn.close();
        	}catch(Exception e) {
        		// TODO: handle exception
        		e.printStackTrace();
        	}
          
        }
     System.out.println(rs);
	}

jdbc总结(模板,八股文)

  • 导入数据包,加载具体的驱动类Class.forName("com.mysql.jdbc.Driver");

  • 与数据库进行连接
    conn = DriverManager.getConnection(url);

  • 通过connection,获取操作数据库的对象(statement/preparedStatement/callableStatement)

  • (查询)处理结果集
    rs=ptmt.executeQuery()
    try{}
    catch{}
    finally{
    rs.close();
    stmt.close();
    connection.close();
    }

CallableStatement(未完待续…)

  • 调用 存储过程,存储函数
  • connection.prepareCall(参数:存储过程或函数名)
  • 参数格式:
    存储过程(无返回值,用Out参数替代)
    {call 存储过程名(参数列表)}
    存储函数(有返回值return):
    {?= call 存储函数名(参数列表)}

处理CLOB【Text】/BLOB类型

处理稍大型数据:
a.存储路径 通过JDBC存储路径,然后根据IO操作处理,获取:1.获取该路径2.IO

CLOB:大文本数据(小说–>数据)
BLOB:二进制文件

CLOB:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值