Tomcat__Post实现简单登陆功能

服务器端:

            1) 新建Tomcat Project  额 这里不是Dynamic Web Project  我也不知道两者区别

            2) WEB-INF/src下新建一个Package 命名com.servlet.login   在Package下 新建一个类 LoginAcion.java  extends HttpServlet

            3)  覆写其内的doGet()  doPost()     这里我们doGet() 仅用来在浏览器测试Tomcat Project能否正常运行  


代码如下:

<pre name="code" class="java">public class LoginAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public LoginAction() {
		super();
	}

	// doGet 这里没用到 仅用来测试Servlet能否运行而已
	protected void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		res.setContentType("text/html;charset=utf-8");
		req.setCharacterEncoding("utf-8");
		res.setCharacterEncoding("utf-8");

		PrintWriter out = res.getWriter();
		out.println("Hello, Brave new World!");
		out.close();
	}

	// 传入参数,doPost请求和doGet直接附在URL上不同,doPost用outputStream.write(data);
	// data为字符串 如password=123&user_name="admin"
	protected void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		if (null == req) {
			return;
		}
		// 中文问题
		res.setContentType("text/html;charset=utf-8");
		req.setCharacterEncoding("utf-8");
		res.setCharacterEncoding("utf-8");

		PrintWriter out = res.getWriter();
		String username = req.getParameter("user_name");
		String password = req.getParameter("password");
		// 这里测试 username="admin" password="123"
		if (username.equals("admin")) {
			if (password.equals("123")) {
				out.println("0"); // /< 正确
			} else {
				out.println("2"); // /< 密码错误
			}
		} else {
			out.println("1"); // /< 用户名错误
		}
		out.flush();
		out.close();
	}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>login</servlet-name>    <!-- 名字随便 -->
        <servlet-class>com.servlet.login.LoginAction</servlet-class>    <!-- servlet类名-->
    </servlet>

    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>    <!-- url访问虚拟路径,最后我们就是通过工程名/login进行访问的,像这样http://127.0.0.1:8080/LoginAction/login-->
    </servlet-mapping>
</web-app>

web.xml设置参考博文: http://www.linuxidc.com/Linux/2012-06/63935.htm

 

手机端:

MainActivity.java

public class MainActivity extends Activity {
	private Button button_login;
	private EditText user_name;
	private EditText password;
	LinearLayout layout;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);

		findViews();
		setListeners();
	}

	public void findViews() {
		button_login = (Button) findViewById(R.id.login);
		user_name = (EditText) findViewById(R.id.user_name);
		password = (EditText) findViewById(R.id.password);
	}

	public void setListeners() {
		button_login.setOnClickListener(loginTest);
	}

	private Button.OnClickListener loginTest = new Button.OnClickListener() {
		@SuppressLint("NewApi")
		@Override
		public void onClick(View arg0) {
			// TODO Auto-generated method stub
			String userName = null;
			String passWord = null;

			// /< 简单判断用户是否输入用户名,是否输入密码
			if ((userName = user_name.getText().toString()).isEmpty()) {
				if (password.getText().toString().isEmpty()) {
					Toast.makeText(MainActivity.this, "请输入用户名和密码",
							Toast.LENGTH_SHORT).show();
					return;
				}
				Toast.makeText(MainActivity.this, "请输入用户名!", Toast.LENGTH_SHORT)
						.show();
				return;
			} else if ((passWord = password.getText().toString()).isEmpty()) {
				Toast.makeText(MainActivity.this, "请输入密码", Toast.LENGTH_SHORT)
						.show();
				return;
			}

			loginHandle(userName, passWord);

		}

	};

	public void loginHandle(final String userName, final String password) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				// /< 发送用户名和密码到服务器进行校验,并获得服务器返回值
				Map<String, String> params = new HashMap<String, String>();
				params.put("user_name", userName);
				params.put("password", password);
				String encode = "utf-8";

				int responseCode = HttpUtils.sendMessage(params, encode);
				Looper.prepare();
				if (0 == responseCode) {
					Toast.makeText(MainActivity.this, "登录成功",
							Toast.LENGTH_SHORT).show();
				} else if (1 == responseCode) {
					Toast.makeText(MainActivity.this, "用户名错误!",
							Toast.LENGTH_SHORT).show();
				} else if (2 == responseCode) {
					Toast.makeText(MainActivity.this, "密码错误!",
							Toast.LENGTH_SHORT).show();
				} else {
					Toast.makeText(MainActivity.this, "异常!", Toast.LENGTH_SHORT)
							.show();
				}
				Looper.loop();

				// 执行完毕后给handler发送一个空消息
				handler.sendEmptyMessage(0);
			}
		}).start();
	}

	// 定义Handler对象
	private Handler handler = new Handler() {
		@Override
		// 当有消息发送出来的时候就执行Handler的这个方法
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			// TODO 处理UI
		}
	};
}

HttpUtils工具类

public class HttpUtils {
	// /< 请求服务URL
	private final static String PATH = "http://10.0.2.2:8080/TaxiServlet/login";
	private static URL url;

	public HttpUtils() {
		// TOiDO Auto-generated constructor stub
	}

	/**
	 * 向服务端提交数据
	 * @param params
	 *            url参数
	 * @param encode
	 *            字节编码
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static int sendMessage(Map<String, String> params, String encode) {
		// /< 初始化URL
		StringBuffer buffer = new StringBuffer();

		if (null != params && !params.isEmpty()) {
			for (Map.Entry<String, String> entry : params.entrySet()) {
				buffer.append(entry.getKey()).append("=")
						.append(URLEncoder.encode(entry.getValue()))
						.append("&");
			}
			// /< 删除多余的&
			buffer.deleteCharAt(buffer.length() - 1);
		}

		// /< show url
		Log.i("HttpUtils", "test--show url " + buffer.toString());

		try {
			url = new URL(PATH);
			if (null != url) {
				HttpURLConnection urlConnection = (HttpURLConnection) url
						.openConnection();
				if (null == urlConnection) {
					return -1;
				}
				urlConnection.setConnectTimeout(3000);
				urlConnection.setRequestMethod("POST"); // /< 设置请求方式
				urlConnection.setDoInput(true); // /< 表示从服务器获取数据
				urlConnection.setDoOutput(true); // /< 表示向服务器发送数据

				byte[] data = buffer.toString().getBytes();
				// /< 设置请求体的是文本类型
				urlConnection.setRequestProperty("Content-Type",
						"application/x-www-form-urlencoded");
				urlConnection.setRequestProperty("Content-Length",
						String.valueOf(data.length));
				// /< 获得输出流
				OutputStream outputStream = urlConnection.getOutputStream();
				outputStream.write(data);
				outputStream.close();
				// /< 获得服务器的响应结果和状态码
				int responseCode = urlConnection.getResponseCode();
				if (200 == responseCode) {
					return changeInputStream(urlConnection.getInputStream(),
							encode);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return -1;
	}

	/**
	 * 获得网络返回值【0 - 正确 1 - 用户名错误 2 - 密码错误】
	 * 
	 * @param inputStream
	 * @param encode
	 * @return
	 */
	private static int changeInputStream(InputStream inputStream, String encode) {
		// TODO Auto-generated method stub
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		byte[] data = new byte[1024];
		int len = 0;
		String result = "";
		if (null != inputStream) {
			try {
				while ((len = inputStream.read(data)) != -1) {
					outputStream.write(data, 0, len);
				}
				result = new String(outputStream.toByteArray(), encode);
				len = Integer.parseInt(result.substring(0, 1));

			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return len;
	}
}

截图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值