搜档网
当前位置:搜档网 › jsp学习笔记(初级)

jsp学习笔记(初级)

jsp学习笔记(初级)
jsp学习笔记(初级)

MVC:

JSP + servlet + javabean

Java:

复习java基础知识

Jsp:

JSP、PHP、https://www.sodocs.net/doc/5010403413.html, 三门技术被称为Web 后端开发的3P 技术,其中JSP 依托J2EE 平台更是Web 开发领域的一枝独秀。学好JSP,是进入J2EE 企业开发的第一步。通过本阶段内容的学习,你将能够搭建JSP 的开发环境,了解JSP 的基本语法及内部对象的使用。Servlet:

Servlet 是Server Applet 的缩写,也称为服务端小程序。Servlet 技术一直处于不断的发展及进步之中,现在已经成为很多框架的技术基础,比如Spring、Struts2 等。通过本阶段课程的学习,你将了解Servlet的运行原理,Servlet 过滤器的知识并能编写出相对复杂的Java Web 程序。

Javabean:

JavaBeans是一个可重复使用的软件组件JavaBeans是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称beans。JSP页面应当将数据的处理过程指派给一个或几个beans来完成,我们只需在JSP页面中调用这个beans即可,从而有效的分离的静态工作部分和动态工作部分

JDBC:

JDBC 是Java 对关系型数据库进行访问的最主要的API,是Java 数据库编程的技术基础。通过本阶段内容的学习,你能够掌握数据库的基本知识及JDBC 技术的基本原理,并能够使用JDBC编写出对数据库进行增删改查的简单程序

Spring:

Spring 是一个开源框架,也是一个基于控制反转、依赖注入的轻量级容器,它的出现大大简化了传统的J2EE 开发模式。Spring 的主要优势之一就是其分层架构,该架构允许使用者自主选择任意件,同时为J2EE 应用程序开发提供集成框架。现在,Spring 已经成为J2EE 企业开发中的标准配置。

Struts2:

Spring MVC是一种基于Java的轻量级Web框架,它使用了MVC架构模式的思想,将web 层进行职责解耦,用来简化日常开发。Spring MVC 使用简单,学习成本低,很容易就写出性能优秀的程序。目前越来越多的项目选择使用Spring MVC 作为其Web开发框架。Hibernate:

Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate 可以应用在任何使用JDBC 的场合,既可以在Java 的客户端程序使用,也可以在Servlet/JSP 的Web 应用中使用,最具革命意义的是,Hibernate 可以在应用EJB 的J2EE 架构中取代CMP,完成数据持久化的重任。

初级准备:JDK、Tomcat(Web服务器)、MySQL(数据库)、JDBC(连接数据库)、Eclipse(软件)、设置环境变量*

Java:类,继承,实现,接口……

Jsp内置对象:request 对象、response 对象、session对象**、application对象、out

JDBC学习实例(先复习数据库):

一:利用MySQL Workbench访问数据库,并且创建表。

1.新建一个数据库jsp_db,并且设为默认数据库(set as default schema)。

2.创建表代码:

create table tbl_user(

id int(11) unsigned not null auto_increment,

name varchar(50) not null default'',

password varchar(50) not null default'',

email varchar(50) default'',

primary key(id))

engine=InnoDBdefault charset=utf8;

create table tbl_address(

id int(11) unsigned not null auto_increment,

city varchar(50) not null default'',

country varchar(50) not null default'',

user_id int(11)

unsigned not null, primary key(id))

engine=InnoDB default charset=utf8;

3.为表插入记录

insert into tbl_user(id,name,password,email)

values(1,'xiaoming','123456','xiaoming@https://www.sodocs.net/doc/5010403413.html,'),

(2,'xiaozhang','123456','xiaozhang@https://www.sodocs.net/doc/5010403413.html,');

insert into tbl_address(city,country,user_id) values ('beijing','china','1');

insert into tbl_address(city,country,user_id)values ('tianjin','china','2');

二:利用JDBC对数据库进行查询的操作。

1.将mysql-connector-java-5.1.25-bin.jar包。拷贝到WEB_INF目录下的lib文件夹下。

2.进入属性页面,选择Java Build Path,进入Libraries标签页。选择Add Jars。找到刚才拷贝进来的jar包,选择ok。既成功添加了JDBC的驱动程序。

