第一章回顾:
掌握以下内容即可:概念需要基本的了解
1.Java的三个体系
JavaSE JavaME JavaEE
2.互联网的产品的架构体系
B/S C/S
3.服务器和Tomcat服务器的相关概念
4.掌握如何创建一个Web项目并用tomcat部署
5.一个web项目至少需要的package
test , entity , dao , util , servlet
6.如何解决控制台的tomcat乱码
需要修改的地方:
1. 修改tomcat的conf文件夹的logging.properties文件 将下面这行改成GBK
#java.util.logging.ConsoleHandler.encoding = GBK 默认是UTF-8
2.File-setting-console编码改成GBK
3.File-setting-FileEncoding 三个地方改成UTF-8
7.访问web项目的域名的格式问题
弄清楚localhost和本级ip地址的区别
localhost表示本机地址IP地址,只能自己访问。
如果想要别人访问。就必须改成真实的IP地址
8.项目首页的设置
默认是index.html 如果想要修改成制定的页面,需要修改web.xml文件的内容。
<welcome-file-list>
<welcome-file>aaa.html</welcome-file>
</welcome-file-list>
UserInfoDao
import com.yyzy.entity.Userinfo;
import com.yyzy.util.JDBCUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UserInfoDao {
//注册用户
public boolean regUserinfo(Userinfo userinfo){
String sql = "insert into userinfo values(null,?,?,?,?,?,?,?)";
Connection conn = JDBCUtil.getConn();
try {
PreparedStatement pre = conn.prepareStatement(sql);
pre.setString(1,userinfo.getUsername());
pre.setString(2,userinfo.getPassword());
pre.setString(3,userinfo.getSex());
pre.setString(4,userinfo.getLikes());
pre.setString(5,userinfo.getAddress());
pre.setString(6,userinfo.getJieshao());
pre.setString(7,userinfo.getBirthday());
int i = pre.executeUpdate();
if (i == 1) {
return true;
}else{
return false;
}
} catch (SQLException e) {
System.out.println("解析sql语句失败" + e);
return false;
}
}
}
Userinfo
public class Userinfo {
private Integer id;
private String username;
private String password;
private String sex;
private String likes;
private String address;
private String jieshao;
private String birthday;
public Userinfo() {
}
public Userinfo(Integer id, String username, String password, String sex, String likes, String address, String jieshao, String birthday) {
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
this.likes = likes;
this.address = address;
this.jieshao = jieshao;
this.birthday = birthday;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getLikes() {
return likes;
}
public void setLikes(String likes) {
this.likes = likes;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getJieshao() {
return jieshao;
}
public void setJieshao(String jieshao) {
this.jieshao = jieshao;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Userinfo{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", sex='" + sex + '\'' +
", likes='" + likes + '\'' +
", address='" + address + '\'' +
", jieshao='" + jieshao + '\'' +
", birthday='" + birthday + '\'' +
'}';
}
}
AServlet
/*
如何让一个普通的Java类变成可以处理前台请求的servlet类
1.导入jar包 servlet-api.jar 导入了jar包才可以使用Servlet的相关功能
2.在类上加上@WebServlet("/xxx") 注意/表示绝对路径 Xxx表示请求的路径名
表示该类是可以和前台进行交互了
3.继承HttpServlet类 让子类拥有父类的相关方法。
4.重写父类的service方法。(处理请求的相关代码)
*/
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进来了AServlet");
//如何接受前台传递过来的参数 注意事项:接受的返回值全是String 需要自行转换req.getParameter("id");只能获取单个参数
String id = req.getParameter("id");
String age = req.getParameter("age");
String name = req.getParameter("name");
System.out.println(id + "~~" + name + "~~" +age);
}
}
BServlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/BServlet")
public class BServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进来了BServlet");
String id = req.getParameter("id");
String sex = req.getParameter("sex");
System.out.println(id + "~~" + sex);
}
}
CServlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/CServlet")
public class CServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进来了CServlet");
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
System.out.println(username);
String password = req.getParameter("password");
System.out.println(password);
String sex = req.getParameter("sex");
System.out.println(sex);
String address = req.getParameter("address");
System.out.println(address);
//类似于多选框的 就不能用上面的方式 因为上面的只能获取单个
String[] likes = req.getParameterValues("likes");
for(int i = 0 ;i<likes.length;i++){
System.out.println(likes[i]);
}
String jieshao = req.getParameter("jieshao");
System.out.println(jieshao);
String birthday = req.getParameter("birthday");
System.out.println(birthday);
}
}
RegServlet
package com.yyzy.servlet;
import com.yyzy.dao.UserInfoDao;
import com.yyzy.entity.Userinfo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/RegServlet")
public class RegServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接受数据的流程:
//1.设置编码
req.setCharacterEncoding("utf-8");
//收集单独独立的数据,例如账号密码性别年龄生日自我介绍等等
//xxx表示前台的参数名是什么 接受返回值全是String 需要自行转换
// String xxx = req.getParameter("xxx");
//收集多个数据:例如爱好 需要遍历 来一一取值
// String[] xxx = req.getParameterValues("xxx");
String username = req.getParameter("username");
System.out.println("账号为" + username);
String password = req.getParameter("password");
System.out.println("密码为" + password);
String sex = req.getParameter("sex");
System.out.println("sex为" + sex);
String[] likes = req.getParameterValues("likes");
String l = "";
for (int i = 0;i<likes.length;i++){
if(i==likes.length-1){
l = l + likes[i] ;
}else{
l = l + likes[i] + ",";
}
}
String birthday = req.getParameter("birthday");
System.out.println("birthday为" + birthday);
String address = req.getParameter("address");
System.out.println("address为" + address);
String jieshao = req.getParameter("jieshao");
System.out.println("jieshao为" + jieshao);
UserInfoDao ud = new UserInfoDao();
Userinfo userinfo = new Userinfo(null,username,password,sex , l ,address,jieshao,birthday);
boolean b = ud.regUserinfo(userinfo);
System.out.println(b);
}
}
TestServlet
package com.yyzy.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("访问成功");
}
}
Test
package com.yyzy.test;
import com.yyzy.dao.UserInfoDao;
import com.yyzy.entity.Userinfo;
import com.yyzy.util.JDBCUtil;
import java.sql.Connection;
public class Test {
public static void main(String[] args) {
// Connection conn = JDBCUtil.getConn();
// System.out.println(conn);
UserInfoDao ud = new UserInfoDao();
Userinfo userinfo = new Userinfo(null,"张三","1234","男" , "吃,玩","广东","我是牛吗","19999-1-1");
boolean b = ud.regUserinfo(userinfo);
System.out.println(b);
}
}
JDBCUtil
package com.yyzy.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//工具类。生成Connetion链接供dao包下的类使用
public class JDBCUtil {
/*
1.静态化加载驱动
2.声明一个可以返回COnnetion链接静态方法供dao去使用
*/
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加载mysql驱动失败" + e);
}
}
public static Connection getConn(){
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "root");
return connection;
} catch (SQLException e) {
System.out.println("获取链接失败" + e);
return null;
}
}
}
aaa
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>这是aa页面
</body>
</html>
index
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="index1.html">前台发送请求的三种方式</a><br><br><br>
<a href="index2.html">后台如何接受前台发出的请求---Servlet创建方式</a><br><br><br>
<a href="index3.html">前台如何发送带有数据的请求</a><br><br><br>
<a href="index4.html">后台如何接受前台的数据</a><br><br><br>
<a href="index5.html">实现用户注册基础版</a><br><br><br>
<a href="index6.html">实现用户注册进阶版</a><br><br><br>
<p>web项目是存在缓存问题的:好处就是节省流量节省加载时间。</p>
<p>web项目是存在缓存问题的:坏处就是无法得到理想的正确的结果。</p>
<p>Web缓存存在的两个地方 : 1.浏览器内部--更多工具--清除浏览数据</p>
<p>Web缓存存在的两个地方 : 2.idea项目内部的out目录(加载web项目的缓存目录)</p>
</body>
</html>
index1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>前台发送请求的方式1:通过超链接</p>
<a href="http://www.baidu.com">指向互联网资源</a>
<a href="index.html">指向项目内部的页面资源</a>
<a href="/xxx">指向项目内部的Java资源</a>
<hr>
<p>前台发送请求的方式2:通过JS</p>
<button id="btn">点击按钮发送一个请求</button>
<hr>
<p>前台发送请求的方式3:通过表单</p>
<form action="index.html" method="post">
账号:<input type="text" name="username"><br>
<input type="submit" value="提交">
</form>
<script>
document.getElementById("btn").onclick = function (){
location.href = "index.html";//本质依然是超链接
}
</script>
</body>
</html>
index2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>后台如何获取前台发来的请求</p>
<p>答:通过tomcat提供的Servlet类来实现</p>
<p>什么是Servlet:处理前台请求的一个类</p>
<p>如何去创建Servlet:</p>
<p>1.导入jar包---servet-api.jar 在tomcat的lib目录里面</p>
<p>2.在servlet的包下创建一个Servlet的类</p>
<p>2.1 Servlet的命名规范: XxxServlet 其中Xxx表示什么功能的Servlet </p>
<p>3.继承HttpServlet</p>
<p>4.重写父类的service方法,然后把默认的super删除</p>
<p>5.在类上添加@WebServlet("/Xxx") 注解。表示前台通过什么请求路径访问该类,一般和类名同名</p>
<p>测试如下Servlet</p>
<a href="/TestServlet">通过超链接访问Servlet</a>
<button id="btn">通过JS访问Servlet</button>
<script>
document.getElementById("btn").onclick = function (){
location.href = "/TestServlet";
}
</script>
</body>
</html>
index3
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>前台发送携带数据的请求的方式1:通过超链接</p>
<p>语法如下:在URL地址的后面加上?key=value&key=value&key=value的形式即可</p>
<p>注意事项:都是英文状态下的符号,如果含有中文的内容 也无需加引号</p>
<a href="index.html?id=123&name=张三">指向互联网资源</a>
<hr>
<p>前台发送携带数据的请求的方式1:通过JS</p>
<button id="btn">点击按钮发送一个请求</button>
<hr>
<p>前台发送请求的方式3:通过表单</p>
<p>注意事项:内部的表达元素都要加上name来修饰。因为后台都是通过name来获取值</p>
<p>注意事项:单选框:加上若干个相同的name即可,记得补充value</p>
<p>注意事项:多选框:加上若干个相同的name即可,记得补充value</p>
<p>注意事项:下拉框:内部的option的value值可以省略的,但是你要知道,如果省略了以option标签的内部为准。如果没省略就以value为准</p>
<form action="/RegServlet" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
性别:
<input type="radio" name="sex" value="男" checked >男
<input type="radio" name="sex" value="女" >女<br>
爱好:
<input type="checkbox" name="likes" value="吃">吃
<input type="checkbox" name="likes" value="喝">喝
<input type="checkbox" name="likes" value="玩">玩
<input type="checkbox" name="likes" value="乐">乐
<br>
地址:
<select name="address">
<option>湖南</option>
<option value="123广东~">广东</option>
<option>云南</option>
</select> <br>
自我介绍:
<textarea name="jieshao">自我介绍:</textarea>
<br>
生日:<input type="date" name="birthday"><br>
<input type="submit" value="提交">
</form>
<script>
document.getElementById("btn").onclick = function (){
location.href = "index.html?id=456";//本质依然是超链接
}
</script>
</body>
</html>
index4
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>后台接受数据的方式:详情见RegServlet</p>
</body>
</html>
index5
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/RegServlet" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
性别:
<input type="radio" name="sex" value="男" checked >男
<input type="radio" name="sex" value="女" >女<br>
爱好:
<input type="checkbox" name="likes" value="吃">吃
<input type="checkbox" name="likes" value="喝">喝
<input type="checkbox" name="likes" value="玩">玩
<input type="checkbox" name="likes" value="乐">乐
<br>
地址:
<select name="address">
<option>湖南</option>
<option value="123广东~">广东</option>
<option>云南</option>
</select> <br>
自我介绍:
<textarea name="jieshao">自我介绍:</textarea>
<br>
生日:<input type="date" name="birthday"><br>
<input type="submit" value="提交">
</form>
<script>
</script>
</body>
</html>