6.29 MVC 学习

A : 代码学习方法

  1. 复习
  2. 预习
  3. 自己实现代码
  4. 整理

B : 一些知识点

  1. html中的form里的参数通过 request.getParameter(“表单中的名词”) 来获取
  2. return 语句, 不带任何参数的时候可以作为程序的结束命令 :
return;

6.29 MVC 学习

  1. 验证用户是否已经登录过了
  1. 思路 : 在里面程序里创建一个工具类: LoginInOrNot, 输入request和response, 判断下session里有没有这个对象, 有就执行下去, 没有就返回执行login.html
  1. 范例 :
  1. login.html
<html>
<!DOCTYPE html>
<html lang="en" class="no-js">

    <head>

        <meta charset="utf-8">
        <title>登录(Login)</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="">
        <meta name="author" content="">

        <!-- CSS -->
        <link rel="stylesheet" href="assets/css/reset.css">
        <link rel="stylesheet" href="assets/css/supersized.css">
        <link rel="stylesheet" href="assets/css/style.css">

        <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
        <!--[if lt IE 9]>
            <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->

    </head>

    <body>

        <div class="page-container">
            <h1>登录(Login)</h1>
            <form action="login" method="post">
                <input type="text" name="userName" class="username" placeholder="请输入您的用户名!">
                <input type="password" name="password" class="password" placeholder="请输入您的用户密码!">
                <button type="submit" class="submit_button">登录</button>
                <div class="error"><span>+</span></div>
            </form>
            <div class="connect">
                <p>快捷</p>
                <p>
                    <a class="facebook" href=""></a>
                    <a class="twitter" href=""></a>
                </p>
            </div>
        </div>
		
        <!-- Javascript -->
        <script src="assets/js/jquery-1.8.2.min.js" ></script>
        <script src="assets/js/supersized.3.2.7.min.js" ></script>
        <script src="assets/js/supersized-init.js" ></script>
        <script src="assets/js/scripts.js" ></script>

    </body>

</html>

工具类

package tool;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInOrNot {
	public boolean decide(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		String userName = (String) request.getSession().getAttribute("userName");
		System.out.println ("LoginInOrNot : userName : " + userName);
		if(null == userName){
			request.getRequestDispatcher("login.html").forward(request, response);
			return false;
		}
		return true;
	}
}

HeroListServlet.java

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.Hero;
import dao.HeroDao;
import tool.LoginInOrNot;

public class HeroListServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 判断用户是否登录
		if (!new LoginInOrNot().decide(request, response)) {
			System.out.println("登录失败");
			return;
		}
		System.out.println("HeroListServlet : userName : " + request.getSession().getAttribute("userName"));

		// 到数据库里去找信息
		ArrayList<Hero> heros = new ArrayList<Hero>();
		int start = 0;
		int count = 10;
		if (request.getParameter("start") != null) {
			start = Integer.parseInt(request.getParameter("start"));
		}
		System.out.println("使用默认参数 : start : " + start);
		if (start - count >= -10 && start - count <= 90) {
			heros = (ArrayList<Hero>) new HeroDao().list(start, count);
			request.setAttribute("myHeros", heros);
		} else {
			heros = (ArrayList<Hero>) new HeroDao().list(0, count);
		}
		// 指定last
		int last = 0;
		int total = new HeroDao().getTotal();
		if (total % count == 0) {
			last = (total / count - 1) * count;
		} else {
			last = (total / count - 1) * count + total % count;
		}
		request.setAttribute("last", last);

		// 判断是否越界
		if (start < 90) {
			request.setAttribute("next", start + count);
		} else {
			request.setAttribute("next", 90);
		}
		if (start > 0) {
			request.setAttribute("back", start - count);
		} else {
			request.setAttribute("back", 0);
		}

		// 发送请求到客户端
		request.getRequestDispatcher("listHero.jsp").forward(request, response);
	}

}

Chapter Filter 过滤器

  1. 所有的filter需要实现Filter接口 (有三个方法 : init(); destroy(); doFilter())
  2. 思路 :提供一个Filter类, 实现Filter接口, 然后指定页面或者请求会先通过Filter进行处理, 如果满足条件实现跳转, 比如实现用户是否登录, 可以实现拦截.
  3. 范例 :
  1. Filter :
package filter;


import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstFilter implements Filter {

	@Override
	public void destroy() {
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		
		// 获取主机的ip地址和url地址
		String ip = request.getRemoteAddr();
		String url = request.getRequestURL().toString();
		
		// 设定时间
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d = new Date();
		String date = format.format(d);
		// 格式化输出时间
		System.out.printf("%s   :   %s 访问了 %s %n", date, ip, url);
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
	}
	
}
  1. 工具类
