div+css基础——8.绝对定位应用(照片签名)

本文通过一个具体的实例展示了如何使用CSS的绝对定位来实现照片上的签名效果。该实例中,一张图片作为背景放置在一个相对定位的div内,而签名则放置于另一个绝对定位的div内,并精确设置其位置。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title>绝对定位应用(照片签名)</title>
  <meta name="keywords" content="自定义关键字"/>
  <meta name="description" content="自定义描述"/>
  <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
  <style type="text/css">
	#image{
		position:relative;
		background-image:url(girl.png);
		width:600px;
		height:450px;
	}
	#name{
		position:absolute;
		right:30px;
		bottom:30px;
		font-size:30px;
		color:red;
		font-weight:bold;
	}
  </style>
 </head>
 <body>
	<div id="image">
		<div id="name">芙蓉姐姐</div>
	</div>
 </body>
</html>


效果截图:

### 创建带CSS样式的JSP登录页面 为了实现一个带有CSS样式并能连接到MySQL数据库的登录页面,可以按照如下方式构建项目结构: #### 1. 构建HTML/CSS部分 首先,在`WebContent`目录下创建一个新的文件夹用于存储静态资源,比如命名为`statics`。在这个文件夹内再分别建立两个子文件夹——`css`和`images`来分类管理样式表以及图片等资源。 接着,在`css`文件夹里新建名为`style.css`的文件定义所需的样式规则[^1]。 ```css body { font-family: Arial, sans-serif; } .container { width: 30%; margin: auto; padding-top: 50px; } form div { margin-bottom: 1rem; } input[type="text"], input[type="password"] { width: calc(100% - 22px); height: 40px; border-radius: 5px; padding-left: 10px; } button { background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; cursor: pointer; width: 100%; } ``` 随后,在`WebContent`根路径下创建`login.jsp`作为登录界面入口文档,并引入上述自定义样式。 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>Login Page</title> <!-- 引入外部样式 --> <link rel="stylesheet" href="./statics/css/style.css"/> </head> <body> <div class="container"> <h2>Sign In</h2> <form action="${pageContext.request.contextPath}/LoginServlet" method="post"> <div><label>User Name : </label></div> <div><input type="text" name="username"/></div> <div><label>Password:</label></div> <div><input type="password" name="pwd"/></div> <div><button type="submit">Submit</button></div> </form> </div> </body> </html> ``` #### 2. 编写JavaBean实体类User.java 在项目的源码包(`src`)中新增加一个名为`Model`的新包用来放置业务逻辑模型对象。在此处添加`User.java`文件以封装用户信息字段[^3]。 ```java package servlet02.Model; public class User { private String username; private String password; // Getter & Setter 方法省略... public User(String username, String password){ this.username = username; this.password = password; } public User(){} } ``` #### 3. 实现DAO层接口及其具体实现 UserDaoImpl.java 同样位于`Model`包内部继续追加`UserDao.java`接口声明通用方法签名;紧接着提供具体的实现版本即`UserDaoImpl.java`负责处理实际的数据存取操作。 ```java // UserDao.java 接口 package servlet02.Model; import java.sql.SQLException; public interface UserDao { boolean checkUser(User user) throws SQLException; } // UserDaoImpl.java 类 package servlet02.Model; import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement; import com.mysql.jdbc.ResultSet; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import java.sql.SQLException; public class UserDaoImpl implements UserDao{ @Override public boolean checkUser(User user)throws SQLException { Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; try{ Context ctx=new InitialContext(); DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); conn=(Connection)ds.getConnection(); String sql="select * from users where username=? and password=?"; pstmt=(PreparedStatement)conn.prepareStatement(sql); pstmt.setString(1,user.getUsername()); pstmt.setString(2,user.getPassword()); rs=pstmt.executeQuery(); return rs.next(); }finally{ if(rs!=null){rs.close();} if(pstmt!=null){pstmt.close();} if(conn!=null){conn.close();} } } } ``` #### 4. 开发Servlet控制器 LoginServlet.java 最后一步是在`WEB-INF/classes/servlet02/Controller`位置设立新的包名空间存放控制层组件。这里要做的就是编写`LoginServlet.java`程序片段完成接收客户端请求参数解析、调用持久化服务验证身份合法性并向视图反馈响应结果的任务[^2]。 ```java package servlet02.Controller; import servlet02.Model.User; import servlet02.Model.UserDaoImpl; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取前端传来的用户名密码 String userName=request.getParameter("username"); String pwd=request.getParameter("pwd"); // 将其打包成User对象传递给DAO层做进一步判断 User u=new User(userName,pwd); UserDaoImpl userDao=new UserDaoImpl(); try { if(userDao.checkUser(u)){ // 如果匹配成功则重定向至主页或其他指定URL地址 response.sendRedirect(request.getContextPath()+"/success.jsp"); }else{ // 否则返回错误提示信息让用户重新尝试登陆动作 response.getWriter().write("<script>alert('Invalid credentials! Please retry.');window.history.back(-1);</script>"); } } catch (SQLException e) { throw new RuntimeException(e); } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值