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;
	}
}

截图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个简单的注册登录功能的示例代码,使用JavaWeb和MySQL实现: 1. 创建数据库表 首先创建一个名为“user”的MySQL数据库表,包含以下字段: ``` CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username_UNIQUE` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 2. 创建JavaBean类 创建一个名为“User”的JavaBean类,包含以下属性和方法: ```java public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` 3. 编写DAO层代码 创建一个名为“UserDAO”的类,用于操作数据库。包含以下方法: ```java public class UserDAO { // 数据库连接信息 private static final String DRIVER = "com.mysql.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/test"; private static final String USERNAME = "root"; private static final String PASSWORD = "123456"; // 获取数据库连接 public Connection getConnection() throws SQLException, ClassNotFoundException { Class.forName(DRIVER); return DriverManager.getConnection(URL, USERNAME, PASSWORD); } // 关闭数据库连接 public void closeConnection(Connection conn, Statement stmt, ResultSet rs) throws SQLException { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } // 根据用户名查询用户信息 public User getUserByUsername(String username) throws SQLException, ClassNotFoundException { User user = null; Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = getConnection(); stmt = conn.prepareStatement("SELECT * FROM user WHERE username = ?"); stmt.setString(1, username); rs = stmt.executeQuery(); if (rs.next()) { user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); } } finally { closeConnection(conn, stmt, rs); } return user; } // 添加用户信息 public void addUser(User user) throws SQLException, ClassNotFoundException { Connection conn = null; PreparedStatement stmt = null; try { conn = getConnection(); stmt = conn.prepareStatement("INSERT INTO user (username, password) VALUES (?, ?)"); stmt.setString(1, user.getUsername()); stmt.setString(2, user.getPassword()); stmt.executeUpdate(); } finally { closeConnection(conn, stmt, null); } } } ``` 4. 编写Servlet代码 创建一个名为“RegisterServlet”的Servlet类,用于处理用户注册请求。包含以下代码: ```java public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); UserDAO dao = new UserDAO(); try { // 判断用户名是否已存在 if (dao.getUserByUsername(username) != null) { request.setAttribute("message", "用户名已存在!"); request.getRequestDispatcher("/register.jsp").forward(request, response); } else { // 添加用户信息 User user = new User(); user.setUsername(username); user.setPassword(password); dao.addUser(user); request.setAttribute("message", "注册成功!"); request.getRequestDispatcher("/login.jsp").forward(request, response); } } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); request.setAttribute("message", "注册失败,请稍后重试!"); request.getRequestDispatcher("/register.jsp").forward(request, response); } } } ``` 创建一个名为“LoginServlet”的Servlet类,用于处理用户登录请求。包含以下代码: ```java public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); UserDAO dao = new UserDAO(); try { // 根据用户名获取用户信息 User user = dao.getUserByUsername(username); if (user == null) { request.setAttribute("message", "用户名不存在!"); request.getRequestDispatcher("/login.jsp").forward(request, response); } else if (!user.getPassword().equals(password)) { request.setAttribute("message", "密码错误!"); request.getRequestDispatcher("/login.jsp").forward(request, response); } else { request.getSession().setAttribute("user", user); request.getRequestDispatcher("/index.jsp").forward(request, response); } } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); request.setAttribute("message", "登录失败,请稍后重试!"); request.getRequestDispatcher("/login.jsp").forward(request, response); } } } ``` 5. 编写JSP页面 创建一个名为“register.jsp”的JSP页面,用于用户注册。包含以下代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <% String message = request.getAttribute("message") == null ? "" : request.getAttribute("message").toString(); %> <% if (!message.equals("")) { %> <p><%= message %></p> <% } %> <form action="register" method="post"> <p> 用户名:<input type="text" name="username" required> </p> <p> 密码:<input type="password" name="password" required> </p> <p> <input type="submit" value="注册"> </p> </form> <a href="login.jsp">已有账号?去登录</a> </body> </html> ``` 创建一个名为“login.jsp”的JSP页面,用于用户登录。包含以下代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> </head> <body> <h1>用户登录</h1> <% String message = request.getAttribute("message") == null ? "" : request.getAttribute("message").toString(); %> <% if (!message.equals("")) { %> <p><%= message %></p> <% } %> <form action="login" method="post"> <p> 用户名:<input type="text" name="username" required> </p> <p> 密码:<input type="password" name="password" required> </p> <p> <input type="submit" value="登录"> </p> </form> <a href="register.jsp">没有账号?去注册</a> </body> </html> ``` 创建一个名为“index.jsp”的JSP页面,用于用户登录后的首页。包含以下代码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>欢迎 <%= ((User) session.getAttribute("user")).getUsername() %> </h1> <a href="logout">退出登录</a> </body> </html> ``` 6. 部署项目 将以上代码保存到对应的文件中,并将JavaBean类和DAO类的.class文件放到WEB-INF/classes目录下。将MySQL驱动文件放到WEB-INF/lib目录下。将所有文件打包成.war文件,并部署到Tomcat或其他JavaWeb服务器上。 7. 测试功能 访问http://localhost:8080/login.jsp,进行用户登录;访问http://localhost:8080/register.jsp,进行用户注册。如果用户名已存在,则注册失败;如果用户名不存在或密码错误,则登录失败;登录成功后跳转到http://localhost:8080/index.jsp页面,显示欢迎信息和退出登录按钮。点击退出登录按钮,退出登录并返回到登录页面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值