3.创建一个类,在jdbc包下,命名为JDBCTest。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

publicclass JDBCTest {

publicstaticvoidmain(String[] args) {

String sql="SELECT*FROM tbl_user";

Connection conn=null;

Statement st=null;

ResultSet rs=null;

try {

Class.forName("com.mysql.jdbc.Driver); [注册mysql的jdbc的驱动程序]

conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root","1234");【获取mysql数据库链接,mysql数据库的url,用户名,密码】

st=conn.createStatement();

rs=st.executeQuery(sql);

while(rs.next()){

System.out.print(rs.getInt("id")+" ");

System.out.print(rs.getString("name")+" ");

System.out.print(rs.getString("password")+" ");

System.out.print(rs.getString("email")+" ");

System.out.println();}} 【遍历数据库内容】

catch (Exception e) { e.printStackTrace();}

finally{

try {rs.close();} catch (Exception e2) {}

try {rs.close();} catch (Exception e3) {}

try {rs.close();} catch (Exception e4) {}}

}}【清理】

三:利用JDBC对数据库进行插入更新以及删除工作

1.插入:

publicclass JDBCTest {

publicstatic Connection getConnection(){

Connection conn=null;

try{

Class.forName("com.mysql.jdbc.Driver");

conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root","1234");

}catch(Exception e){e.printStackTrace();}return conn;}【取得数据库连接】

publicstaticvoidinsert(){

Connection conn=getConnection();

try {String sql="INSERT INTO tbl_user(name,password,email)"+

"VALUES('Tom','123456','tom@https://www.sodocs.net/doc/5010403413.html,')";

Statement st=conn.createStatement();

intcount=st.executeUpdate(sql);【插入操作】

System.out.println("向用户表中插入了"+count+"条记录");

conn.close();} catch (Exception e) {e.printStackTrace();}}

publicstaticvoidmain(String[] args) {insert();}

2.更新:

String sql="UPDATE tbl_user SET email='tom@https://www.sodocs.net/doc/5010403413.html,' WHERE name='Tom'";【将sql语句改成】

3.删除:

String sql="DELETE FROM tbl_user WHERE name='Tom'";

4.事务处理:

事务就是一个完整的数据库操作。防止有的操作成功,有的操作失败而导致数据库数据出错误。新建一个Java类,在jdbc包下。输入代码:

import java.sql.Connection;import java.sql.DriverManager;

import java.sql.SQLException;import java.sql.Statement;

public class TransactionTest {

public static Connection getConnection(){

Connection conn=null;

try {

Class.forName("com.mysql.jdbc.Driver");

conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root","1234");

} catch (Exception e) { e.printStackTrace();} return conn;}

public static void insertUserData(Connection conn) throws SQLException{

String sql="INSERT INTO tbl_user(id,name,password,email)"+

"VALUES('10','Tom','123456','tom@https://www.sodocs.net/doc/5010403413.html,')";

Statement st=conn.createStatement();

int count=st.executeUpdate(sql);

System.out.println("向用户表中插入了"+count+"条记录");}

public static void insertAddressData(Connection conn) throws SQLException{

String sql="INSERT INTO tbl_address(id,city,country,user_id)"+

"VALUES('1','shanghai','china','10')";

Statement st=conn.createStatement();

int count=st.executeUpdate(sql);

System.out.println("向地址表中插入了"+count+"条记录");}

public static void main(String[] args) {

Connection conn=null;

try { conn=getConnection();

conn.setAutoCommit(false);

insertUserData(conn);

insertAddressData(conn);

https://www.sodocs.net/doc/5010403413.html,mit();}

catch (Exception e) {System.out.println("=======捕获到SQL异常=======");e.printStackTrace();

try {conn.rollback();System.out.println("=======事物回滚成功=======");}

catch (Exception e2) {e2.printStackTrace();}

finally{try {if(conn!=null){conn.close();}} catch (Exception e3) {e3.printStackTrace();}}}}

}

5.程序优化1.0,数据库链接工厂类

(1)dbconfig.properties文件:

driver=com.mysql.jdbc.Driver

dburl=jdbc:mysql://localhost:3306/jsp_db

user=root

password=1234

(2)ConnectionFactory.java文件,在util包下。

package com.jikexueyuan.util;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.util.Properties;

public class ConnectionFactory {

private static String driver;

private static String dburl;

private static String user;

private static String password;

private static final ConnectionFactory factory=new ConnectionFactory();

private Connection conn;

static{

Properties prop=new Properties();

try {

InputStream in=ConnectionFactory.class.getClassLoader()

.getResourceAsStream("dbconfig.properties");

prop.load(in);

} catch (Exception e) {

System.out.println("=======配置文件读取错误=======");

}

driver=prop.getProperty("driver");

dburl=prop.getProperty("dburl");

user=prop.getProperty("user");

password=prop.getProperty("password");

}

private ConnectionFactory(){}

public static ConnectionFactory getInstance(){return factory;}

public Connection makeConnection(){

try {Class.forName(driver);conn=DriverManager.getConnection(dburl,user,password);}

catch (Exception e) {e.printStackTrace(); }return conn;}}

(3)ConnectionFactoryTest.java文件,在test包下用来测试数据库链接类。

package com.jikexueyuan.test;

import java.sql.Connection;

import com.jikexueyuan.util.ConnectionFactory;

public class ConnectionFactoryTest {

public static void main(String[] args) throws Exception{

ConnectionFactory cf=ConnectionFactory.getInstance();

Connection conn=cf.makeConnection();

System.out.println(conn.getAutoCommit());}}

6.程序优化2.0,创建2个DTO类对应用户表和地址表:数据传输对象,用于远程调用。(1)在entity包下创建IdEntity类(所有实体类的父类)

package com.jikexueyuan.entity;

public abstract class IdEntity {

protected Long id;

public Long getId(){

return id;}

public void setId(Long id){

this.id=id;}}

(2)继承自IdEntity类的User类。用户信息的实体类。

package com.jikexueyuan.entity;

public class User extends IdEntity {

private String name;

private String password;

private String email;【成员变量】

右键选择source下的Generate Getters and Setters,自动生成以上对象的get和set方法

右键选择source下的Generate toString方法,继承id,自动生成toString方法}

(3)继承自IdEntity类的Address类。地址信息的实体类

package com.jikexueyuan.entity;

public class Address extends IdEntity{

private String city;

private String country;

private Long userId;【成员变量】

同样方法生成get,set和toString方法}

7.程序优化3.0。创建DAO类。数据访问对象,把数据库中的表转化为GTO类。

(1)在dao包下,创建一个UserDao接口

package com.jikexueyuan.dao;

import java.sql.SQLException;

import java.sql.Connection;

import https://www.sodocs.net/doc/5010403413.html,er;

public interface UserDao {

public void save(Connection conn,User user) throws SQLException;

public void update(Connection conn,Long id,User user) throws SQLException;

public void delete(Connection conn,User user) throws SQLException;}

(2)接口的实现:在dao包内创建com.jikexueyuan.dao.impl包,然后创建一个UserDaoImpl 类,接口为UserDao。分别将三个方法进行实现。

package com.jikexueyuan.dao.impl;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import https://www.sodocs.net/doc/5010403413.html,erDao;

import https://www.sodocs.net/doc/5010403413.html,er;

public class UserDaoImpl implements UserDao {

@Override【保存用户信息】

public void save(Connection conn, User user) throws SQLException {

PreparedStatementps=conn.prepareCall("INSERT INTO tbl_user(name,password,email)VALUE(?,?,?)");

ps.setString(1, user.getName());

ps.setString(2, user.getPassword());

ps.setString(3, user.getEmail());

ps.execute();}

@Override【更具用户指定的ID更新用户信息】

public void update(Connection conn, Long id, User user) throws SQLException {

String updatesql="UPDATE tbl_user SET name=?,password=?,email=? WHERE id=?";

PreparedStatement ps=conn.prepareStatement(updatesql);

ps.setString(1, user.getName());

ps.setString(2, user.getPassword());

ps.setString(3, user.getEmail());

ps.setLong(4,id);

ps.execute();}

@Override【删除指定用户信息】

public void delete(Connection conn, User user) throws SQLException {

PreparedStatement ps=conn.prepareStatement("DELETE FROM tbl_user WHERE id=?");

ps.setLong(1, user.getId());

ps.execute();}}

(3)创建测试类,在test包下创建UserDaoTest类

package com.jikexueyuan.test;

import java.sql.Connection;

import https://www.sodocs.net/doc/5010403413.html,erDao;

import https://www.sodocs.net/doc/5010403413.html,erDaoImpl;

import https://www.sodocs.net/doc/5010403413.html,er;

import com.jikexueyuan.util.ConnectionFactory;

public class UserDaoTest {

public static void main(String[] args) {

Connection conn=null;

try {

conn=ConnectionFactory.getInstance().makeConnection();

conn.setAutoCommit(false);

UserDao userDao=new UserDaoImpl();

User tom=new User();

tom.setName("Tom");

tom.setPassword("123456");

tom.setEmail("tom@https://www.sodocs.net/doc/5010403413.html,");

userDao.save(conn, tom);

https://www.sodocs.net/doc/5010403413.html,mit();

} catch (Exception e) {

try {

conn.rollback();

} catch (Exception e2) {

e2.printStackTrace();}}}}

这里仅仅测试了User表的save方法,其他方法同样可以实现。

Servlet学习实例:一个登陆小程序

步骤一:

1.在servlet包下创建一个类LoginServlet,父类是HttpServlet

2.在编辑器中右键,选择source中的重写或实现方法(Override/Implement Methods),然后选择service方法参数如下,并且输入代码

protected void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

String userName=req.getParameter("uname");

String password=req.getParameter("upwd");

System.out.println("用户名==》"+userName);

System.out.println("密码==》"+password);

}

3.创建Jsp文件,输入代码:

userName:

password:

4.在web.xml文件中配置URL

LoginServlet

com.jikexueyuan.servlet.LoginServlet

LoginServlet

/loginServlet

步骤二:在类中使用不同方法来实现登陆请求(doGet和doPost)

protectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("======进入doGet方法======");

doPost(req,resp);

}

protectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("======进入doPost方法======");

String userName=req.getParameter("uname");

String password=req.getParameter("upwd");

System.out.println("用户名==》"+userName);

System.out.println("密码==》"+password);

}

