不使用框架来发送数据到服务器后台

来源:互联网 发布:云软件多少钱呢 编辑:程序博客网 时间:2024/05/17 08:52

背景

因为这学期学校有JavaEE的课,第一个大作业就是不使用框架来写一个管理系统。昨晚开始通宵写到今天早上八点半,还是学了很多东西的。

系统需求

这里为了简单,就向服务器发送一个表单吧!使用两种提交方式,一种是使用表单提交,另外一种是ajax提交。

开发工具:eclipse
服务器:tomcat

基本架构搭建

首先新建一个动态的Web工程。

开始写前台页面,代码如下:

<form action="user/adduser" method="post">    用户姓名:<input type="text" name="username"/><br/><br/>    用户密码:<input type="password" name="password"/><br/><br/>    <input type="submit"  value="新增" /></form>

有一点html基础的人都能看懂这个代码,就是两个输入框,一个新增按钮。
表单的提交地址是 adduser,提交方式为 post

然后写一个后台的控制器,取名就叫UserController

import java.io.IOException;import java.util.Date;import java.util.Map;import java.util.Set;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class UserController extends HttpServlet {    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response) {        //处理前台传过来的数据    }    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // TODO Auto-generated method stub        super.doGet(req, resp);    }}

注意:如果没有servlet包,记得在build path那里加入tomcat中相关的包。

最后就是怎样把前后台关联起来呢?

这个就叫在 web.xml 中进行配置了!

<?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" id="WebApp_ID" version="2.5">    <!--配置servlet -->    <servlet>        <servlet-name>UserController</servlet-name>        <servlet-class>com.user.controller.UserController        </servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>UserController</servlet-name>        <url-pattern>/user/adduser</url-pattern>    </servlet-mapping></web-app>

上面就将前后台关联起来了!

我们点击一下前台页面的按钮,发现请求连通了:

发送请求

开始编程

前台form表单提交数据

因为是表单提交,所以点击一下按钮就把数据传给后台了。

后台获取数据

那么后台要怎样获取数据呢?答案就是从request中获取了。
那么要怎样获取呢,这里我封装了一个工具类,将request映射成一个Map。

package com.user.utils;import java.io.UnsupportedEncodingException;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;/** * 作者:白芷 * 时间:2017/03/26 * 功能:将request装转化为Map键值对 * */public class CastRequestToMap {    public static Map castRequestToMap(HttpServletRequest request){        try {            request.setCharacterEncoding("UTF-8");  //设置编码        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        Map map = new HashMap();          Enumeration paramNames = request.getParameterNames();          while (paramNames.hasMoreElements()) {              String paramName = (String) paramNames.nextElement();              String[] paramValues = request.getParameterValues(paramName);              if (paramValues.length == 1) {                  String paramValue = paramValues[0];                  if (paramValue.length() != 0) {                      map.put(paramName, paramValue);                  }              }          }         return map;    }}

这里你把 request 传过去就可以获取一个map了。

那我们来使用这个工具类来打印一下前台传过来的数据:

    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response) {        //处理前台传过来的数据        Map map=CastRequestToMap.castRequestToMap(request);        Set<Map.Entry<String, String>> set = map.entrySet();          System.out.println("------------------------------");          for (Map.Entry entry : set) {              System.out.println(entry.getKey() + ":" + entry.getValue());          }          System.out.println("------------------------------");    }

前台输入 张三 123456
后台打印:

后台数据

表明我们的前后台数据传输成功!接下来你就可以对你的数据进行你想要的处理了!


2017/03/27日添加

看到一个朋友舍弃了 web.xml,改用注解来实现寻找路径。
上面的控制器程序就可以加上注解,如下:

@WebServlet(urlPatterns="/user/adduser")public class UserController extends HttpServlet {    //内容省略}

2 0