使用response.sendirect("html/employee.html?"+java.net.URLEncoder.encode(param.substri) 重定向传递参数,并隐藏跳转地址

本文介绍如何在Servlet中通过`response.sendRedirect()`方法重定向到一个带有参数的HTML页面,同时隐藏实际的跳转URL。示例代码展示在EmployeeServlet.java中,涉及员工实体类Employee、web.xml配置、以及前端HTML、CSS和JS文件。在成功部署并启动Tomcat后,可以通过特定的URL访问并体验重定向过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • EmployeeServlet.java
public void queryEmployeeList(HttpServletRequest request, HttpServletResponse response){
        List<Employee> emps =empDao.queryList(Employee.class);
        try {
            String paramStr = "";
            for(Employee emp : emps){
                paramStr+=emp.toString()+";";
            }
            /*
             * 重定向传递参数的时候必须做字符的转化,先将参数转化为encode,
             * 然后在前端使用js代码,获取到url然后将参数获取到,再遍历出来
             */
            String param = java.net.URLEncoder.encode(paramStr.substring(0,paramStr.length()-1),"UTF-8");
            response.sendRedirect("html/employee.html?"+param);
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }
  • Employee.java(员工实体类)
package entity;

import java.io.Serializable;

import annotation.Column;
import annotation.Tab;

@Tab(table = "employee")
public class Employee implements Serializable{
    private static final long serialVersionUID = 1L;

    @Column(name="emp_id",type=Integer.class,isNull = false,isPrimary = true,isAutoIncrement=true,isUnique = false)
    private Integer emp_id;

    @Column(name="emp_code",type=String.class,len = 30,isNull = false,isUnique = false)
    private String emp_code;

    @Column(name="emp_name",type=String.class,len = 30,isNull = true)
    private String emp_name;

    public Employee(){
        super();
    }

    public Employee(String emp_code, String emp_name) {
        this();
        this.emp_code = emp_code;
        this.emp_name = emp_name;
    }

    public Integer getEmp_id() {
        return emp_id;
    }
    public void setEmp_id(Integer emp_id) {
        this.emp_id = emp_id;
    }
    public String getEmp_code() {
        return emp_code;
    }
    public void setEmp_code(String emp_code) {
        this.emp_code = emp_code;
    }
    public String getEmp_name() {
        return emp_name;
    }
    public void setEmp_name(String emp_name) {
        this.emp_name = emp_name;
    }

    /**
     * 重写父类的toString方法,将对象属性以field&value的形式组装起来
     */
    @Override
    public String toString() {
        return "emp_id=" + emp_id + "&emp_code=" + emp_code + "&emp_name=" + emp_name;
    }
}
  • web.xml(配置请求路径与servlet类之间的映射)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <display-name>employee</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>EmployeeServlet</servlet-name>
        <servlet-class>web.EmployeeServlet</servlet-class>
    </servlet>
    <!--类与请求地址的映射-->
    <servlet-mapping>
        <!--与<servlet>标签中的<servlet-name>一致,实现servlet映射,找到相应的servlet的处理类-->
        <servlet-name>EmployeeServlet</servlet-name>
        <!--servlet的请求地址,在浏览器中除去主机地址后的访问地址-->
        <url-pattern>/EmployeeServlet</url-pattern>
    </servlet-mapping>
</web-app>
  • 前端employee.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>员工信息</title>
<link href="../css/employeeInfo.css" rel="stylesheet">
</head>
<script type="text/javascript" src="../js/LocationURL.js"></script>
<script type="text/javascript" src="../js/employeeInfo.js"></script>
<body></body>
</html>
  • 前端employeeInfo.css
td{
    width:100px;
    height:30px;
    border:1px dotted red;
    text-align:center;
}
  • 前端LocationURL.js(地址修改类文件)
function LocationURL(){
    this.url=null;
}
function LocationURL(url){
    this.url = url;
}
LocationURL.prototype={
    /**
     * 更改地址栏的url,将实际访问地址隐藏
     * 
     * 使用历史对象history的history.pushState(state, title, url)
     * 使用历史对象history的history.replaceState(state, title, url)
     */
    reloadUrl : function(){
        /**
         * history.pushState(state, title, url)
         * state:与要跳转到的URL对应的状态信息。
         * title:不知道干啥用,传空字符串就行了。
         * url:要跳转到的URL地址,不能跨域。
         */
        history.pushState(this.url, this.url, this.url);
    }
}
  • 前端employeeInfo.js
window.onload=function(){
    //创建一个表格元素
    var tab = createTAB();

    //创建表头
    createTH(tab);

    //根据数据库中查询出来的结构创建行
    createTR(tab);

    //将跳转地址修改为原始的跳转地址,实现隐藏地址栏的参数
    new LocationURL(location()).reloadUrl();

    //创建一个表格元素
    function createTAB(){
        var tab = document.createElement("table");
        document.body.appendChild(tab);
        return tab;
    }

    //创建表头
    function createTH(tab){
        //创建表头
        var tr = tab.insertRow();

        //创建表头的单元格元素
        tr.insertCell().innerHTML = "选项";
        tr.insertCell().innerHTML = "员工编号";
        tr.insertCell().innerHTML = "员工姓名";
    }

    //根据表数据创建行
    function createTR(tab,param_url){
        //window.location.search获取问号及以后的参数
        //window.location.href获取整个地址
        var param_url = decodeURIComponent(window.location.href);
        var param_ = param_url.split("?");
        var param_0 = param_.length>1?param_[1]:null;
        if(param_0==null){
            return;
        }
        var param_1 = param_0.split(";");
        if(param_1.length>0){

            for(var i in param_1){
                var tr = tab.insertRow(-1);

                createTD(param_1[i],tr);
            }
        }
     }

    //根据表数据创建列,并设值
    function createTD(param_1,tr){
        var param_2 = param_1.split("&");
        for(var i in param_2){
            var param_3 = param_2[i].split("=");

            var td = tr.insertCell();
            for(var j in param_3){
                if(i==0){
                    td.innerHTML="<input type='checkbox' style='width:17px;height:17px'/>";
                }else{
                    td.innerHTML=param_3[1];
                }
            }
        }
     }

    //实现地址替换功能,将实际请求地址隐藏
    function location(){
        //获取location对象
        var local = window.location;

        //根据location对象的属性组装主机地址
        var localhost = local.protocol+ "//" + local.host ;

        //当前地址
        var localhref = localhost + local.pathname;

        //servlet跳转的地址
        var servlethref = localhost + "/employee/EmployeeServlet" ;

        return servlethref;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值