Servlet配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>o</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>OA</servlet-name>
<servlet-class>OA.servlet.OAService</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OA</servlet-name>
<url-pattern>/OA</url-pattern>
</servlet-mapping>
</web-app>
//servlet-name相同
//servlet-class是servlet继承Httpservlet类的全部路径
//url-pattern是from表单的提交路径
//通过url-pattern找到servlet-name相同的servlet-class,然后运行配置的class文件,doget/doPost.
Servlet/应用
/*结构
建立实体
通过数据访问层Dao层用实体接受
写服务层对实体进行操作
然后from表单通过Servlet用服务层进行实现,*/
package OA.servlet;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import OA.Connection.Generic;
import OA.mode.Dept;
import OA.service.DeptService;
import net.sf.json.JSONArray;
import oracle.net.aso.s;
public class DeptServlet<T> extends HttpServlet {
private T T;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(delete(req));
resp.sendRedirect(req.getContextPath() + "/Dept.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8");
DeptService DeptService = new DeptService();
Dept dept = new Dept();
switch (req.getParameter("Type")) {
case "Add":
//通过ajax实现
Collection<Dept> list = DeptService.Fid(0);
resp.getWriter().print(JSONArray.fromObject(list));
resp.getWriter().flush();
resp.getWriter().close();
break;
case "AddDept":
int id = Integer.parseInt(req.getParameter("Dept_id"));
String name = req.getParameter("Dept_name");
int fid = Integer.parseInt(req.getParameter("Dept_fid"));
String dec = req.getParameter("Dept_description");
dept.setDept_id(id);
dept.setDept_name(name);
dept.setDept_fig(fid);
dept.setDept_description(dec);
boolean end = DeptService.add(dept);
System.out.println(end);
resp.sendRedirect(req.getContextPath() + "/Dept.jsp");
break;
default:
break;
}
}
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
}
public boolean delete(HttpServletRequest req) {
try {
req.setCharacterEncoding("UTF-8");
switch (req.getParameter("Type")) {
case "Dept":
System.out.println("Dept");
Dept dept=new Dept();
Generic<Dept> Generic=new Generic<Dept>();
Generic.delete(dept, Integer.parseInt(req.getParameter("id")));
break;
default:
break;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return false;
}
return true;
}
}
ServletAjax的/应用
<script type="text/javascript">
$(function(){
var sopt="<option value='0'>顶级部门</option>";
$.ajax({
url:'<%=request.getContextPath()%>/Dept',
type:'post',
data: {Type:'Add'},
dataType:'JSON',
success: function(data){
$.each(data,function(i,n){
sopt+="<option value='"+n.dept_id+"'>"+n.dept_name+"</option>";
})
$("#fid").append(sopt);
}
});
$("#Add").click(function() {
});
})
</script>
Struts2框架的Xml配置/搭建/应用
//(1)解压struts-2.3.4.1-all
//(2)然后解压struts-2.3.4.1/apps/struts2-blank.war
//(3)Struts\WEB-INF\Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
//复制内容到项目里的web.xml文件
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
//(4)Struts\WEB-INF\src\java\struts.xml(该xml文件放在项目src下面)
//(5)把struts.xml文件简化后
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="*_*" class="OA.service.{1}Over" method="{2}">
<result>/{1}{2}.jsp</result>
<!--<result>/OA.jsp</result>-->
</action>
</package>
</struts>
//<action>的name是web:url路径,通过class(要执行的class文件全路径),method是执行的方法;
//<result>是通过<action>name执行<action>calss配置的java.class文件,运行完后打开的网页,现在是DeptAdd.jsp;
package OA.service;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.struts2.components.ActionComponent;
import com.opensymphony.xwork2.ActionContext;
import OA.Connection.Connection;
import OA.Uilt.GetConnectionValues;
import OA.mode.Dept;
import OA.mode.Primarykey;
public class DeptOver extends GetConnectionValues {
private int Dept_id;
private String Dept_name;
private int Dept_fig;
private String Dept_description;
public int getDept_id() {
return Dept_id;
}
public void setDept_id(int dept_id) {
Dept_id = dept_id;
}
public String getDept_name() {
return Dept_name;
}
public void setDept_name(String dept_name) {
Dept_name = dept_name;
}
public int getDept_fig() {
return Dept_fig;
}
public void setDept_fig(int dept_fig) {
Dept_fig = dept_fig;
}
public String getDept_description() {
return Dept_description;
}
public void setDept_description(String dept_description) {
Dept_description = dept_description;
}
public DeptOver() {
}
public String Add() {
System.out.println("*****");
Dept Dept = new Dept();
// Dept.setDept_id(Dept_id);
// Dept.setDept_name(Dept_name);
// Dept.setDept_fig(Dept_fig);
// Dept.setDept_description(Dept_description);
// Connection.Call().Add(Dept);
Collection<Dept> list = Connection.Call().Select();
// ArrayList<Dept> list=new ArrayList<Dept>();
// list.add(new Dept(1, "888", 2, "fsufk"));
ActionContext.getContext().put("list", list);
System.out.println(Dept_id + Dept_name + Dept_fig + Dept_description);
ActionContext.getContext().put("Dept_id", "52");
return "success";
}
}
//<action>的配置的class,它的字段属性必须封装,属性名必须和from表单里面input的name相同;
Struts2框架的/应用
package OA.service;
import java.util.Collection;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import OA.Connection.Connection;
import OA.mode.Point;
import OA.mode.Dept;
public class DeptOver implements ModelDriven<Dept> {
private Dept entity;
private Point point;
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public Dept getEntity() {
return entity;
}
public void setEntity(Dept entity) {
this.entity = entity;
}
public String OA() {
System.out.println(point);
return "OA";
}
/**
* 添加
*
* @return
*/
public String Add() {
int id = entity.getDept_id();
entity.setDept_id(id);
entity.setDept_name(entity.getDept_name());
entity.setDept_fig(entity.getDept_fig());
entity.setDept_description(entity.getDept_description());
if (id == 0) {
Connection.Call().Add(entity);
}
Connection.Call().Modify(entity);
return "success";
}
/**
* 查询
*
* @return
*/
public String Select() {
Collection<Dept> list = Connection.Call().Select();
ActionContext.getContext().put("list", list);
return "success";
}
/**
* 删除
*
* @return
*/
public String Delete() {
Connection.Call().delete(entity.getDept_id());
return "delete";
}
@Override
public Dept getModel() {
if (entity == null) {
entity = new Dept();
}
return entity;
}
}
//该类通过implements于ModelDriven<T>,对那个实体进行操作就给<Dept>填写里面,还必须重写getModel方法,getModel优先运行,Dept的封装类的字段属性必须和页面的name相同.
Struts2框架向页面发送信息
//添加到Context()
ActionContext.getContext().put("list", list);
//拿到值
<S:iterator value="#list" var="a">
<S:property value="#a.dept_name" />
<S:property value="#a.dept_id" />
</S:iterator>
//该类型主要用于判断用户是否登录
ActionContext.getContext().getSession().put("list", list);
//后续补充
ActionContext.getContext().getValueStack().push(list);
//后续补充
ServletActionContext.getRequest().setAttribute("list", list);
Struts2全局转换器
//创建一个类
package OA.mode;
import java.util.Date;
public class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
//然后再Action里面进行封装
package OA.service;
import java.util.Collection;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import OA.Connection.Connection;
import OA.mode.Point;
import OA.mode.Dept;
public class DeptOver implements ModelDriven<Dept> {
private Dept entity;
private Point point;
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public Dept getEntity() {
return entity;
}
public void setEntity(Dept entity) {
this.entity = entity;
}
public String OA() {
//System.out.println(point.getDate());
Collection<Dept> list = Connection.Call().Select();
// ActionContext.getContext().put("list", list);
ActionContext.getContext().getSession().put("list", list);
// ActionContext.getContext().getValueStack().push(list);
// ServletActionContext.getRequest().setAttribute("list", list);
return "OA";
}
/**
* 添加
*
* @return
*/
public String Add() {
int id = entity.getDept_id();
entity.setDept_id(id);
entity.setDept_name(entity.getDept_name());
entity.setDept_fig(entity.getDept_fig());
entity.setDept_description(entity.getDept_description());
if (id == 0) {
Connection.Call().Add(entity);
}
Connection.Call().Modify(entity);
return "success";
}
/**
* 查询
*
* @return
*/
public String Select() {
Collection<Dept> list = Connection.Call().Select();
ActionContext.getContext().put("list", list);
ActionContext.getContext().getSession().put("list", list);
ActionContext.getContext().getValueStack().push(list);
ServletActionContext.getRequest().setAttribute("list", list);
return "success";
}
/**
* 删除
*
* @return
*/
public String Delete() {
Connection.Call().delete(entity.getDept_id());
return "delete";
}
@Override
public Dept getModel() {
if (entity == null) {
entity = new Dept();
}
return entity;
}
}
//转换器
package OA.service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import OA.mode.Dept;
public class DateConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map arg0, String[] val, Class arg2){
//val就是接受的值
Point Point=new Point();
//接受12,88
String value=val[0];
//把12,88用逗号隔开生成数组
String[] Field=value.split(",");
Point.setX(Integer.parseInt(Field[0]));
Point.setY(Integer.parseInt(Field[1]));
return Point;
}
@Override
public String convertToString(Map arg0, Object arg1) {
//arg1接受的值转换
Point Point=(Point)arg1;
return "X:"+Point.getX()+"Y:"+PointgetY();
}
}
/*
创建一个实体类
在Action进行封装
配置全局转换器:必须在src下创建xwork-conversion.properties文件
文件内容是OA.mode.Point=OA.service.PointConverter
文件格式是:实体类的全路径=转换该类的全路径
该例子效果:
没有转换器的时候:在input框输入12,88,接受的页面显示的是12,88,debug里面是null
有转换器的时候:在input框输入12,88,接受的页面显示的是"X:12Y:88,debug里面是有值得
*/
//如果全局转换器配置一个类,则在局部转换器给该类里的一个属性进行转换的时候,有时候不运行
Struts2局部转换器转换器
package OA.service;
import java.util.Collection;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import OA.Connection.Connection;
import OA.mode.Point;
import OA.mode.Dept;
public class DeptAction implements ModelDriven<Dept> {
private Dept entity;
private Point point;
private Date time;
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public Dept getEntity() {
return entity;
}
public void setEntity(Dept entity) {
this.entity = entity;
}
public String OA() {
return "OA";
}
/**
* 添加
*
* @return
*/
public String Add() {
int id = entity.getDept_id();
entity.setDept_id(id);
entity.setDept_name(entity.getDept_name());
entity.setDept_fig(entity.getDept_fig());
entity.setDept_description(entity.getDept_description());
if (id == 0) {
Connection.Call().Add(entity);
}
Connection.Call().Modify(entity);
return "success";
}
/**
* 查询
*
* @return
*/
public String Select() {
Collection<Dept> list = Connection.Call().Select();
ActionContext.getContext().put("list", list);
ActionContext.getContext().getSession().put("list", list);
ActionContext.getContext().getValueStack().push(list);
ServletActionContext.getRequest().setAttribute("list", list);
return "success";
}
/**
* 删除
*
* @return
*/
public String Delete() {
Connection.Call().delete(entity.getDept_id());
return "delete";
}
@Override
public Dept getModel() {
if (entity == null) {
entity = new Dept();
}
return entity;
}
}
//转换类
package OA.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class DeptConverter extends StrutsTypeConverter {
private SimpleDateFormat sim = new SimpleDateFormat("yyyy/MM/dd");
@Override
public Object convertFromString(Map arg0, String[] value, Class arg2) {
Date date = null;
try {
date = sim.parse(value[0]);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return date;
}
@Override
public String convertToString(Map arg0, Object arg1) {
System.out.println("执行完了");
Date Date = (Date) arg1;
return "时间:" + sim.format(Date);
}
}
/*
在Action命名一个time,封装一下.
文件名:DeptAction-conversion.properties,格式是ActionClass-conversion.properties
位置:文件必须在Action同一个包中,
内容:time=OA.Converter.DeptConverter
格式是:要转换的time=转换类的路径
例子效果:
没有转换器的时候:在input框输入2012/12/12,接受的页面显示的是2012/12/12,debug里面是null
有转换器的时候:在input框输入2012/12/12,接受的页面显示的是时间:2012/12/12 ,debug里面是有值的
*/