步骤三(登陆判断):

1.创建success.jsp和error.jsp,分别写入代码:

登陆成功。
(error.jsp中将“成功”换成“失败”)

您提交的信息为:

用户名:<%=request.getParameter("uname") %>

密码:<%=request.getParameter("upwd") %>

返回登录页面

2.修改LoginServlet.java的doPost方法中加入

if(userName.equals("darkmi")&&password.equals("jikexueyuan")){

resp.sendRedirect(req.getContextPath()+"/17/success.jsp");

}else{

resp.sendRedirect(req.getContextPath()+"/17/error.jsp");

}进行判断

3.servlet返回到success时不带有表单信息,所以页面显示null

步骤四(请求的转发和重定向):

1.在LoginServlet.java的doPost方法中修改

String forward=null;

if(userName.equals("darkmi")&&password.equals("jikexueyuan")){

【请求转发】

forward="/17/success.jsp";

RequestDispatcher rd=req.getRequestDispatcher(forward);

rd.forward(req, resp);

【请求重定向】

//resp.sendRedirect(req.getContextPath()+"/17/success.jsp");

}else{

【请求转发】

forward="/17/error.jsp";

RequestDispatcher rd=req.getRequestDispatcher(forward);

rd.forward(req, resp);

【请求重定向】

//resp.sendRedirect(req.getContextPath()+"/17/error.jsp");

}

2.过程注意事项,只有一次请求,而且只能转发给同一应用的地址。但是重定向可以实现步骤五:根据数据库中的信息进行判断。

1.在之前JDBC练习所建立的UserDao.java接口中加入

public ResultSet get(Connection conn,User user) throws SQLException;接口

2.在UserDaoImpl.java类中添加实现方法

public ResultSet get(Connection conn, User user) throws SQLException {

PreparedStatement ps=conn.prepareStatement("SELECT*FROM tbl_user WHERE name=? AND password=?");

ps.setString(1, user.getName());

ps.setString(2, user.getPassword());

return ps.executeQuery();}

3.在com.jikexueyuan.service包下创建一个ChackUserService.java类,编写check逻辑。输入代码:

package com.jikexueyuan.service;

import java.sql.Connection;

import java.sql.ResultSet;

import https://www.sodocs.net/doc/5010403413.html,erDao;

import https://www.sodocs.net/doc/5010403413.html,erDaoImpl;

import https://www.sodocs.net/doc/5010403413.html,er;

import com.jikexueyuan.util.ConnectionFactory;

public class ChackUserService {

private UserDao userDao=new UserDaoImpl();

public boolean check(User user){

Connection conn=null;

conn=ConnectionFactory.getInstance().makeConnection();

conn.setAutoCommit(false);

ResultSet resultSet=userDao.get(conn, user);

while(resultSet.next()){

return true;

}

} catch (Exception e) {

e.printStackTrace();

try {

conn.rollback();

} catch (Exception e2) {

e2.printStackTrace();

}

}finally{

try {

conn.close();

} catch (Exception e3) {

e3.printStackTrace();

}

}

return false;}}

步骤六:完善业务逻辑层代码

1.在servlet包下创建一个servlet,命名为ChackServlet,在doGet方法中直接调用doPost方法:doPost(request,response);

在doPost方法中实现业务逻辑:

String uname=request.getParameter("uname");

String passwd=request.getParameter("upwd");

RequestDispatcher rd=null;

String forward=null;

if(uname==null||passwd==null){

request.setAttribute("msg", "用户名或者密码为空!");

rd=request.getRequestDispatcher("/17/error.jsp");

rd.forward(request, response);

}else{

User user=new User();

user.setName(uname);

user.setPassword(passwd);

boolean bool=cku.check(user);

if(bool){

forward="/17/success.jsp";

}else{

request.setAttribute("msg", "用户名或者密码输入错误,请重新输入!");

forward="/17/error.jsp";

rd=request.getRequestDispatcher(forward);

rd.forward(request,response);

}

还要加上private ChackUserService cku=new ChackUserService();调用上面步骤编写的类。

2.在web.xml文件中配置

ChackServlet

com.jikexueyuan.servlet.ChackServlet

ChackServlet

/checkServlet

步骤七:编写前端jsp文件,完成

1.login.jsp

样式:

校验函数:

body内:

用户登录
用户名:
密码:

2.error.jsp,先加入css到前端。然后body内:

登陆失败。

错误提示:<%Object obj=request.getAttribute("msg");

if(obj!=null){out.println(obj.toString());}else{out.println("无");}%>

您提交的信息为:

用户名:<%=request.getParameter("uname") %>

密码:<%=request.getParameter("upwd") %>

返回登录页面

3.success.jsp,先加入样式表,然后在body体中填写如下代码:

登陆成功。

您提交的信息为:

用户名:<%=request.getParameter("uname") %>

密码:<%=request.getParameter("upwd") %>

返回登录页面

Servlet学习实例二:servlet过滤器

在源数据和目的数据之间进行过滤

课程一:新建一个过滤器,简单了解功能。

1.在src目录下选择新建一个Filter文件,在filter包下新建一个FilterOne过滤器。将其中的方法中加入日志信息

public FilterOne() { System.out.println("=======构造函数=======");}

public void init(FilterConfig fConfig) throws ServletException {

System.out.println("=======初始化方法=======");

String initParam=fConfig.getInitParameter("param");

System.out.println("param=="+initParam);}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

System.out.println("=======开始执行doFilter方法=======");

chain.doFilter(request, response);

System.out.println("=======结束执行doFilter方法=======");}

public void destroy() {System.out.println("=======销毁方法=======");}

2.配置xml

FilterOne

com.jikexueyuan.filter.FilterOne

param

jikexueyuan

FilterOne

