服务器端:
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;
}
}
截图: