您的位置:首页 > Web前端 > JavaScript

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

2015-03-28 17:55 951 查看
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控制业务流程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: