HTML前端笔记Day9

一,模拟Servlet解析请求参数

1,测试

package cn.tedu;
//模拟Servlet解析请求参数的对象Request
public class MyRequest {
    public static void main(String[] args) {
        //this是代表的本类对象,static里不能出现this,原因就是加载顺序
//        this.getParamter();
        MyRequest my = new MyRequest();
        my.getParamter();
    }
    //1,getParamter()获取每个请求参数
    public void getParamter(){
        String url="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo6" +
                "?user=jack&pwd=123" ;
//        1,按照?切割字符串,切出来两部分,存入数组
        //[http://localhost:8090/cgb2109javaweb03/ServletDemo6,user=jack&pwd=123]
        String[] strs = url.split("\\?");//转义
//        2,重点解析数组中的第二个元素,下标为1的元素
        String datas = strs[1];//user=jack&pwd=123
//        3,把第二步的结果,按照&切割
        //[user=jack,pwd=123]
        String[] data = datas.split("&");
//        4,遍历数组,获取每个数据
        for(String s : data){//遍历两次,第一次s是user=jack,第二次s是pwd=123
//        5,按照=切割,得到数组 [user,jack],只要第二个元素
//            String params = s.split("=")[1];//和下面两行等效,只是简写形式
            String[] ss = s.split("=");
            String params = ss[1];
            System.out.println(params);
        }
    }
}

2.优化之后

package cn.tedu;

import com.sun.org.apache.xpath.internal.compiler.Keywords;

import java.security.Key;
import java.util.HashMap;
import java.util.Map;

public class MyRequest {
    public static void main(String[] args) {
        //this 是代表本类的对象,static里不能出现this,原因就是加载顺序
        //this.getParamter();
        MyRequest my = new MyRequest();
        String u = my.getParamter("name","pwd");
        System.out.println(u);
    }
    //1.getParamter()
    public strictfp String getParamter( String Keyword,String pwd){
        String url="http://localhost:8888/CGB2109Web01/ServletDemo05" +
                "?name=jerry&pwd=123&hobby=basketbal&hobby=football";
        //1.按照?切割字符串,切出来两部分,存入数组
        //[http://localhost:8888/CGB2109Web01/ServletDemo05?name=jerry&pwd=123]
        String[] str = url.split("\\?")[1].split("&");//转义
//2.重点解析数组中的第二元素,下标为1的元素
        Map<String, String> map = new HashMap<String, String>();

        //String datas=str[1];//name=jerry&pwd=123
        //3.把第二步的结果,按照&切割[name=jerry,pwd=123,age=10 addr=bj]
        //[ame=jerry,pwd=123]
        // String[] data = datas.split("&");
        //4.遍历数组,获取每个数据user=jack
        for (String c1:str) {
            //5.按照=切割,得到数组[user,jack],只要第二个元素
            String [] ss  = c1.split("=");
            String  key=ss[0];
            String value=ss[1];
            map.put(key,value);

        }   return map.get(Keyword);//去map里找key对应的value

    }
}

 

二,Servlet 解析post方式提交的数据

1,测试

package cn.tedu.request;
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("/ServletDemo6")
public class ServletDemo6 extends HttpServlet {
    //总结1:Servlet什么时候会自动调用doPost()?什么时候会自动调用doGet()?
    //  Servlet会调用getMethod()来获取用户的访问方式,如果是POST会调用doPost()
    //  Servlet会调用getMethod()来获取用户的访问方式,如果是GET会调用doGet()
    //总结2:中文乱码问题?
    //    get方式提交数据没有乱码问题,Tomcat已经配置好了(URIEncoding="utf-8"),不必关心
    //    post方式提交的数据如果有中文一定乱码,request.setCharacterEncoding("utf-8");
    //TODO 处理post方式提交的数据--如果请求参数包含中,一定乱码!!
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //验证,请求方式是post吗?
        String method = request.getMethod();
        //指定请求的方式使用的编码--解决中文乱码
        request.setCharacterEncoding("utf-8");
        String name=request.getParameter("user");
        String pwd = request.getParameter("pwd");
        System.out.println("doPost..."+name+pwd+"..."+method);
    }
    //ServletDemo6?user=jack&pwd=123
    //处理get方式提交的数据:如果出现中文不会乱码,Tomcat7.0以上都处理过了
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String method = request.getMethod();

        String user = request.getParameter("user");//获取user的值
        String pwd = request.getParameter("pwd");//获取pwd的值
        System.out.println("doGet..."+user+pwd+"..."+method);
    }
}

2,前端HTML页面

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<form action="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo6">
			<h3>测试 get提交数据</h3>
			姓名:<input type="text" placeholder="请输入姓名..." name="user"/> <br />
			密码:<input type="password" placeholder="请输入密码..." name="pwd"/> <br />
			<input type="submit" value="提交"/>
		</form>
		
		<form method="post" 
		action="http://localhost:8090/cgb2109javaweb03_war_exploded/ServletDemo6">
			<h3>测试 post提交数据</h3>
			姓名:<input type="text" placeholder="请输入姓名..." name="user"/> <br />
			密码:<input type="password" placeholder="请输入密码..." name="pwd"/> <br />
			<input type="submit" value="提交"/>
		</form>
	</body>
</html>

 

三,综合案例

1,需求

综合案例:
1,准备前端HTML网页,让用户输入部门数据(编号,名称,地址)
2,准备DeptServlet,接受请求,并且解析请求参数
3,把解析成功的请求参数,进行入库
3.1,准备jar包
3.2,准备dept表(deptno,dname,loc)
3.3,准备jdbc代码,进行insert的SQL语句操作

 

 2,创建HTML网页

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>前后端大融合</title>
		<style>
			input[type='text']{
				width: 200px;/* 宽度*/
				height: 30px;/* 高度  */
				background-color: pink;/* 背景色 */
				border-color: pink;/* 边框色 */
				border-radius: 10px;/* 圆角边框 */
			}
			input[type="submit"]{
				width: 80px;/* 宽度*/
				height: 40px;/* 高度  */
				background-color: gray;/* 背景色 */
				border-color: gray;/* 边框色 */
				color: white;/* 文字的颜色 */
				font-size: 20px;/* 字号大小 */
			}
		</style>
	</head>
	<body>
		<form method="post" action="http://localhost:8090/cgb2109javaweb03_war_exploded/DeptServlet">
			<h1>添加部门数据</h1>
			<h3>编号:<input type="text" name="deptno"/></h3>
			<h3>名称:<input type="text" name="dname"/></h3>
			<h3>地址:<input type="text" name="loc"/></h3>
			<input type="submit" value="保存" />
		</form>
	</body>
</html>


 3,创建DeptServlet类

package cn.tedu.dept;

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;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

@WebServlet("/DeptServlet")
public class DeptServlet extends HttpServlet {
    //用户以post方式提交的数据,doPost()解析请求参数
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
            //防止中文乱码
            request.setCharacterEncoding("utf-8");
            //用来获取网页中传递来的参数,
            //getParameter()的参数是网页中name属性的值
            String a = request.getParameter("deptno");
            String b = request.getParameter("dname");
            String c = request.getParameter("loc");
            //TODO  jdbc--把解析到的参数入库,,insert
            //获取驱动
            Class.forName("com.mysql.jdbc.Driver");
            //获取连接
            String url="jdbc:mysql:///cgb2109?characterEncoding=utf8";
            Connection con=DriverManager.getConnection(url,"root","root");
            //获取传输器Statement不安全低效,PreparedStatement安全防止了SQL攻击高效
            String sql="insert into dept values(?,?,?)";//sql骨架,?是占位符
            PreparedStatement p = con.prepareStatement(sql);
            //设置SQL的参数,执行SQL
            p.setObject(1,a);
            p.setObject(2,b);
            p.setObject(3,c);
            p.executeUpdate();
            //关闭资源
            p.close();
            con.close();
        }catch (Exception e){
            System.out.println("插入失败,请检查数据~");
        }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //post提交的,不能写在这里,
    }
}

 

4,总结

 四,请求转发

1,概述

作用是想让AServlet调用BServlet的功能.
过程: 浏览器访问AServlet ,但是AServlet偷偷调用了BServlet ,此时浏览器的地址栏没变
全程只是一次请求
实现:request.getRequsetDispather(访问BServlet的方式).forward(request,response)

2,测试 

AServlet

package cn.tedu.forwardtest;

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 {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("AServlet被执行!");
        //实现请求转发:想让AServlet调用BServlet,本质上这是服务器的动作,浏览器没变化发现不了
        //要求:两个资源可以互相调用,但是要求两个资源必须在同一项目中
        //getRequestDispatcher()的参数是,对方的访问方式
        //请求转发本质上就是一次请求:在AServlet添加请求的数据,试试BServlet也能获取到就可以了
        request.setAttribute("name","rose");
        request.getRequestDispatcher("/BServlet").forward(request,response);
    }
}

BServlet

package cn.tedu.forwardtest;

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 {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("BServlet被执行!");
        //获取在AServlet中存入的数据,其实就是根据key获取value
        Object data = request.getAttribute("name");
        System.out.println(data);
    }
}

3,总结

直接访问AServlet,背后的BServlet也会被执行,并且浏览器没变化.

 五,响应Response

1,概述

是指 从java程序组织好的数据 发送给 前端浏览器 的过程,叫响应
常用方法

getwriter()---给浏览器响应数据
setContentType()---用来解决防止响应时的中文乱码
senRedirect()--重定向

 2,测试

package cn.tedu.response;

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;
import java.io.PrintWriter;

//给浏览器响应数据
@WebServlet("/ResponseServlet")
public class ResponseServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        //3,如果想要响应中文,防止中文乱码
        response.setContentType("text/html;charset=utf-8");
        //1,获取写出流
        PrintWriter out = response.getWriter();
        //2,正式写出数据--写到浏览器
        out.write("hello servlet1~~~");
        out.write("hello servlet2~~~");
        out.write("hello servlet3~~~");
        out.write("你好servlet~~~");//中文乱码啦~
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

六,重定向

1,概述

特点:
1, 整个过程有 两个请求 两个响应
2, 地址栏会发生改变
使用: response.sendRedirect(对方的访问方式)
此时,你想访问哪个程序都可以

2,测试 

ServletA

package cn.tedu.redirect;

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("/ServletA")
public class ServletA extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //面试题:重定向和请求转发的区别???
        //1,请求转发是请求request的功能,全程1次请求1次响应,地址栏不变
            //request.getRequestDispather("目标访问的方式").forward(请求,响应)
        //2,重定向是response的功能,全程2次请求2次响应,地址栏改变
            //response.sendRedirect("目标访问的方式")
        response.sendRedirect("https://www.baidu.com/");
    }
}

ServletB

package cn.tedu.redirect;

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("/ServletB")
public class ServletB extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值