
学习笔记:JavaWeb
Java Web
C/S 程序、B/S 程序:浏览器-服务器的程序(网站)
请求响应模型
- 浏览器发送一个请求,请求某个服务器中的资源(静态资源和动态资源)
- 服务器接收到请求响应结果给浏览器
浏览器发送请求的方式
- 超链接:a
- form 表单
- js:window.location.href
- ajax:jquery 的 $.ajax(),post(),get()
发送请求时,传递数据的方式
- get
- post
请求交给 Servlet 类处理,Servlet 必须直接或间接实现 Servlet 接口,一般用继承 HttpServlet 类的方式
写一个类继承 HttpServlet
导入jar包
1
2
3
4
5
6<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>创建一个类,继承HttpServlet类,添加@WebServlet注解,指定处理的请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package com.hopu.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;
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Get");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post");
}
}
重写doGet和doPost方法
在doGet或doPost方法中处理请求的步骤
获取请求参数
request.getParameter(“请求参数的名字”)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33package com.hopu.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;
public class TestServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("处理请求的地方post");
//处理请求的位置
//1、获取请求参数
//获取登录时用户输入的账号和名
String name = req.getParameter("name");
String pass = req.getParameter("pass");
System.out.println(name+"\t"+pass);
//2、调用service、dao层操作数据库
//3、共享数据
//4、响应(把结果给浏览器)
}
}在浏览器发送请求
控制台打印结果
调用service类,操作数据库
准备数据库
创建testdb数据库,创建用户表user,创建列:id,name,pass,插入一条数据
1
2
3
4
5
6
7create table user(
id int primary key auto_increment,
name varchar(50),
pass varchar(50)
);
insert into user values(null, 'zs', '123');在pom.xml中导入数据库驱动jar包
1
2
3
4
5<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>创建实体类
导入lombok的jar包
1
2
3
4
5<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>编写实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.hopu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
public class User {
private int id;
private String name;
private String pass;
}创建Service类
1
2
3
4
5
6
7
8
9
10
11package com.hopu.service;
import com.hopu.dao.UserDao;
import com.hopu.pojo.User;
public class UserService {
public User login(String name, String pass){
return new UserDao().login(name, pass);
}
}创建Dao层类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26package com.hopu.dao;
import com.hopu.pojo.User;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class UserDao {
public User login(String name, String pass) {
//操作数据库
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "123456");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * from user where name = '" + name + "' and pass='" + pass + "'");
if(rs.next()){
return new User(rs.getInt(1), rs.getString(2), rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}在Servlet类调用Service
共享数据
- request:共享的数据只在一次请求响应内有效
- session:在一个会话内有效
- application:整个项目发布期间有效
响应
- 重定向:浏览器一个会发送两次请求
- 请求转发:浏览器只会发送一次请求
使用EL表达式获取共享的数据,使用JSTL把数据显示在页面指定的位置
- 感谢你赐予我前进的力量
赞赏名单
因为您的支持让我意识到写文章的价值😉
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自YDesign
评论