package filter;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInOrNot {
	public boolean decide(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		String userName = (String) request.getSession().getAttribute("userName");
		System.out.println ("LoginInOrNot : userName : " + userName);
		if(null == userName){
			request.getRequestDispatcher("login.html").forward(request, response);
			return false;
		}
		return true;
	}
}
  1. login.html
<html>
<!DOCTYPE html>
<html lang="en" class="no-js">

    <head>

        <meta charset="utf-8">
        <title>登录(Login)</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="description" content="">
        <meta name="author" content="">

        <!-- CSS -->
        <link rel="stylesheet" href="assets/css/reset.css">
        <link rel="stylesheet" href="assets/css/supersized.css">
        <link rel="stylesheet" href="assets/css/style.css">

        <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
        <!--[if lt IE 9]>
            <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->

    </head>

    <body>

        <div class="page-container">
            <h1>登录(Login)</h1>
            <form action="login" method="post">
                <input type="text" name="userName" class="username" placeholder="请输入您的用户名!">
                <input type="password" name="password" class="password" placeholder="请输入您的用户密码!">
                <button type="submit" class="submit_button">登录</button>
                <div class="error"><span>+</span></div>
            </form>
            <div class="connect">
                <p>快捷</p>
                <p>
                    <a class="facebook" href=""></a>
                    <a class="twitter" href=""></a>
                </p>
            </div>
        </div>
		
        <!-- Javascript -->
        <script src="assets/js/jquery-1.8.2.min.js" ></script>
        <script src="assets/js/supersized.3.2.7.min.js" ></script>
        <script src="assets/js/supersized-init.js" ></script>
        <script src="assets/js/scripts.js" ></script>

    </body>

</html>
  1. HeroListServlet 改写
import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.Hero;
import dao.HeroDao;
import filter.LoginInOrNot;

public class HeroListServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 判断用户是否登录
		if (!new LoginInOrNot().decide(request, response)) {
			System.out.println("登录失败");
			return;
		}
		System.out.println("HeroListServlet : userName : " + request.getSession().getAttribute("userName"));

		// 到数据库里去找信息
		ArrayList<Hero> heros = new ArrayList<Hero>();
		int start = 0;
		int count = 10;
		if (request.getParameter("start") != null) {
			start = Integer.parseInt(request.getParameter("start"));
		}
		System.out.println("使用默认参数 : start : " + start);
		if (start - count >= -10 && start - count <= 90) {
			heros = (ArrayList<Hero>) new HeroDao().list(start, count);
			request.setAttribute("myHeros", heros);
		} else {
			heros = (ArrayList<Hero>) new HeroDao().list(0, count);
		}
		// 指定last
		int last = 0;
		int total = new HeroDao().getTotal();
		if (total % count == 0) {
			last = (total / count - 1) * count;
		} else {
			last = (total / count - 1) * count + total % count;
		}
		request.setAttribute("last", last);

		// 判断是否越界
		if (start < 90) {
			request.setAttribute("next", start + count);
		} else {
			request.setAttribute("next", 90);
		}
		if (start > 0) {
			request.setAttribute("back", start - count);
		} else {
			request.setAttribute("back", 0);
		}

		// 发送请求到客户端
		request.getRequestDispatcher("listHero.jsp").forward(request, response);
	}

}
  1. 配置web.xml
	<!-- 设置过滤器-->
	<filter>
		<filter-name>FirstFilter</filter-name>
		<!-- filter.FirstFilter 说明就是在filter包下的FirstFilter的class文件 -->
		<filter-class>filter.FirstFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>FirstFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

Chapter 1.1 过滤器中文处理问题

  1. 问题 : 在使用servlet处理中文问题时, 往往需要把进入的参数通过request.setCharaterEncoding(“UTF-8”)来正确获取中文.但是每次都要写, 格外的麻烦.
    为了解决以上问题, 我们可以使用Filter过滤器进行中文处理, 这样就不需要每条都写这个了, 过滤器会帮着自动拦截
  2. 范例
  1. Filter
package filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EncodingFilter implements Filter{

	@Override
	public void destroy() {
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		
		request.setCharacterEncoding("UTF-8");
		// 将request和response提交给下一个filter
		chain.doFilter(request, response);
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
	}

}
  1. 配置xml, 使他识别filter进行处理.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值