A : 代码学习方法
- 复习
- 预习
- 自己实现代码
- 整理
B : 一些知识点
- html中的form里的参数通过 request.getParameter(“表单中的名词”) 来获取
- return 语句, 不带任何参数的时候可以作为程序的结束命令 :
return;
6.29 MVC 学习
- 验证用户是否已经登录过了
- 思路 : 在里面程序里创建一个工具类: LoginInOrNot, 输入request和response, 判断下session里有没有这个对象, 有就执行下去, 没有就返回执行login.html
- 范例 :
- 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 过滤器
- 所有的filter需要实现Filter接口 (有三个方法 : init(); destroy(); doFilter())
- 思路 :提供一个Filter类, 实现Filter接口, 然后指定页面或者请求会先通过Filter进行处理, 如果满足条件实现跳转, 比如实现用户是否登录, 可以实现拦截.
- 范例 :
- 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 {
}
}
- 工具类
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;
}
}
- 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>
- 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);
}
}
- 配置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 过滤器中文处理问题
- 问题 : 在使用servlet处理中文问题时, 往往需要把进入的参数通过request.setCharaterEncoding(“UTF-8”)来正确获取中文.但是每次都要写, 格外的麻烦.
为了解决以上问题, 我们可以使用Filter过滤器进行中文处理, 这样就不需要每条都写这个了, 过滤器会帮着自动拦截 - 范例
- 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 {
}
}
- 配置xml, 使他识别filter进行处理.