笔记,只供自己参考。相当菜了。
Eclipse -- Kepler Service Release 1 JDK 1.6
Tomcat 7
Oracle 10
1 新建Web工程。写一个静态页面,两个jsp页面,一个CCS,一个Servlet,一个数据库访问类。
2 写web.xml
(1)index.html 默认页面,只是为了验证一下
<
welcome-file-list
>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="onlyone.css" type="text/css" />
<title>一</title>
</head>
<body>
<div id="content">
少年,在干嘛呢?
</div>
</body>
</html>
(2)login.jsp // 登录界面
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>入口</title>
<link rel="stylesheet" href="onlyone.css" type="text/css" />
</head>
<body>
<div id="content">
<span style="color:red;font-weight:bold">
<%if (request.getAttribute("err") != null)
{
out.println(request.getAttribute("err") + "<br/>");
}%>
</span>
<!-- 登录表单 -->
<form id="login" method="post" action="login">
用户名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="pass"/><br/>
<input type="submit" value="登录" /><br/>
</form>
</div>
</body>
</html>
(3)welcome.jsp // 登录成功后的界面
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>欢迎</title>
<link rel="stylesheet" href="onlyone.css" type="text/css" />
</head>
<body>
<div id="content">
勇士,你要去哪?
</div>
</body>
</html>
(4)LoginServlet.java
package servlet;
import java.io.IOException;
import java.sql.ResultSet;
import javax.servlet.RequestDispatcher;
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 javax.servlet.http.HttpSession;
import dao.DbDao;
/**
* Servlet implementation class LoginServlet
*/
//@WebServlet(description = "登录控制器", urlPatterns = { "/login" })
// 如果在web.xml中配置了,在Annotation中的配置就不会有效果
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String errMsg = "";
RequestDispatcher rd;
String username = request.getParameter("username");
String pass = request.getParameter("pass");
try
{
DbDao dd = new DbDao("oracle.jdbc.driver.OracleDriver",
"jdbc:oracle:thin:localhost:1521:orcl", "system", "abc123");
ResultSet rs = dd.query("select pass from user_table " + "where name=?", username);
if (rs.next())
{
if (rs.getString("pass").equals(pass))
{
HttpSession session = request.getSession(true);
session.setAttribute("name", username);
rd = request.getRequestDispatcher("/welcome.jsp");
rd.forward(request, response);
}
else
{
errMsg += "您的用户名密码不符合,请重新输入";
}
}
else
{
errMsg += "您的用户名不存在,请先注册";
}
}
catch(Exception e)
{
e.printStackTrace();
}
if (errMsg != null && !errMsg.equals(""))
{
rd = request.getRequestDispatcher("/login.jsp");
request.setAttribute("err", errMsg);
rd.forward(request, response);
}
}
}
(5)DbDao.java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DbDao
{
private Connection conn;
private String driver;
private String url;
private String username;
private String pass;
public DbDao()
{
}
public DbDao(String driver, String url, String username, String pass)
{
super();
this.driver = driver;
this.url = url;
this.username = username;
this.pass = pass;
}
public String getDriver()
{
return driver;
}
public void setDriver(String driver)
{
this.driver = driver;
}
public String getUrl()
{
return url;
}
public void setUrl(String url)
{
this.url = url;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPass()
{
return pass;
}
public void setPass(String pass)
{
this.pass = pass;
}
// 获取数据库连接
public Connection getConnection() throws Exception
{
if (conn == null)
{
Class.forName(this.driver);
conn = DriverManager.getConnection(url, username, pass);
}
return conn;
}
// 插入记录
public boolean insert(String sql, Object... args) throws Exception
{
PreparedStatement pstmt = getConnection().prepareStatement(sql);
for (int i = 0; i < args.length; i++)
{
pstmt.setObject(i + 1, args[i]);
}
if (pstmt.executeUpdate() != 1)
{
return false;
}
return true;
}
// 查询
public ResultSet query(String sql, Object... args) throws Exception
{
PreparedStatement pstmt = getConnection().prepareStatement(sql);
for (int i = 0; i < args.length; i++)
{
pstmt.setObject(i + 1, args[i]);
}
return pstmt.executeQuery();
}
// 修改
public void modify(String sql, Object... args) throws Exception
{
PreparedStatement pstmt = getConnection().prepareStatement(sql);
for (int i = 0; i < args.length; i++)
{
pstmt.setObject(i + 1, args[i]);
}
pstmt.executeUpdate();
pstmt.close();
}
// 关闭连接
public void closeConn() throws Exception
{
if (conn != null && !conn.isClosed())
{
conn.close();
}
}
}
(6)onlyone.ccs
@CHARSET
"UTF-8";
/* 主要的模块 */
#content
{
margin:auto;
width:900px;
height:600px;
font-size:2em;
font-style:italic;
font-weight:bold;
color:#990000;
font-family:"Times New Roman",Georgia,Serif;
background-color:#339933;
}
(7)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0" metadata-complete="true">
<display-name>魔兽世界</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!-- Servlet -->
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>servlet.LoginServlet</servlet-class>
</servlet>
<!-- servlet-mapping -->
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
3 效果如下
碰到的两个问题
pageEncoding设置为GBK, html的meta标签中charset设置为GBK,但是在浏览器中显示中文乱码
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>欢迎</title>
</head>
<body>
勇士,你要去哪?
</body>
</html>
打开tomcat运行时生成的java文件,发现服务器发送出去的就是乱码。问题不在浏览器端,而在于服务器没有正确解析jsp代码。
out.write("<title>娆㈣繋</title>\r\n");
用notpad++打开jsp文件,发现它的编码格式是UTF-8。原来问题出在这里,tomcat是按照pageEncoding指定的编码去解析为jsp页面的。
。另一个方法确认这个问题:右键jsp文件,查看属性,发现它的
编码是UTF-8。
解决办法:用notepad++把jsp页面转为ANSI编码(对中文操作系统来说,就是GBK)。
让页面居中
用一个id为content的div把整个body里面的东西都包起来。
#content
{
margin:auto; //如果是0,auto,则没有居中的效果
width:900px;
height:600px;
font-size:2em;
font-style:italic;
font-weight:bold;
color:#990000;
font-family:"Times New Roman",Georgia,Serif;
background-color:#339933;
}