jsp/servlet入門


tomcat發布目錄設置

編輯tomcat/conf/server.xml

在<Host>和</Host>間添加如下:<Context path="/myapp" docBase="d:/myapp" debug="0" reloadable="true"></Context>

啟動tomcat后即可訪問:http://localhost:8080/myapp

web應用目錄結構

d:/myapp/*.jsp

d:/myapp/WEB-INF/web.xml

d:/myapp/WEB-INF/classes/  保存*.class文件

d:/myapp/WEB-INF/lib/  保存*.jar文件

jsp基礎知識

原理:jsp由系統編譯成servlet,servlet負責相應用戶請求。

注釋:<%--注釋--%>

聲明:<%!聲明變量和函數%>

輸出表達式:<%=輸出表達式%>

連接數據庫jsp實例:test.jsp

<%@ page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>連接數據庫腳本測試</title>
</head>
<body>
<table bgcolor="yellow" border="1" width="300px">
    <%
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select * from user");
        while (rs.next()) {
    %>
    <tr>
        <td><%=rs.getString(1)%></td>
        <td><%=rs.getString(2)%></td>
        <td><%=rs.getString(3)%></td>
    </tr>
    <%
        }
    %>
</table>
</body>
</html>

編譯指令:page、include、taglib <%@ 編譯指令名 屬性名="屬性值"... %>

動作指令:jsp:forward/jsp:param/jsp:include/jsp:plugin/jsp:useBean/jsp:setProperty/jsp:getProperty

package com.zzz.lcy;
public class Person {
    String name;
    int age;
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
}

默認構造函數不能少,編譯javac Person -d d:/myapp/WEB-INF/classes/

<%@page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>BeanTest</title>
</head>
<body>
<jsp:useBean id="beanTest1" class="com.zzz.lcy.Person" scope="page"></jsp:useBean>
<jsp:setProperty property="name" name="beanTest1" value="lcy" />
<jsp:setProperty property="age" name="beanTest1" value="34" />
<jsp:getProperty property="name" name="beanTest1" />
<jsp:getProperty property="age" name="beanTest1" />
</body>
</html>

 內置對象:application/config/exception/out/pageContext/request/response/session

參考:http://www.cnblogs.com/jbelial/archive/2012/03/20/2396585.html

servlet配置

編輯d:/myapp/WEB-INF/web.xml

在<webapp></webapp>間添加如下:

  <servlet>
      <servlet-name>hello</servlet-name>
      <servlet-class>zzz.lcy.servlet.HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/servlet/HelloWorldDemo</url-pattern>
  </servlet-mapping>

注意:<servlet-name>必須對應上

訪問網址:http://localhost:8080/myapp/servlet/HelloWorldDemo

package zzz.lcy.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        response.setContentType("text/html;charset=utf-8");
        try {
            PrintWriter out = response.getWriter();
            out.println("hello, world.");
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        doGet(request, response);
    }
}

 jsp論壇實例(部分代碼)

javabean

public class User {
    private int id;
    private String name;
    private String password;
    private String nickname;
    public User() {
    }
    public User(String name, String password, String nickname) {
        this.name = name;
        this.password = password;
        this.nickname = nickname;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
}
View Code

數據庫連接

import java.sql.*;
public class DB {
    private Connection conn;
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/bbs";
    private static final String USR = "root";
    private static final String PASSWD = "123456";
    private static DB db = new DB();
    private DB() {
        try {
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL, USR, PASSWD);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static DB getInstance() {
        return db;
    }
    public Connection getConn() throws Exception {
        return conn;
    }
    public ResultSet execSql(String sql, Object...objs) throws Exception {
        PreparedStatement pstmt = conn.prepareStatement(sql);
        for (int i = 0; i < objs.length; i++) {
            pstmt.setObject(i + 1, objs[i]);
        }
        pstmt.execute();
        return pstmt.getResultSet();
    }
    public void close() throws Exception {
        conn.close();
    }
    public static void main(String[] args) throws Exception {
        DB db = new DB();
        db.execSql("insert into t_user(name,password,nickname) values(?,?,?)", "aaa", "123", "hellokity");
    }
}
View Code

dao

public class UserDAO {
    public void add(User user) {
        try {
            DB.getInstance().execSql("insert into t_user(name,password,nickname) values(?,?,?)", user.getName(), user.getPassword(), user.getNickname());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public User getByName(String name) {
        try {
            ResultSet rs = DB.getInstance().execSql("select * from t_user where name=?", name);
            User user = new User();
            while (rs.next()) {
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
                user.setNickname(rs.getString("nickname"));
                return user;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public User getById(int id) {
        try {
            ResultSet rs = DB.getInstance().execSql("select * from t_user where id=?", id);
            User user = new User();
            while (rs.next()) {
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
                user.setNickname(rs.getString("nickname"));
                return user;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args) {
        UserDAO dao = new UserDAO();
        User user = dao.getByName("aaa");
        if (user != null) {
            System.out.println(user.getNickname());
        }
    }
}
View Code

servlet

public class Login extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse res) {
        try {
            req.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        res.setContentType("UTF-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        UserDAO user_dao = new UserDAO();
        User user = user_dao.getByName(username);
        if (user == null) {
            req.setAttribute("info", "登錄失敗");
            req.setAttribute("page", "../login.html");
        } else {
            if (password.equals(user.getPassword())) {
                req.setAttribute("info", "登錄成功");
                HttpSession session = req.getSession(true);
                session.setAttribute("username", username);
                session.setAttribute("usr_id", user.getId());
                try {
                    res.sendRedirect("../jsp/main.jsp");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                req.setAttribute("info", "密碼錯誤");
                req.setAttribute("page", "../login.html");
            }
        }
        RequestDispatcher rd = req.getRequestDispatcher("/jsp/result.jsp");
        try {
            rd.forward(req, res);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        doPost(req, res);
    }
}
View Code

main.jsp

<%@ page language="java" pageEncoding="UTF-8" %>
<%@page import="zzz.lcy.bbs.dao.ArticleDAO"%>
<%@page import="zzz.lcy.bbs.bean.Article"%>
<%@page import="java.util.*" %>
<%
String username = (String)session.getAttribute("username");
if (username == null || username.equals("")) {
    response.sendRedirect("../login.html");
}
ArticleDAO atc_dao = new ArticleDAO();
List<Article> atcList = atc_dao.getAll();
%>
<!DOCTYPE html>
<html>
<body>
<%=session.getAttribute("username") %>
<table>
<tr><th>標題</th><th>發布者</th><th>時間</th></tr>
<%
for (int i = 0; i < atcList.size(); i++) {
    Article atc = atcList.get(i);
%>
    <tr>
    <td><a href="content.jsp?id=<%=atc.getId() %>"><%=atc.getTitle() %></a></td>
    <td><%=atc.getUsr_id() %></td>
    <td><%=atc.getDate() %></td>
    </tr>
<%
}
%>
</table>
<a href="../publish.html">發文章</a>
</body>
</html>
View Code

result.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
    <form name="result_form" action="${requestScope.page}" method="post">
        ${requestScope.info} <input type="submit" value="確定">
    </form>
</body>
</html>
View Code

login.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>用戶登錄</title>
</head>
<body>
<form action="servlet/Login" method="post">
用戶名<input type="text" name="username" />
<br>
密碼<input type="password" name="password" />
<br>
<input type="submit" value="登錄" />
<br>
<a href="regist.html">注冊</a>
</form>
</body>
</html>
View Code

 jsp+servlet+javabean實現mvc

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ControlServlet extends HttpServlet {
    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        String pathName = req.getServletPath();
        System.out.println("pathName= " + pathName);
        int i = pathName.indexOf(".");
        String actionName = pathName.substring(1, i);
        System.out.println("actionName= " + actionName);
        String actionClassName = this.getInitParameter(actionName);
        Action action = ActionFactory.getActionFactory().getAction(actionClassName);
        String url = action.execute(req, res);
        if (url == null) {
            req.getRequestDispatcher("error.jsp").forward(req, res);
        } else {
            req.getRequestDispatcher(url).forward(req, res);
        }
    }
}
View Code
public interface Action {
    String execute(HttpServletRequest req, HttpServletResponse res);
}
View Code
public class LoginAction implements Action {
    public String execute(HttpServletRequest req, HttpServletResponse res) {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        if (username.equals("aaa") && password.equals("123")) {
            req.setAttribute("username", username);
            return "main.jsp";
        }
        return "login.jsp";
    }
}
View Code
public class ActionFactory {
    private static ActionFactory af = new ActionFactory();
    private ActionFactory() {}
    public static ActionFactory getActionFactory() {
        return af;
    }
    public Action getAction(String actionClassName) {
        Action action = null;
        try {
            action = (Action) Class.forName(actionClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return action;
    }
}
View Code

 應用啟動時啟動servlet

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.swing.Timer;
public class TimerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) {
        try {
            super.init(config);
        } catch (ServletException e) {
            e.printStackTrace();
        }
        Timer t = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println(new Date());
            }
        });
        t.start();
    }
}
View Code

    <servlet>
        <servlet-name>timer</servlet-name>
        <servlet-class>xx.yy.TimerServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

訪問servlet的配置參數

import java.sql.Connection;
import java.sql.DriverManager;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DbTestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) {
        try {
            super.init(config);
        } catch (ServletException e) {
            e.printStackTrace();
        }
    }
    public void service(HttpServletRequest req, HttpServletResponse res) {
        ServletConfig config = this.getServletConfig();
        String driver = config.getInitParameter("driver");
        String url = config.getInitParameter("url");
        String user = config.getInitParameter("user");
        String pass = config.getInitParameter("pass");
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, user, pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
View Code
    <servlet>
        <servlet-name>dbtest</servlet-name>
        <servlet-class>zzz.lcy.servlet.DbTestServlet</servlet-class>
        <init-param>
            <param-name>driver</param-name>
            <param-value>com.mysql.jdbc.Driver</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/test1</param-value>
        </init-param>
        <init-param>
            <param-name>user</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>pass</param-name>
            <param-value>123456</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dbtest</servlet-name>
        <url-pattern>/dbtest</url-pattern>
    </servlet-mapping>
View Code

過濾器Filter

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class FilterTest implements Filter {
    private FilterConfig config;
    public void destroy() {
        config = null;
    }
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        ServletContext context = this.config.getServletContext();
        long before = System.currentTimeMillis();
        System.out.println("開始過濾");
        HttpServletRequest req = (HttpServletRequest) arg0;
        context.log("已經獲得請求地址: " + req.getServletPath());
        arg2.doFilter(arg0, arg1);
        long after = System.currentTimeMillis();
        context.log("過濾結束");
        context.log("請求被定位到: " + req.getRequestURI() + ", 花費時間: " + (after - before));
    }
    public void init(FilterConfig arg0) throws ServletException {
        config = arg0;
    }
}
View Code

    <filter>
        <filter-name>log</filter-name>
        <filter-class>xx.yy.FilterTest</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>log</filter-name>
        <servlet-name>*</servlet-name>
    </filter-mapping>

監聽器Listener

Listener的作用類似於load-on-startup,用於在web應用啟動時,啟動某些后台程序,這些后台程序負責為系統運行提供支持。使用Listener需要兩步:

1) 創建Listener實現類。需要實現ServletContextListener接口;

2) 在web.xml中配置Listener。<listener><listener-class>xx.yy.TestListener</listener-class></listener>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM