对jsp的一个小结(8)使用servlet控制新闻管理、使用过滤器(解决乱码)和监听器(统计在线用户人数)

14.使用servlet控制新闻管理

1专题任务

2创建Servlet

package demo.web.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyServlet1 implements Servlet {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		// TODO Auto-generated method stub

	}

}
package demo.web.servlet;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyServlet2 extends GenericServlet {

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		// TODO Auto-generated method stub

	}

}

package demo.web.servlet;

import java.io.IOException;

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

public class MyServlet3 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.service(arg0, arg1);
	}
	
}

3部署Servlet

package demo.web.servlet;

import java.io.IOException;

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 MyServlet3 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("处理请求,doGet被调用");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("处理请求,doPost被调用");
	}

	/*@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.service(arg0, arg1);
	}*/

	@Override
	public void destroy() {
		System.out.println("servlet销毁,destroy被调用");
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("servlet初始化,init被调用");
		String initParam=config.getInitParameter("charSetContent");
		System.out.println(initParam);
	}
	
	
}
web.xml部署(四种servlet匹配)

  <servlet>
  	<servlet-name>myServlet3</servlet-name>
  	<servlet-class>demo.web.servlet.MyServlet3</servlet-class>
  	<init-param>
  		<param-name>charSetContent</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>myServlet3</servlet-name>
  	<url-pattern>/myServlet3</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
  	<servlet-name>myServlet3</servlet-name>
  	<url-pattern>/demo/myServlet3</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
  	<servlet-name>myServlet3</servlet-name>
  	<url-pattern>/demo/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
  	<servlet-name>myServlet3</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>

4使用Servlet完成新闻添加

doadd.jsp修改成AddNewsSerlet类

package com.pb.news.web.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

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

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.pb.news.dao.NewsDao;
import com.pb.news.dao.impl.NewsDaoImpl;
import com.pb.news.entity.News;
import com.pb.news.service.impl.NewsServiceImpl;

/**
 * Servlet implementation class AddNewsServlet
 */
public class AddNewsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddNewsServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收新闻内容,调用相应Service方法处理请求,最红决定跳转到哪个jsp页面
		NewsServiceImpl newsService=new NewsServiceImpl();
		NewsDao newsDao=new NewsDaoImpl();
		newsService.setNewsDao(newsDao);
		
		request.setCharacterEncoding("utf-8");
		boolean bRet = false;
		boolean bUpload = false;
		String uploadFileName = "";
		String fieldName = "";
		News news = new News();
		news.setCreateDate(new Date());
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		String uploadFilePath = request.getSession().getServletContext().getRealPath("/upload/" );
		if (isMultipart == true) {
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			try {
				List<FileItem> items = upload.parseRequest(request);
				Iterator<FileItem> iter = items.iterator();
				while (iter.hasNext()) {
					FileItem item = (FileItem) iter.next();
					if (item.isFormField()){
						fieldName = item.getFieldName();
						if (fieldName.equals("title")){
							news.setTitle(item.getString("UTF-8"));
						}else if(fieldName.equals("id")){
							String id = item.getString();
							if (id != null && !id.equals("")){
								news.setId(Integer.parseInt(id));
							}
						}else if (fieldName.equals("categoryId")){
							news.setCategoryId(Integer.parseInt(item.getString()));
						}else if (fieldName.equals("summary")){
							news.setSummary(item.getString("UTF-8"));
						}else if (fieldName.equals("newscontent")){
							news.setContent(item.getString("UTF-8"));
						}else if(fieldName.equals("author")){
							news.setAuthor(item.getString("UTF-8"));
						}
					}else{
						String fileName = item.getName();
						if (fileName != null && !fileName.equals("")) {
							File fullFile = new File(item.getName());
							File saveFile = new File(uploadFilePath, fullFile.getName());
							item.write(saveFile);
							uploadFileName = fullFile.getName();
							news.setPicPath(uploadFileName);
							bUpload = true;
						}
					}
					
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println("上传成功后的文件名是::"+news.getPicPath());

			//调用后台方法,将新闻信息插入数据库
			bRet=newsService.addNews(news);
		if (bRet) {
			response.sendRedirect("jsp/admin/newsDetailList.jsp");
		} else {
			response.sendRedirect("jsp/admin/newsDetailCreate.jsp");
		}
	}

}

web.xml部署

<servlet>

<servlet-name>AddNewsServlet</servlet-name>

<servlet-class>com.pb.news.web.servlet.AddNewsServlet</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>AddNewsServlet</servlet-name>

<url-pattern>/AddNewsServlet</url-pattern>

</servlet-mapping>

15使用过滤器(解决乱码)和监听器(统计在线用户人数)

1使用过滤器解决乱码

package com.pb.news.web.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;

/**
 * Servlet Filter implementation class CharacterEncodingFilter
 */
public class CharacterEncodingFilter implements Filter {

    /**
     * Default constructor. 
     */
    public CharacterEncodingFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		request.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
		response.setCharacterEncoding("UTF-8");
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}
自动部署web.xml

-<filter>
<display-name>CharacterEncodingFilter</display-name>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.pb.news.web.filter.CharacterEncodingFilter</filter-class>
</filter>
-<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2使用监听器统计在线用户人数

package com.pb.news.constants;

public class Constants {
	public static int ONLINE_USER_COUNT =0;//在线用户数
}
package com.pb.news.entity;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import com.pb.news.constants.Constants;

public class User implements HttpSessionBindingListener{
	private int id;
	private String userName;
	private String password;
	private String email;
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	private int userType;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getUserType() {
		return userType;
	}
	public void setUserType(int userType) {
		this.userType = userType;
	}
	public void valueBound(HttpSessionBindingEvent arg0) {
		//存入session时自动调用
		Constants.ONLINE_USER_COUNT ++;
    }
    public void valueUnbound(HttpSessionBindingEvent arg0) {
    	//从session中删除时自动调用
    	Constants.ONLINE_USER_COUNT --;
    }

	

}
enter.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="doEnter.jsp" method="post">
来宾名:<input type="text" name="guestName"/><br/>
<input type="submit" value="进入" />
</form>
</body>
</html>


doEnter.jsp

<!-- 同学们可以使用Servlet代替本页面 -->
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="com.pb.news.entity.User" %>
<%
//从请求中取出访客名
String guestName=request.getParameter("guestName");
if(guestName==null||guestName.equals("")){
	response.sendRedirect("enter.jsp");
}else{ 
	User user=new User();//用户对象
	user.setUserName(guestName);//在user对象中保存访客名
	session.setAttribute("guest", user);//在session中保存user对象
	response.sendRedirect("online.jsp");
}
%>
online.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.pb.news.entity.User" %>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
User user=null;
if(session.getAttribute("guest")==null){
	response.sendRedirect("enter.jsp");
}else{
	user=(User)session.getAttribute("guest");
%>
您好:<%= user.getUserName() %><br/>
此时在线人数为:<%= com.pb.news.constants.Constants.ONLINE_USER_COUNT%><br/>
<a href="doOut.jsp">离开</a>
<%} %>
</body>
</html>
doOut.jsp

<!-- 同学们可以使用Servlet代替本页面 -->
<%@ page language="java" pageEncoding="UTF-8"%>

<%
session.invalidate();//使用session失效
response.sendRedirect("enter.jsp");
%>


16.新闻管理系统开发总结(调试。F5F6F8,F5进入方法内部,F6逐行执行,F8跳过方法)

使用Servlet控制业务流程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值