JSP/Servlet基础——ServletMVC小例子

来源:互联网 发布:手机购物软件大全 编辑:程序博客网 时间:2024/06/06 00:06

笔记,只供自己参考。相当菜了。

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








0 0
原创粉丝点击