今天又把jsp註冊登錄做了一下 從index.jsp寫表單開始
action="user.do?method=login" 寫註冊 需要注意給用戶名 密碼添加name屬性
寫完第一個jsp文件 再寫servlet 新建new->package->(設置包名爲com.servlet)->新建servlet文件
需要注意可以將which method stubs would you like to create?下面的√全取消
設置servlet名字爲UserServlet後點擊next->設置Servlet/JSP Mapping URL爲在原來新建的jsp文件寫的user.do就行了
這是我寫的UserServlet;
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.UserDAO;
import com.pojo.User;
public class UserServlet extends HttpServlet {
private UserDAO userdao = new UserDAO();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String method = request.getParameter("method");
if("login".equals(method)){
doLogin(request , response);
}
if("regist".equals(method)){
doRegist(request, response);
}
}
private void doRegist(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String repassword = request.getParameter("repassword");
String code = request.getParameter("code");
if(!password.equals(repassword)){
response.getWriter().print("<script>alert('兩次密碼不一致!');location='regist.jsp'</script>");
return ;
}
String realCode = (String) request.getSession().getAttribute("code");
if(!code.equalsIgnoreCase(realCode)){
response.getWriter().print("<script>alert('驗證碼不正確!');location='regist.jsp'</script>");
return ;
}
int n = userdao.regist(username, password);
if(n>0){
response.getWriter().print("<script>alert('註冊成功!');location='index.jsp'</script>");
}else{
response.getWriter().print("<script>alert('註冊失敗!');location='regist.jsp'</script>");
}
}
private void doLogin(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userdao.login(username, password);
if(user!=null){
//如果登錄成功 在session中存值
request.getSession().setAttribute("user", user);
request.getRequestDispatcher("main.jsp").forward(request, response);
return ;
}
response.sendRedirect("index.jsp");
}
}
這裏 雖然很簡單 做一個if判斷 執行method的方法
這是提前寫好的DBUtil.java 連接數據庫
package com.util;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class DBUtil {
// 1.實例化連接池
public static Vector<Connection> connectionPool = new Vector<Connection>();
// 2.初始化連接池
static {
try {
Class.forName("com.mysql.jdbc.Driver");
for (int i = 0; i < 15; i++) {
Connection connection = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/s69", "root", "admin");
connectionPool.add(connection);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 3.取連接
public static Connection getConnection() {
Connection connection = connectionPool.get(0);
connectionPool.remove(0);
return connection;
}
// 4.釋放連接
public static void releaseConnection(Connection connection) {
connectionPool.add(connection);
}
// 5.增刪改
public static int zsg(String sql, Object... p) {
Connection connection = getConnection();
int n = 0;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
n = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return n;
}
// 查詢
public static List query(Class c, String sql, Object... p) {
Connection connection = getConnection();
List list = null;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
list = new ArrayList();
while (rs.next()) {
Object object = c.newInstance();
for (int i = 1; i <= count; i++) {
String fieldname = rsmd.getColumnLabel(i);
Field field = c.getDeclaredField(fieldname);
field.setAccessible(true);
field.set(object, rs.getObject(i));
}
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return list;
}
}
增刪改就相當於一個executeUpdate(); 寫一個zsg函數返回值設爲(String sql,Object... p) 根據不同的sql執行不同的數據庫操作
// 5.增刪改
public static int zsg(String sql, Object... p) {
Connection connection = getConnection();
int n = 0;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
n = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return n;
}
而查詢則返回一個List集合
// 查詢
public static List query(Class c, String sql, Object... p) {
Connection connection = getConnection();
List list = null;
try {
PreparedStatement ps = connection.prepareStatement(sql);
for (int i = 0; i < p.length; i++) {
ps.setObject(i + 1, p[i]);
}
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
list = new ArrayList();
while (rs.next()) {
Object object = c.newInstance();
for (int i = 1; i <= count; i++) {
String fieldname = rsmd.getColumnLabel(i);
Field field = c.getDeclaredField(fieldname);
field.setAccessible(true);
field.set(object, rs.getObject(i));
}
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.releaseConnection(connection);
}
return list;
}
有流的操作需要關閉流
field.set(object, rs.getObject(i));
寫UserServlet的時候會寫到dao層的方法所以在UserDAO.java中
package com.dao;
import java.util.List;
import com.pojo.User;
import com.util.DBUtil;
//第三步
public class UserDAO {
//登錄
public User login(String username, String password) {
String sql = "select username , password from userinfo where username = ? and password = ? ";
List<User> list = DBUtil.query(User.class, sql, username,password);
if (list.size() > 0) {
return list.get(0);
}
return null;
}
public static int regist(String username, String password) {
String sql="insert into userinfo(username,password)values(?,?)";
int n=DBUtil.zsg(sql, username,password);
return n;
}
}
將userinfo數據庫表中的字段寫到com.pojo的User.java中
package com.pojo;
public class User {
private String username;
private String password;
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;
}
}
然後就是其他jsp的界面實現了
main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${not empty user }">
歡迎:${user.username }
</c:if>
<c:if test="${empty user}">
<a href="index.jsp">登錄</a>|
<a href="regist.jsp">註冊</a>
</c:if>
regist.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<form action="user.do?method=regist" method="post">
用戶名:<input type="text"name="username"/><br>
密碼:<input type="password"name="password"/><br>
確認密碼:<input type="password"name="repassword"/><br>
驗證碼:<input type="text" name="code"/><img src="image.do"/><br>
<input type="submit"value="註冊"/>
</form>
哈哈哈 心不靜 寫不下去了 就到這裏吧 對於Jsp的學習我還是感覺是後知後覺的 領悟的太慢了 可能還是對於java的基礎知識沒那麼瞭解 所以一些方法的使用還是不會 不熟。這是個問題。
哦對了 還有這個驗證碼的ImageServlet.java:
package com.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImageServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String s="abcdefghijklmnopqrstuvwxyz0123456789";
Random random=new Random();
StringBuffer buffer=new StringBuffer();
for (int i = 0; i <4; i++) { //表示驗證碼從 36個值中取四個
int index=random.nextInt(36);
char ch=s.charAt(index);
buffer.append(ch);
}
String code=buffer.toString();
request.getSession().setAttribute("code",code);
//畫驗證碼圖
BufferedImage bufferedImage=new BufferedImage(100,30,BufferedImage.TYPE_INT_RGB);
Graphics graphics=bufferedImage.getGraphics();
graphics.setColor(Color.RED);
graphics.fillRect(0, 0, 100, 30); //填充矩形區域
graphics.setColor(Color.YELLOW); //設置驗證碼裏面文字顏色
graphics.setFont(new Font("羅體",Font.BOLD,30)); //設置圖片裏面驗證碼的字體及大小
graphics.drawString(code.charAt(0)+"", 10, 29);
graphics.drawString(code.charAt(1)+"", 30, 26);
graphics.drawString(code.charAt(2)+"", 50, 27);
graphics.drawString(code.charAt(3)+"", 70, 25);
OutputStream outputStream = response.getOutputStream();
ImageIO.write(bufferedImage, "JPEG", outputStream);
outputStream.close();
}
}
想要做一個好項目 就是很多功能都能實現的那種。以前感覺學習編程會很吃力,其實現在學到了現在才感覺到java的深奧。很多東西都是需要自己一點一滴去學習去領悟的!!!
如果你恰好是初學java的小白,請別放棄。請加把勁。OJBK