JavaWeb入门——JSP
1.jsp环境搭建及入门
1.1CS架构和BS架构
1.2Tomcat解压后目录
1.3Tomcat配置
1.配置JAVA_HOME,JDK
2.配置CATALINA_HOME
双击startup.bat
1.4常见状态码
200:一切正常
300/301:页面重定向(跳转)
404:资源不存在
403:权限不足(如果访问a目录,但是a设置不可见)
500:服务器内部错误(代码有误)
其他编码:要积累
2.使用eclipse快速开发jsp
2.1字符集编码问题
编码分类:
设置jsp文件的编码(jsp文件中的pageEncoding属性):jsp -> java
设置浏览器读取jsp文件的编码(jsp文件的content属性)
一般将上述设置为一致的编码,UTF-8
文本编码
一般将eclipse中的文件统一设置为UTF-8
2.2jsp的页面元素
1.脚本Scriptlet
i.
<%
局部变量、Java语句
%>
ii.
<%!
全局变量、定义方法
%>
iii.
<%= 输出表达式%>
一般而言,修改web.xml、配置文件、java 需要重启Tomcat服务
但是如果修改Jsp、HTML、CSS、js、 不需要重启
注意:out.println()不能回车,要想回车:“
”,out.print() <%= %>可以直接解析HTML代码
2.指令
page指令
<%@page ...%>
page指定的属性:
language:jsp页面使用的脚本语言
import:导入的类
pageEncoding:jsp文件自身编码
contentType:浏览器解析jsp的编码
3.注释
HTML注释
java注释 // /* */
jsp注释 <%-- -->
4.JSP九大内置对象(自带的,不需要new也能使用的对象)
out:向客户端输出内容
REQUEST
request:请求对象;存储“客户端向服务端发送的请求信息”
String getParameter(String name):根据请求的字段名key,返回字段值value
String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value (CheckBox)
void setCharacterEncoding(“编码格式utf-8”):设置post请求编码(Tomcat7及以前默认为iso-8859-1,Tomcat8以后改为了utf-8)
getRequestDispatcher("b.jsp").forward(request, response); 请求转发的方式跳转页面A -> B
getServerContext():获取项目的ServletContext对象
示例:
register.jsp,show.jsp
[http://localhost:8888/MyJspProject/show.jsp?uname=wjc&upwd=diang520&uage=21&uhobbies=%E8%B6%B3%E7%90%83&uhobbies=%E4%B9%92%E4%B9%93%E7%90%83]
链接/文件>?参数名1=参数值1&参数名2=参数值2&。。。
get提交方式:method=“get”和地址栏、超链接(<a herf="xx">)请求方式 默认都属于get提交方式
get与post请求方式的区别:
1.get方式 在地址栏现实请求信息;post则不会。但是地址栏能容纳的信息有限,4-5KB;如果请求大文件,如图片等,会报错
2.文件上传操作,必须是post,根本原因还是1
5.统一请求的编码request
get方式请求如果出现乱码,解决(tomcat7默认编码为iso-8859-1
1.统一每一个变量的编码_不推荐
使用new String(旧编码,新编码);
eg:
name = new String(name.getBytes("iso-8859-1"), "utf-8");
2.修改server.xml,一次性的更改Tomcat默认的get提交方式编码(UTF-8)
建议使用Tomcat时,首先在server.xml中统一get方式的编码 URIEncoding="UTF-8"
(以上仅针对get
post
void setCharacterEncoding(“utf-8”)
RESPONSE
Cookie
check.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("uname");
String pwd = request.getParameter("uname");
/* if(name.equals("zs") && pwd.equals("abc")){
response.sendRedirect("success.jsp");
}else{
out.println("用户名或密码错误");
} */
//将用户名加入到Cookie中
Cookie cookie = new Cookie("name",name);//不要中文
response.addCookie(cookie);
response.sendRedirect("result.jsp");
%>
</body>
login.jsp
<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>
SESSION
session机制
1.session存储在服务端
2.session是在同一个用户(客户端)请求时共享
3.实现机制:第一次客户请求时,产生一个sessionID,并复制给cookie的jsessionID 然后发给客户端
session方法:
String getID():获取sessionID
boolean isNEW():判断是否是新用户
void invalidate():使session失效(退出登录、注销)
void setAttribute();
Object getAttribute();
void setMaxInactiveInterval(秒) : 设置最大有效非活动时间
int getMaxInactiveInterval():获取最大有效非活动时间
四种范围对象作用域
3.JDBC原理
3.1 JDBC
JDBC:Java DataBase Conectivity 可以为多种关系型数据库DBMS提供统一的访问接口
3.2 JDBC API主要功能
3.3JDBC访问数据库步骤
3.4数据库驱动
jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
1~3行的驱动类分别为 Oracle MySQL SQLServer
3.5 Statement
Statement 与 PreparedStatement的区别
2.性能更强,前者多次execute需要多次编译sql语句
而后者仅一次编译
3.6CallableStatement调用存储过程、存储函数
3.7JDBC总结
3.8JDBC处理大文本CLOB数据及二进制BLOB数据
4.JSP访问数据库
4.1JavaBean示例
WebProject/WebContent/WEB-INF/check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.wjc.LoginDao" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name = request.getParameter("uname");
String pwd = request.getParameter("upwd");
LoginDao dao = new LoginDao();
int result = dao.login(name, pwd);
if(result > 0){
out.print("登陆成功");
}else if(result == 0){
out.print("用户名或密码错误");
}else{
out.print("系统异常");
}
%>
</body>
</html>
WebProject/Java Resources/src/com.wjc.LoginDao.java
package com.wjc;
import java.sql.*;
public class LoginDao {
public int login(String name, String pwd) { //1:登陆成功 0:用户名或密码错误 -1:系统错误
final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
final String UNAME = "root";
final String PWD = "diang520";
Statement stmt = null;
Connection connection = null;
ResultSet rs = null;
try {
// 1.导入驱动,加载具体的驱动类
Class.forName("com.mysql.cj.jdbc.Driver");// 加载具体的驱动类
// 2.与数据库建立链接
connection = DriverManager.getConnection(URL, UNAME, PWD);
// String name = request.getParameter("uname");
// String pwd = request.getParameter("upwd");
// 3.发送SQL,执行(查)
stmt = connection.createStatement();
String sql = "select count(*) from login where name='"+name+"' and password='"+pwd+"';";
//执行SQL,增删改为executeUpdate(),查为executeQuery();
rs = stmt.executeQuery(sql);
int count = -1;
if(rs.next()){
count = rs.getInt(1);
}
// if(count > 0){
// out.println("登录成功");
// }else{
// out.println("登录失败");
// }
return count;
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
if(rs != null)
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(stmt != null)
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 对象、方法
if(connection != null)
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}