/*

课程二:过滤器链,过滤器链的执行顺序就按照部署描述符中的注册信息的先后来执行

课程三:过滤器实例一:利用过滤器解决提交中文信息时,返回乱码的情况

1.首先,新建一个过滤器,并且声明一个成员变量:

private String charEncoding=null;

2.然后编写init方法的实现:

charEncoding=fConfig.getInitParameter(“encoding”);

if(charEncoding==null){throw new ServletException(“EncodingFilter中的编码设置为空!!”);}

3.再编写doFilter方法中的业务逻辑

if(!charEncoding.equals(request.getCharacteEncoding())){

request.setCharacterEncoding(charEncoding)

}response.setCharacterEncoding(charEncoding);

Chain.doFilter(request,response);

4.最后编写部署描述符的设置

过滤器名称

com.jikexueyuan.filter.过滤器名称

encoding

UTF-8

名称

/*

课程四:过滤器实例二,权限校验。

1.hello.jsp

login.jsp,这两个文件之前都创建过。直接拷贝。记得要修改一下login.jsp中提交到servlet 的代码(因为要创建新的servlet业务逻辑)。

index.jsp文件代码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

首页

首页



hello.jsp

<%

String flag="";

Object obj=session.getAttribute("flag");

if(obj!=null){

flag=obj.toString();}

if(flag.equals("login_success")){

%>退出

<%}else{%>登录<%}%>

2.建立一个LoginServlet18.java,要对应login.jsp中的代码,写入代码为:

package com.jikexueyuan.servlet;

import java.io.IOException;

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 https://www.sodocs.net/doc/5010403413.html,er;

import com.jikexueyuan.service.ChackUserService;

public class LoginServlet18 extends HttpServlet {

private static final long serialVersionUID = 1L;

private ChackUserService cku=new ChackUserService();

public LoginServlet18() { super(); }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);

response.getWriter().append("Served at: ").append(request.getContextPath());}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String uname=request.getParameter("uname");

String passwd=request.getParameter("upwd");

String returnUri=request.getParameter("return_uri");

System.out.println("用户名==》"+uname);

System.out.println("密码==》"+passwd);

System.out.println("return uri==》"+returnUri);

RequestDispatcher rd=null;

if(uname==null||passwd==null){

request.setAttribute("msg", "用户名或者密码为空!");

rd=request.getRequestDispatcher("/18/login.jsp");

rd.forward(request, response);

}else{

User user=new User();

user.setName(uname);

user.setPassword(passwd);

boolean bool=cku.check(user);

if(bool){

request.getSession().setAttribute("flag", "login_success");

if(returnUri!=null){

rd=request.getRequestDispatcher("returnUri");

rd.forward(request, response);

}else{

rd=request.getRequestDispatcher("/18/index.jsp");

rd.forward(request, response);

}

}else{

request.getSession().setAttribute("flag", "login_error");

request.setAttribute("msg", "用户名或者密码输入错误,请重新输入!");

rd=request.getRequestDispatcher("/18/login.jsp");

rd.forward(request, response);

}

}

}}

LogoutServlet.java代码:

package com.jikexueyuan.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class LogoutServlet18 extends HttpServlet {

private static final long serialVersionUID = 1L;

public LogoutServlet18() { super();}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getSession().invalidate();

response.sendRedirect(request.getContextPath()+"/18/index.jsp");}}

web.xml部署描述符

LoginServlet18

com.jikexueyuan.servlet.LoginServlet18

LoginServlet18

/LoginServlet18

LogoutServlet18

com.jikexueyuan.servlet.LogoutServlet18

LogoutServlet18

/LogoutServlet18

3.新建一个ParmissionFilter.java,在doFilter方法中添加代码。HttpServletRequest req=(HttpServletRequest) request;

HttpServletResponse resp=(HttpServletResponse) response;

String servletPath=req.getServletPath();

HttpSession session=req.getSession();

String flag=(String)session.getAttribute("flag");

if(servletPath!=null&&(servletPath.equals("/18/index.jsp"))||(servletPath.equals("/LoginServlet18"))) {chain.doFilter(request, response);

}else{

if(flag!=null&&flag.equals("login_success")){

chain.doFilter(request, response);

}else if(flag!=null&&flag.equals("login_error")){

req.setAttribute("msg", "登录失败,请重新登陆!!!
");

req.setAttribute("return_uri", servletPath);

RequestDispatcher rd=req.getRequestDispatcher("/17/login.jsp");

rd.forward(req, resp);

}else{

req.setAttribute("msg", "您尚未登录!!!");

req.setAttribute("return_uri", servletPath);

RequestDispatcher rd=req.getRequestDispatcher("/17/login.jsp");

rd.forward(req, resp);

}}

在web.xml中配置信息

PermissionFilter

com.jikexueyuan.filter.PermissionFilter

PermissionFilter

/*

相关主题