javaEE二_请求

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项目

搭建:

  1. 先创建一个java项目,add为ee项目。
  2. web里新建html,Tomcat部署。
  3. 写Demosevlet.class。发现无法继承httpservlet。web-inf里创建dicotory Lib,复制加入sevlet-api,mysql-connect-java-api。将两个add-library
  4. 右键overwrite重写dopost doget
  5. 配置web.xml。表单里action加上url,method post
  6. 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
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值