get/post
从浏览器中以超链接,表单等向服务器发送的请求都成为http请求
请求行,请求头(这两部分浏览器会自动发送)请求体
**请求行:**请求地址,请求方式(get,post),协议版本…
get和post区别
get:
从服务器端获取数据
在地址栏会显示发送的数据:1.不安全 2.传输的数据大小受限 一般浏览器的大小在2-5kb
post:
向服务器端发送数据
发送的数据在请求体中。安全 大小不受限制
请求头: 服务器端和客户端的一些信息
请求体: 指表单post方式请求时,向服务器端发送的数据
在服务器端接收信息
处理
响应
接收请求数据
//构造方法默认有
//init 不需要可以不重写,服务器调用父类的
//service 每次请求都要调用 由于http请求分为get,post请求,在servlet中两者略有不同
//所以父类中定义了doGet() doPost() 分别处理get,post请求
//在父类的service方法中写了一个判断 get->doget post->dopost
/*
doget()处理get请求
org.apache.catalina.connector.RequestFacade 实现HttpServletRequest接口
HttpServletRequest:封装了请求信息,可以从中获取任何请求信息
请求行 请求头 请求体
*/
/*
dopost()处理get请求
*/
//destory 不需要可以不重写,服务器调用父类的
服务器响应数据
Demo1Servlet.class
package com.ffyc.firstweb.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
public class Demo1Servlet extends HttpServlet {
//构造方法默认有
//init 不需要可以不重写,服务器调用父类的
//service 每次请求都要调用 由于http请求分为get,post请求,在servlet中两者略有不同
//所以父类中定义了doGet() doPost() 分别处理get,post请求
//在父类的service方法中写了一个判断 get->doget post->dopost
/*
doget()处理get请求
org.apache.catalina.connector.RequestFacade 实现HttpServletRequest接口
HttpServletRequest:封装了请求信息,可以从中获取任何请求信息
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet"+req);
//请求行数据
System.out.println(req.getMethod()); //GET
System.out.println(req.getProtocol()); //HTTP/1.1
System.out.println(req.getServerName()); //localhost
System.out.println(req.getServerPort()); //8080
//请求头
System.out.println(req.getRemoteAddr()); //获得客户端ip 0:0:0:0:0:0:0:1
System.out.println(req.getRemotePort()); //客户端端口 58285
System.out.println(req.getHeader("User-Agent")); //Mozilla/5.0+
//接收用户请求的数据 tomcat8.0以后get请求数据的解码方式支持中文
String name=req.getParameter("name");
System.out.println(name);
System.out.println(req.getParameter("age")); //jim 12 /demo1?name=jim&age=12
}
/*
dopost()处理get请求
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
req.setCharacterEncoding("utf-8"); //设置post请求数据解码格式 否则输入中文会显示???
System.out.println(req.getParameter("account"));
System.out.println(req.getParameter("passoword"));
System.out.println(req.getParameter("sex"));
String[] courses=req.getParameterValues("course");
System.out.println(Arrays.toString(courses));
//处理 例如调用jdbc处理
//根据处理的结果向客户端做出响应
PrintWriter out=null; //resp对象响应,打印输出流
try{
resp.setContentType("text/html;charset=utf-8"); //设置响应内容的编码格式
out=resp.getWriter();
out.println("<h1>登录成功</h1>");
}catch (Exception e){
out.println("<h1>服务器忙,请稍后再试!</h1>");
}
}
//destory 不需要可以不重写,服务器调用父类的
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--
xml 属于标记语言 html是标记内容指导内容如何显示
xml可扩展标记语言 用来保存数据 保存配置文件数据
web.xml 是web程序的配置文件,保存各种配置信息 在服务器启动时 由服务器读取
-->
<!--配置servlet 把servlet配置进来,服务器就知道有这么一个类-->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.ffyc.firstweb.servlet.DemoServlet</servlet-class> <!--全类名-->
<!--<load-on-startup>0</load-on-startup> --> <!-->=0服务器启动时创建(懒加载),-1服务器访问时创建-->
<init-param>
<param-name>name</param-name>
<param-value>jim</param-value>
</init-param>
</servlet>
<!--为servlet配置一个供前端访问的映射地址-->
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demourl</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>com.ffyc.firstweb.servlet.Demo1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
</web-app>
firstweb.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的第一个web项目</title>
</head>
<body>
<!--
从浏览器中以超链接,表单等向服务器发送的请求都成为http请求
请求行,请求头(这两部分浏览器会自动发送)请求体
请求行:请求地址,请求方式(get,post),协议版本...
get和post区别
get:
从服务器端获取数据
在地址栏会显示发送的数据:1.不安全 2.传输的数据大小受限 一般浏览器的大小在2-5kb
post:
向服务器端发送数据
发送的数据在请求体中。安全 大小不受限制
请求头:服务器端和客户端的一些信息
请求体:是指表单post方式请求时,向服务器端发送的数据
在服务器端接收信息
处理
响应
-->
<a href="demo1?name=jim&age=12">列表</a>
<form action="demo1" method="post">
账号:<input type="text" name="account"> <br/>
密码:<input type="password" name="passoword"> <br/>
<!--<input type="file">-->
性别:<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女 <br/>
课程:<input type="checkbox" name="course" value="java">java
<input type="checkbox" name="course" value="html">html
<input type="checkbox" name="course" value="css">css
<input type="submit" value="保存">
</form>
</body>
</html>
webpro项目
搭建:
- 先创建一个java项目,add为ee项目。
- web里新建html,Tomcat部署。
- 写Demosevlet.class。发现无法继承httpservlet。web-inf里创建dicotory Lib,复制加入sevlet-api,mysql-connect-java-api。将两个add-library
- 右键overwrite重写dopost doget
- 配置web.xml。表单里action加上url,method post
- dao层写jdbc,servlet调用
out.println(“登录成功”); 响应的内容
就将原来发起请求的页面内容覆盖了。所以需要引入ajax
LoginServlet.class
package com.ffyc.webpro.servlet;
import com.ffyc.webpro.dao.LoginDao;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/*
程序:既定流程
*/
public class LoginServlet extends HttpServlet {
/*
登录处理
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter out =null;
try{
//响应行(状态码200 404 500) 响应头(setContentType编码格式)
//out.println("登录成功"); 服务器向客户端输出的内容
resp.setContentType("text/html;charset=utf-8"); //响应头
req.setCharacterEncoding("utf-8"); //设置编码格式
String account=req.getParameter("account");
String password=req.getParameter("password");
LoginDao loginDao=new LoginDao();
boolean b=loginDao.checkLogin(account,password);
out= resp.getWriter();
if(b){
out.println("登录成功");
/*
out.println("登录成功"); 响应的内容。就将原来发起请求的页面内容覆盖了
//jsp
*/
//ajax
}else{
out.println("账号或密码错误");
}
}catch (Exception e){
e.printStackTrace();
out.println("服务器忙!");
}
}
}
LoginDao.class
package com.ffyc.webpro.dao;
import java.sql.*;
public class LoginDao {
/**
* 登录验证
* @param account
* @param password
* @return true-成功 false-账号密码失败
*/
public boolean checkLogin(String account,String password) throws ClassNotFoundException, SQLException {
Connection connection=null;
PreparedStatement ps=null;
ResultSet resultSet=null;
try{
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3309/web_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
connection= DriverManager.getConnection(url,"root","root");
ps=connection.prepareStatement("select id,account from user where account=? and password=?");
ps.setString(1,account);
ps.setString(2,password);
resultSet=ps.executeQuery();
if(resultSet.next()){
return true;
}else{
return false;
}
}finally {
if(connection!=null){
connection.close();
}
if(ps!=null){
ps.close();
}
if(resultSet!=null){
resultSet.close();
}
}
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.ffyc.webpro.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--
表单验证
-->
<form action="login" method="post">
账号<input type="text" name="account"> <br/>
密码<input type="password" name="password"> <br/>
<input type="submit" value="登录">
</form>
<a href="register.html">注册</a>
</body>
</html>
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="login.html">登录</a>
</body>
</html>
web_db.sql
CREATE TABLE USER(
id int PRIMARY key auto_increment,
account varchar(10) UNIQUE not null,
password VARCHAR(10) not null,
reg_time datetime
)